Windows Assembly Site |О проекте| |Неофиту|

СТАТЬИ > Оптимизация

Статьи:
· Низкоуровневое программирование для дZенствующих
· Уроки Iczelion'а
· COM и OOP
· DirectX/OpenGL
· Секреты Win32
· Оптимизация
· Компиляторы
· Защита от отладки
· Вирусология
· Безопасность
· Сеть
· Программерский дZен
· Форматы файлов
· Процессоры
· Диски, приводы и электроника
· BIOS/CMOS
· DOS навсегда!
· Исследование программ
· Защищенный режим
· Алгоритмы
· Консоли и КПК
· Байт-код
· Linux/Unix
· Assembler.Ru
· Разное

Циклы:
Оптимизация для процессоров семейства Pentium
Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 3. Вызов ассемблерных функций из языка высокого уровня (1) (печать) /30.11.2012/ Хитов: 4906
Вы можете использовать встроенный ассемблер или написать процедуру полностью на ассемблере и вставить ее в свой проект.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 1. Введение (1) (печать) /30.11.2012/ Хитов: 4725
Это руководство подробно рассказывает о том, как писать оптимизированный код на ассемблере, с ориентированием на семейство микропроцессоров Pentium.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 2. Литература (0) (печать) /30.11.2012/ Хитов: 4988
Множество полезную литературы и туториалов можно скачать бесплатно с www-сайта Intel или заказать на CD-ROM. Рекомендуется, чтобы вы изучили эту литературу для ознакомления с архитектурой процессора.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 4. Отладка (0) (печать) /30.11.2012/ Хитов: 4012
Отладка ассемблерного кода может оказаться довольно трудоемкой и неприятной, как вы, возможно, уже заметили. Я рекомендую вам сначала написать то, что вы хотите оптимизировать как подпрограмму на языке высокого уровня.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 5. Модель памяти (0) (печать) /30.11.2012/ Хитов: 4545
Пентиумы спроектированны в основном для 32-х битного кода, и качество ужасно при использовании 16-битного кода.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 6. Выравнивание (1) (печать) /30.11.2012/ Хитов: 4187
Все данные в RAM должны быть выравненены так, чтобы их адреса были кратны 2, 4, 8 или 16...

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 7. Кэш (2) (печать) /30.11.2012/ Хитов: 4123
У PPlain и PPro 8 килобайт кэша первого уровня для кода и 8 килобайт для данных. У PMMX, PII и PIII по 16 килобайт для кода и данных. Данные в кэше первого уровня можно читать или перезаписывать всего лишь за один такт, в то время как выход за границы кэша может стоить множества тактов. Поэтому важно, понимать, как работает кэш, чтобы использовать его более эффективно.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 8. Исполнение кода в первый раз (0) (печать) /30.11.2012/ Хитов: 3840
Обычно исполнение кода в первый раз занимает намного больше, чем при последующих повторениях в силу следующих причин...

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 9. Задержка генерации адреса (0) (печать) /30.11.2012/ Хитов: 3629
Чтобы высчитать адрес в памяти, который нужен инструкции, требуется один такт. Обычно эти вычисления делаются одновременно с выполнение предыдущей инструкции или спаренных инструкций. Но если адрес зависит от результат инструкции, которая выполнялась в предыдущем такте, тогда вам придется подождать дополнительный такт, чтобы получить требуемый адрес. Это называется задержкой AGI.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 11. Разбивка сложных инструкций на более простые (PPlain и PMMX) (0) (печать) /30.11.2012/ Хитов: 3645
Вы можете разбить инструкции чтения/модифицирования и инструкции чтения/модифицирования/записи, чтобы улучшить спаривание.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 10. Спаривание целочисленных инструкций (PPlain и PMMX) (0) (печать) /30.11.2012/ Хитов: 4089
У PPlain и PMMX есть два конвеера, выполняющих инструкции, которые называются U-конвеер и V-конвеер. В определенных условий можно выполнить две инструкции одновременно, одну в U-конвеере, а другую в V-конвеере.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 12. Префиксы (PPlain и PMMX) (0) (печать) /30.11.2012/ Хитов: 3690
Инструкция с одним или более префиксами не может исполняться в V-конвеере...

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 13. Обзор конвеера PPro, PII и PIII (0) (печать) /30.11.2012/ Хитов: 3546
Архитектура микропроцессоров PPro, PII и PIII хорошо объяснена и проиллюстрирована в различных руководствах от Интела. Рекомендуется сначала изучить этот материал, чтобы понимать, как работают эти процессоры. Я коротко объясню его структуру с упором на те элементы, которые необходимы для оптимизирования кода.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 14. Раскодировка инструкций (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3469
Я рассказываю о раскодировке инструкций до доставки инструкций, потому что вам необходимо знать, как работают раскодировщики, чтобы понимать возможные способы доставки.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 15. Доставка инструкций (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3459
Код доставляется в двойной буфер из кэша кода чанками по 16 байт. Двойной буфер называется так, потому что он содержит два таких чанка. Затем код берется из двойного буфера и скармливается декодерам поблочно (каждый блок обычно 16 байтов длиной, но необязательно, он может быть и не выравнен по этой границе).

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 16. Переименование регистров (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3606
Переименование регистров - это продвинутая техника, используемая этими микропроцессорами, чтобы убрать зависимости между различными частями кода.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 17. Выполнение кода не по порядку (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3696
Буфер перегруппировки вмещает 40 мопов. Каждый моп ждет в ROB, пока все операнды не будут готовы и не появится свободный модуль для их выполнения. Это делает возможным выполнение кода не по порядку. Если одна часть кода задерживается из-за загрузки в кэш, это не повлияет на выполнение других частей кода, если они не зависят от первой части.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 18. Вывод из обращения (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3473
Вывод из обращения (retirement) - это процесс, когда временные регистры, используемые мопами, копируют в постоянные регистры EAX, EBX и так далее. Когда моп выполнен, он помечается в ROB как готовый к выводу из обращения.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 19. Частичные задержки (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3383
Частичная задержка регистра - это проблема, которая возникает, когда вы пишите в часть 32-х битного регистра, а затем читаете из всего регистра или его большей части.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 20. Цепочки зависимости (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3191
Серии инструкций, где выполнение каждой зависит от результата предыдущей, называется цепочкой зависимости. Большие цепочки нужно по возможности избегать, потому что они делают невозможным выполнение не по порядку и параллельное выполнение.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 21. Поиск узких мест (PPro, PII и PIII) (0) (печать) /30.11.2012/ Хитов: 3492
Оптимизируя код для этих процессоров, важно проанализировать, где находятся узкие места. Оптимизация одного узкого места не будет иметь смысла, если есть другое еще уже.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 22. Команды передачи управления и переходов (все процессоры) (1) (печать) /30.11.2012/ Хитов: 3703
Семейство процессоров Pentium пытаются предсказывать, когда произойдет безусловный переход и будет ли осуществлен условный. Если предсказание оказывается верным, тогда это может сэкономить существенное количество времени, так как в конвеер будут загружены последующие инструкции, и начнется их раскодировка еще до того, как будет осуществлен сам переход. Если пресказание оказывается неверным, тогда конвеер должен быть очищен, что вызовет потери производительности, количество которых зависит от длины конвеера.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 23. Уменьшение размера кода (все процессоры) (0) (печать) /30.11.2012/ Хитов: 3604
Как было объяснено в главе 7, размер кода кэша равен 8 или 16 килобайтам. Если у вас есть подозрение, что критические части кода не поместятся в кэш, тогда вы можете подумать о том, чтобы уменьшить их размер.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 24. Работа с плавающей запятой (PPlain и PMMX) (0) (печать) /30.11.2012/ Хитов: 3575
Инструкции плавающей запятой не могут спариваться так, как это делают целочисленные инструкции, не считая некоторых случаев, определяемых следующими правилами...

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 25. Оптимизация циклов (все процессоры) (0) (печать) /30.11.2012/ Хитов: 4072
Анализируя свои программы, вы можете увидеть, что больше всего ресурсов пожирают внутренние циклы. Используя язык ассемблера можно существенно оптимизировать их. Остальную часть программы можно оставить написанной на языке высокого уровня.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 26. Проблемные инструкции (0) (печать) /30.11.2012/ Хитов: 5231
Инструкция 'XCHG регистр, [память]' опасна. По умолчанию эта инструкция имеет неявный префикс LOCK, что не дает ей загружаться в кэш. Поэтому выполнение данной инструкции отнимает очень много времени, и ее следует избегать.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 27. Специальные темы (1) (печать) /30.11.2012/ Хитов: 5242
В этой главе обсуждаются различные инструкции, представляющие особый интерес.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 28. Список периодов выполнения инструкций для PPlain и PMMX (0) (печать) /30.11.2012/ Хитов: 3646
Таблица тактов для PPlain и PMMX.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 29. Список периодов выполнения инструкций и задержек микроопераций для PPro, PII и PIII (0) (печать) /30.11.2012/ Хитов: 3734
Таблица тактов для PPro, PII и PIII

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 30. Тестирование скорости (0) (печать) /30.11.2012/ Хитов: 3764
У микропроцессоров семьи Pentium есть встроенный 64-х битный счетчик, который можно считать в EDX:EAX, используя инструкцию RDTSC (read time stamp counter). Эта инструкция очень полезна для того, чтобы точно узнать, сколько тактов занял кусок кода.

Агнер Фог, пер. Aquila - Оптимизация для процессоров семейства Pentium: 31. Сравнение различных микропроцессоров (0) (печать) /30.11.2012/ Хитов: 3763
Таблица важных различий между процессорами семества Pentium.

Разные статьи
Benny, пер. Aquila - Оптимизация 32-х битного кода (6) (печать) /16.06.2002/ Хитов: 5961
Эх, на кой ляд я написал эту статью ? Существует много подобных статей об оптимизации. Да, это пpавда, и также существует много хоpоших и кульных тутоpов [ Билли, твой док pулит! *]. Hо как вы можете видеть, не каждый автоp тутоpиала помнит, что означает теpмин "оптимизация", многие дают советы только по уменьшению кода. Есть много аспектов оптимизации и я хочу обсудить их здесь и пpодемонстpиpовать pасшиpенный взгляд на эту пpоблему.




© 2002-2011 wasm.ru - all rights reserved and reversed