Перевод в ММХ

Тема в разделе "WASM.BEGINNERS", создана пользователем Relic, 24 мар 2008.

  1. Relic

    Relic Member

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

    ltshck New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    195
    зы спецификацию процессоров от интел...
    там ест описание команд.
    ссылку дать не могу. гугли
     
  3. Relic

    Relic Member

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

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Relic
    Не подскажешь, где ключ от квартиры с деньгами взять?
     
  5. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    censored
    Ну и к чему это?
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    к тому что никто не любит делать чужую работу, по крайней мере бесплатно
     
  7. Relic

    Relic Member

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

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Дык я воабще не требовал никаких денег, я просто сказал так как оно и есть, и почему сразу 100? я думаю и за 10 ктонибудь сделал бы =)
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
  10. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Relic
    b = b1*alpha/255 + b2 - b2*alpha/255 = alpha*(b1 - b2)/255 + b2

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

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Relic
    10$ и пиши в личные сообщения
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Relic
    Весь смысл операций MMX - массовая обработка.
    В твоей постановке байты быстрее обработать обычными командами - через MMX будет дольше.
     
  13. Relic

    Relic Member

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

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

    SWR New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    226
    Адрес:
    Russia
    ResultBitmap24(r,g,b) = Bitmap24(r,g,b) + Bitmap32(r,g,b,a)
    не есть гуд для mmx, елиб "а" канал лежал отдельно то балобы хорошо
     
  15. valterg

    valterg Active Member

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