| Оптимизация для процессоров семейства Pentium |
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 3. Вызов ассемблерных функций из языка высокого уровня
(1)
(печать) /08.09.2010/
|
Хитов: 802 |
Вы можете использовать встроенный ассемблер или написать процедуру полностью
на ассемблере и вставить ее в свой проект.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 1. Введение
(1)
(печать) /08.09.2010/
|
Хитов: 821 |
Это руководство подробно рассказывает о том, как писать оптимизированный код
на ассемблере, с ориентированием на семейство микропроцессоров Pentium.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 2. Литература
(0)
(печать) /08.09.2010/
|
Хитов: 739 |
Множество полезную литературы и туториалов можно скачать бесплатно с www-сайта
Intel или заказать на CD-ROM. Рекомендуется, чтобы вы изучили эту литературу
для ознакомления с архитектурой процессора.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 4. Отладка
(0)
(печать) /08.09.2010/
|
Хитов: 694 |
Отладка ассемблерного кода может оказаться довольно трудоемкой и неприятной,
как вы, возможно, уже заметили. Я рекомендую вам сначала написать то, что вы
хотите оптимизировать как подпрограмму на языке высокого уровня.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 5. Модель памяти
(0)
(печать) /08.09.2010/
|
Хитов: 674 |
Пентиумы спроектированны в основном для 32-х битного кода, и качество ужасно при использовании
16-битного кода.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 6. Выравнивание
(1)
(печать) /08.09.2010/
|
Хитов: 730 |
Все данные в RAM должны быть выравненены так, чтобы их адреса были кратны 2,
4, 8 или 16...
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 7. Кэш
(2)
(печать) /08.09.2010/
|
Хитов: 747 |
У PPlain и PPro 8 килобайт кэша первого уровня для кода и 8 килобайт для
данных. У PMMX, PII и PIII по 16 килобайт для кода и данных. Данные в кэше
первого уровня можно читать или перезаписывать всего лишь за один такт, в то
время как выход за границы кэша может стоить множества тактов. Поэтому важно,
понимать, как работает кэш, чтобы использовать его более эффективно.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 8. Исполнение кода в первый раз
(0)
(печать) /08.09.2010/
|
Хитов: 644 |
Обычно исполнение кода в первый раз занимает намного больше, чем при
последующих повторениях в силу следующих причин...
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 9. Задержка генерации адреса
(0)
(печать) /08.09.2010/
|
Хитов: 656 |
Чтобы высчитать адрес в памяти, который нужен инструкции, требуется один такт.
Обычно эти вычисления делаются одновременно с выполнение предыдущей инструкции
или спаренных инструкций. Но если адрес зависит от результат инструкции,
которая выполнялась в предыдущем такте, тогда вам придется подождать
дополнительный такт, чтобы получить требуемый адрес. Это называется задержкой
AGI.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 11. Разбивка сложных инструкций на более простые (PPlain и PMMX)
(0)
(печать) /08.09.2010/
|
Хитов: 621 |
Вы можете разбить инструкции чтения/модифицирования и инструкции
чтения/модифицирования/записи, чтобы улучшить спаривание.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 10. Спаривание целочисленных инструкций (PPlain и PMMX)
(0)
(печать) /08.09.2010/
|
Хитов: 688 |
У PPlain и PMMX есть два конвеера, выполняющих инструкции, которые называются
U-конвеер и V-конвеер. В определенных условий можно выполнить две инструкции
одновременно, одну в U-конвеере, а другую в V-конвеере.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 12. Префиксы (PPlain и PMMX)
(0)
(печать) /08.09.2010/
|
Хитов: 611 |
Инструкция с одним или более префиксами не может исполняться в V-конвеере...
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 13. Обзор конвеера PPro, PII и PIII
(0)
(печать) /08.09.2010/
|
Хитов: 585 |
Архитектура микропроцессоров PPro, PII и PIII хорошо объяснена и
проиллюстрирована в различных руководствах от Интела. Рекомендуется сначала
изучить этот материал, чтобы понимать, как работают эти процессоры. Я коротко
объясню его структуру с упором на те элементы, которые необходимы для
оптимизирования кода.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 14. Раскодировка инструкций (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 599 |
Я рассказываю о раскодировке инструкций до доставки инструкций, потому что
вам необходимо знать, как работают раскодировщики, чтобы понимать возможные
способы доставки.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 15. Доставка инструкций (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 609 |
Код доставляется в двойной буфер из кэша кода чанками по 16 байт. Двойной
буфер называется так, потому что он содержит два таких чанка. Затем код
берется из двойного буфера и скармливается декодерам поблочно (каждый блок
обычно 16 байтов длиной, но необязательно, он может быть и не выравнен по
этой границе).
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 16. Переименование регистров (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 631 |
Переименование регистров - это продвинутая техника, используемая этими
микропроцессорами, чтобы убрать зависимости между различными частями кода.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 17. Выполнение кода не по порядку (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 671 |
Буфер перегруппировки вмещает 40 мопов. Каждый моп ждет в ROB, пока все
операнды не будут готовы и не появится свободный модуль для их выполнения.
Это делает возможным выполнение кода не по порядку. Если одна часть кода
задерживается из-за загрузки в кэш, это не повлияет на выполнение других
частей кода, если они не зависят от первой части.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 18. Вывод из обращения (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 597 |
Вывод из обращения (retirement) - это процесс, когда временные регистры,
используемые мопами, копируют в постоянные регистры EAX, EBX и так далее.
Когда моп выполнен, он помечается в ROB как готовый к выводу из обращения.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 19. Частичные задержки (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 575 |
Частичная задержка регистра - это проблема, которая возникает, когда вы пишите
в часть 32-х битного регистра, а затем читаете из всего регистра или его
большей части.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 20. Цепочки зависимости (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 566 |
Серии инструкций, где выполнение каждой зависит от результата предыдущей,
называется цепочкой зависимости. Большие цепочки нужно по возможности
избегать, потому что они делают невозможным выполнение не по порядку и
параллельное выполнение.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 21. Поиск узких мест (PPro, PII и PIII)
(0)
(печать) /08.09.2010/
|
Хитов: 608 |
Оптимизируя код для этих процессоров, важно проанализировать, где находятся
узкие места. Оптимизация одного узкого места не будет иметь смысла, если
есть другое еще уже.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 22. Команды передачи управления и переходов (все процессоры)
(1)
(печать) /08.09.2010/
|
Хитов: 624 |
Семейство процессоров Pentium пытаются предсказывать, когда произойдет
безусловный переход и будет ли осуществлен условный. Если предсказание
оказывается верным, тогда это может сэкономить существенное количество
времени, так как в конвеер будут загружены последующие инструкции, и
начнется их раскодировка еще до того, как будет осуществлен сам переход.
Если пресказание оказывается неверным, тогда конвеер должен быть очищен, что
вызовет потери производительности, количество которых зависит от длины
конвеера.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 23. Уменьшение размера кода (все процессоры)
(0)
(печать) /08.09.2010/
|
Хитов: 613 |
Как было объяснено в главе 7, размер кода кэша равен 8 или 16 килобайтам. Если
у вас есть подозрение, что критические части кода не поместятся в кэш, тогда
вы можете подумать о том, чтобы уменьшить их размер.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 24. Работа с плавающей запятой (PPlain и PMMX)
(0)
(печать) /08.09.2010/
|
Хитов: 644 |
Инструкции плавающей запятой не могут спариваться так, как это делают
целочисленные инструкции, не считая некоторых случаев, определяемых следующими
правилами...
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 25. Оптимизация циклов (все процессоры)
(0)
(печать) /08.09.2010/
|
Хитов: 643 |
Анализируя свои программы, вы можете увидеть, что больше всего ресурсов
пожирают внутренние циклы. Используя язык ассемблера можно существенно
оптимизировать их. Остальную часть программы можно оставить написанной на
языке высокого уровня.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 26. Проблемные инструкции
(0)
(печать) /08.09.2010/
|
Хитов: 903 |
Инструкция 'XCHG регистр, [память]' опасна. По умолчанию эта инструкция имеет
неявный префикс LOCK, что не дает ей загружаться в кэш. Поэтому выполнение
данной инструкции отнимает очень много времени, и ее следует избегать.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 27. Специальные темы
(1)
(печать) /08.09.2010/
|
Хитов: 832 |
В этой главе обсуждаются различные инструкции, представляющие особый интерес.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 28. Список периодов выполнения инструкций для PPlain и PMMX
(0)
(печать) /08.09.2010/
|
Хитов: 591 |
Таблица тактов для PPlain и PMMX.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 29. Список периодов выполнения инструкций и задержек микроопераций для PPro, PII и PIII
(0)
(печать) /08.09.2010/
|
Хитов: 624 |
Таблица тактов для PPro, PII и PIII
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 30. Тестирование скорости
(0)
(печать) /08.09.2010/
|
Хитов: 695 |
У микропроцессоров семьи Pentium есть встроенный 64-х битный счетчик, который
можно считать в EDX:EAX, используя инструкцию RDTSC (read time stamp counter).
Эта инструкция очень полезна для того, чтобы точно узнать, сколько тактов
занял кусок кода.
|
|
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 31. Сравнение различных микропроцессоров
(0)
(печать) /08.09.2010/
|
Хитов: 671 |
Таблица важных различий между процессорами семества Pentium.
|