Re[2]: 32->16 (565)
От: Andrew S Россия http://alchemy-lab.com
Дата: 24.01.07 11:13
Оценка:
СМ>не вникая в сущность я бы сделал так
СМ>
СМ>        lodsd    
СМ>        mov ebx, eax        
СМ>        shr ah, 2
СМ>        shr eax, 3
СМ>        shr ebx, 8
СМ>        and eax, 07FFh
СМ>        and ebx, 0F800h
СМ>        mov edx, [esi]
СМ>        or  eax,ebx        
СМ>        shr dh, 2
СМ>        mov ebx, edx        
СМ>        shl ebx, 8
СМ>        and edx, 03FF8h
СМ>        and ebx, 0F8000000h
СМ>        shl edx, 13
СМ>        or  eax, ebx
СМ>        add esi, 4
СМ>        or  eax, edx                
СМ>        stosd ; тут мы пишем не в EDI+4 а в EDI, надо EDI перед циклом увеличить на 4
СМ>


СМ>ну и cld вне цикла и коррекция EDI.


СМ>нет никакой гарантии, что lods/stosd выполняются быстрей чем mov eax, [esi]; add esi, 4


Конечно, нет. Они выполнятся медленнее

Вопрос не в том, как быстрее работать с памятью — это я и сам знаю. Вопрос в том, как быстрее запаковать 2 32-х битные точки в один 32-х битный регистр в формате 5-6-5 или 5-5-5 — т.е. может есть какой хитрый биттрик.
Впрочем, я потом измерил производтельность еще раз, минимизировав нагрузку на систему — мой вариант дает выигрыш порядка 10% от первоначального.Но вопрос все-равно интересен
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.