Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Извиняюсь, что не в тему, а про оптимизацию. 24.08.07 10:42 Число просмотров: 5525
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 24.08.07 10:45 Количество правок: 2
|
> А если еще и в оптимизацию податься, которая мешает читать > )) >
Извиняюсь, что не в тему, а про оптимизацию.
> move ebx, x ; (x>>1) // вот здесь то, равно как
1. Если к функции обратились, передав значения через память, значит эти данные недавно были размещены в памяти, значит они в кеше первого уровня, доступ к которому во много раз быстрее, чем к ОЗУ.
> и в move ecx,y и висит "основной тормоз" -- ОЗУ ;) > xor edx,edx ; а вот и один (через две строки) > move eax,ebx > move ecx, y ; (y>>1) > or eax, ecx ; получит (x|y)&1 > inc edx > > shr ebx,dl
2. После инкремента регистра d, сразу же идет его использование в сдвиге. Эти инструкции не распараллелятся. Инкремент полезно поднять на одну-две инструкции повыше. Лучше вообще в регистр константу заносить. Это быстрее не будет, медленнее тоже, как и компактнее, разве что инструкций поменьше.
> and al, dl
3. При сдвиге на 1 лучше константу подсовывать. У 86 процов вроде как отдельная инструкция для этого есть. В любом случае даже простые константы не синтезировать, а подсовывать в поток инструкций. Мне запомнилось, что сложение двух регистров и константы на довольно древних процессорах может быть выполнено за один такт (или за нулевое время), поскольку оно делается еще на этапе выборки и дешифрации адреса.
lea ax, [bx]+[bp]+N
будет быстрее, чем
mov ax, bp
add ax, bx
add ax, N
к тому же эти инструкции на двухконвеерных процессорах даже не распараллеляться.
> shr ecx, dl ; хэ, что-т напоминает ;) > add ebx,al > nop > add ebx, ecx ; == retval
Просьба поправить, если я ошибся.
|
|
|