Перевод в ММХ

Discussion in 'WASM.BEGINNERS' started by Relic, Mar 24, 2008.

  1. Relic

    Relic Member

    Blog Posts:
    0
    Joined:
    Sep 10, 2003
    Messages:
    79
    Для оптимизации обработки графики понадобилось перевести вот такой код на ММХ:
    b = b1*alpha/255 + b2*(1-alpha/255), где b,b1,b2, alpha: byte.
    Помогите, пожалуйста!
     
  2. ltshck

    ltshck New Member

    Blog Posts:
    0
    Joined:
    Nov 5, 2007
    Messages:
    195
    зы спецификацию процессоров от интел...
    там ест описание команд.
    ссылку дать не могу. гугли
     
  3. Relic

    Relic Member

    Blog Posts:
    0
    Joined:
    Sep 10, 2003
    Messages:
    79
    Чтобы перевести одну строчку довольно примитивного кода вы предлагаете мне изучить архитектуру интелловских процессоров и их команды, да еще и мультимедийное их расширение? Если бы у меня было достаточно много времени, я бы так и сделал. Но тут прошу просто перевести, кому не трудно
     
  4. censored

    censored New Member

    Blog Posts:
    0
    Joined:
    Jul 5, 2005
    Messages:
    1,615
    Location:
    деревня "Анонимные Прокси"
    Relic
    Не подскажешь, где ключ от квартиры с деньгами взять?
     
  5. Relic

    Relic Member

    Blog Posts:
    0
    Joined:
    Sep 10, 2003
    Messages:
    79
    censored
    Ну и к чему это?
     
  6. 2FED

    2FED New Member

    Blog Posts:
    0
    Joined:
    Feb 20, 2008
    Messages:
    1,002
    к тому что никто не любит делать чужую работу, по крайней мере бесплатно
     
  7. Relic

    Relic Member

    Blog Posts:
    0
    Joined:
    Sep 10, 2003
    Messages:
    79
    Я так подозреваю, что результатом перевода будет 15-20 асм.команд - сколько вы за это хотите? $100? Грустно...
    И я же написал - "кому не трудно". Неужели тут все думают только о коммерции....
     
  8. 2FED

    2FED New Member

    Blog Posts:
    0
    Joined:
    Feb 20, 2008
    Messages:
    1,002
    Дык я воабще не требовал никаких денег, я просто сказал так как оно и есть, и почему сразу 100? я думаю и за 10 ктонибудь сделал бы =)
     
  9. asmfan

    asmfan New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2006
    Messages:
    1,004
    Location:
    Abaddon
  10. t00x

    t00x New Member

    Blog Posts:
    0
    Joined:
    Feb 15, 2007
    Messages:
    1,921
    Relic
    b = b1*alpha/255 + b2 - b2*alpha/255 = alpha*(b1 - b2)/255 + b2

    P.S. такие вопросы с утра надо задавать
     
  11. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    Relic
    10$ и пиши в личные сообщения
     
  12. valterg

    valterg Active Member

    Blog Posts:
    0
    Joined:
    Aug 19, 2004
    Messages:
    2,105
    Relic
    Весь смысл операций MMX - массовая обработка.
    В твоей постановке байты быстрее обработать обычными командами - через MMX будет дольше.
     
  13. Relic

    Relic Member

    Blog Posts:
    0
    Joined:
    Sep 10, 2003
    Messages:
    79
    valterg
    Я сам виноват, не уточнил задачу... Конечно же это массовая обработка, т.к. действие производится сразу с 4-мя байтами, т.е. результирующий битмап pf24bit получается путем сложения такого же битмапа с другим 32-битным.
    Схематично так:
    ResultBitmap24(r,g,b) = Bitmap24(r,g,b) + Bitmap32(r,g,b,a)
    Надеюсь, понятно объяснил.

    PS только вместо сложения конечно же используется функция из стартового поста...
     
  14. SWR

    SWR New Member

    Blog Posts:
    0
    Joined:
    May 11, 2006
    Messages:
    226
    Location:
    Russia
    ResultBitmap24(r,g,b) = Bitmap24(r,g,b) + Bitmap32(r,g,b,a)
    не есть гуд для mmx, елиб "а" канал лежал отдельно то балобы хорошо
     
  15. valterg

    valterg Active Member

    Blog Posts:
    0
    Joined:
    Aug 19, 2004
    Messages:
    2,105
    Relic
    Ну так придется самому разобрать по ссылке asmfan.
    Уточню - не 255, а 256. И чуть разъясню :
    MMX позволяет складывать и умножать длинные целые числа - 64 бита.
    Чтобы получить выигрыш надо запихать все три цвета в 64 бита,
    да еще "проредить" нулями, чтобы при умножении результаты
    не наползли друг на друга - 00 00 RR 00 GG 00 BB 00
    ( записано побайтно, если qword то будет задом наперед).
    Теперь там почти нечего разбирать :) Все понятно.
    Но мне почему-то кажется, что куча команд упаковки/распаковки
    "сожрет" больше времени чем нормальный алгоритм.
    В ссылке указан выигрыш в 5 раз, но там мужик использует процедуру
    и еще "делит" на 256 - глупость.
    =====================
    Кстати, в алгоритме из ссылки альфа как раз извне задается в виде процента.
    Т.е. там строят пиксели с альфой. А у тебя похоже наоборот?
    Короче не ошибись...