Статьи и главы из книг по оптимизации кода

Оптимизация для pentium процессора → Числа с плавающей точкой вместо целых чисел

<!--StartFragment -->
19.1 Перемещение данных
-----------------------
Инструкции с плавающей точкой могут быть использованы для копирования 8 байт
одновременно:
FILD QWORD PTR [ESI] / FISTP QWORD PTR [EDI]
Этот метод перспективен только, если приемник в кеше. Оптимальный путь,
перемещать, на Pentium, данные в не кешированный блок:

TopOfLoop:
FILD QWORD PTR [ESI]
FILD QWORD PTR [ESI+8]
FXCH
FISTP QWORD PTR [EDI]
FISTP QWORD PTR [EDI+8]
ADD ESI,16
ADD EDI,16
DEC ECX
JNZ TopOfLoop

Источник и приемник, конечно, должны быть выравнены на 8.
Опубликовал admin
26 Мар, Пятница 2004г.

Оптимизация для pentium процессора → Целые числа вместо чисел с плавающей точкой

Целочисленные инструкции, обычно, исполняются быстрее, чем инструкции с плавающей точкой, так что выгоднее использовать целочисленные инструкции для замены простых инструкций с плавающей точкой. Наиболее очевидный пример - перемещение данных.
Опубликовал admin
26 Мар, Пятница 2004г.

Оптимизация для pentium процессора → Обзор специальных инструкций

<!--StartFragment -->
17.1 LEA
--------
Инструкция LEA используется для многих целей, поскольку она может делать
сдвиг, сложение/вычитание, и загрузку помимо этого она спариваемая и
исполняется за один такт. Например:
LEA EAX,[EBX+8*ECX-1000]
намного быстрее, чем
MOV EAX,ECX / SHL EAX,3 / ADD EAX,EBX / SUB EAX,1000
Инструкция LEA может быть также быть использована для сложения или сдвига без
изменения флагов.
Опубликовал admin
26 Мар, Пятница 2004г.

Оптимизация для pentium процессора → Оптимизация цикла

<!--StartFragment -->
Анализируя программу, вы можете заметить, что нередко до 99% времени программа
проводит во внутренних циклах. Путем к увеличению скорости может стать
использование в наиболее критических частях цикла вставок ассемблерного кода.
Остальная часть программы может быть составлена на языке высокого уровня.

Обычно цикл содержит переменную-счетчик, показывающую сколько раз будет
повторяться цикл, а так же обычно обращается к элементам массива в каждой
итерации.
Опубликовал admin
26 Мар, Пятница 2004г.

Оптимизация для pentium процессора → Планирование операций с плавающей точкой

<!--StartFragment -->
Инструкции, оперирующие с плавающей точкой не могут спариваться, так же, как
другие инструкции, за исключением одного особого случая, определяемого
следующими правилами:
- первая инструкция (исполняющаяся в U-трубе) должна быть FLD, FADD, FSUB,
  FMUL, FDIV, FCOM, FCHS, or FABS

- вторая инструкция (в V-трубе), должна быть FXCH

- инструкция следующая за FXCH, должна быть инструкцией, оперирующей с
  плавающей точкой, в противном случае FXCH - возьмет дополнительный такт.

Этот особый случай спаривания очень важен, я кратко объясню почему.

Хотя инструк
Опубликовал admin
26 Мар, Пятница 2004г.


RSS-материал

Программирование для чайников.