Показать сообщение отдельно
Старый 21.01.2006, 12:49   #19
AsmLover
Оператор ЭВМ
 
Регистрация: 12.01.2006
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Вообще говоря, сдвиг не по-любому рулит. Как бы Impersonalisu снова слоган не поменять... Сдвиг рулит на языках, не имеющих нормальной возможности обработки битов, таких как Бейсик.
На ассемблере релизация, например, целочисленного умножения сдвигом и сложением уже не является самой быстрой, хоть и быстрее команды IMUL (14 тактов на P4). Быстрее выполняется команды LEA (4 такта), например вот как выглядит умножение на 9:
lea eax, [eax+eax*8],
и это выполняется быстрее, кстати, (в тактах) на P3, чем на P4. Также можно оптимизировать и одновременное выполнение (4 инструкций для АЛУ P4) RISC-подобное умножение командами MOV и ADD или, с интерливом, плюс LEA. Хотя из описания оптимизации кода под процессоры P4 уже интерлив не упоминается, однако он по-прежнему эффективен, как и для P3. А оптимальным алгоритмом целочисленного умножения ax на bx по-прежнему является:

Для каждого бита слева направо, если бит =1 выполняется
add ebx, eax
add eax, eax,
а если бит =0, то
add eax, eax.

Быстрее этого ничего нет ( разве оптимизация шитого кода, но это уже доступно только самим разработчикам процессоров).

Конечно, это уже высший пилотаж системного программирования и вряд ли понадобится, если вы не занимаетесь оптимизацией кода на профессиональном уровне.

Кстати, использование LEA эффективнее по тактам на AMD, чем на P4.

Знание архитектуры процессоров рулит!
(Offline)
 
Ответить с цитированием