Содержание:

1. Примечание переводчика
2. Введение
3. Литература
4. Отладка и проверка
5. Модель памяти
6. Выравнивание
7. Кеш
8. Блокировка генерации адреса AGI)
9. Спаривание инструкций
10. Исполнение кода в цикле
11. Неполное спаривание
12. Замена сложных инструкций на более простые
13. Переходы и ветви
14. Префиксы
15. Уменьшение длины кода
16. Планирование операций с плавающей точкой
17. Оптимизация цикла
18. Обзор специальных инструкций
19. Целые числа вместо чисел с плавающей точкой
20. Числа с плавающей точкой вместо целых чисел
21. Список целочисленных инструкций
22. Список инструкций с плавающей точкой
23. Скоростные испытания
24. Соображения о других микропроцессорах

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

<!--StartFragment -->
Большинство оптимизаций, описанных в этом документе может иметь очень
маленькую, а может и вообще отрицательную, эффективность на других, не-Intel
микропроцессорах, но о некоторых проблемах лучше быть осведомленным.

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

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

<!--StartFragment -->
У Pentium есть внутренний, 64 битный таймер, который может быть прочитан в
EDX:EAX при использовании инструкции RDTSC (чтение временной счетчик). Это
очень полезно для замера точного количества тактов, потребовавшихся на
исполнение части кода.

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

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

<!--StartFragment -->
Пояснения:
Операнды: r - регистр, m - память, m32 - 32 битный операнд памяти, и т.д.

Такты:
Цифры указывают минимальные значения. Промахи кеша, рассогласование и
исключения могут увеличить количество тактов.

Спариваемость:
+=спаривается с FXCH, np=не спаривается с FXCH.

i:
Перекрываются с целочисленными инструкциями. i=4 означает, что последние 4
такта могут перекрыться с целочисленными инструкциями.

fp:
Перекрываются с инструкциями с плавающей точкой. fp=2 означает.
Опубликовал admin
26 Мар, Пятница 2004г.

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

<!--StartFragment -->
Пояснения:
Операнды: r - регистр, m - память, i - непосредственное значение,
sr - сегментный регистр, m32 - 32 битный операнд памяти, и т.д.

Такты:
Цифры указывают минимальные значения.
Опубликовал admin
26 Мар, Пятница 2004г.

Статьи → Оптимизация для 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г.


RSS-материал

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