Оптимизация для процессоров семейства Pentium: 21. Поиск узких мест (PPro, PII и PIII)

Дата публикации 22 авг 2002

Оптимизация для процессоров семейства Pentium: 21. Поиск узких мест (PPro, PII и PIII) — Архив WASM.RU

Оптимизируя код для этих процессоров, важно проанализировать, где находятся узкие места. Оптимизация одного узкого места не будет иметь смысла, если есть другое еще уже.

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

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

Если у вас много делений, попробуйте снизить их количество и убедитесь, что процессору есть чем заняться во время обработки операции деления.

Цепочки зависимости мешают выполнению не по порядку (глава 20). Попробуйте разрывать длиную цепочку зависимости, особенно, если они содержат медленные инструкции, такие как умножение, деление и инструкции плавающей запятой.

Если у вас много переходов, вызовов или возвратов, особенно если переходы плохо предсказуемы, посмотрите, нельзя ли избежать некоторых из них.Заменяйте условные переходы условными перемещениями, если это возможно, а маленькие процедуры макросами.

Если вы смешиваете разные типы данных (8, 16 и 32 битные целые числа), тогда следите за появление частичных задержек. Если вы используете инструкции PUSHF или LAHF, тогда следите за появлением частичных задержек флагов. Избегайте тестирования флагов после сдвигов больше, чем на 1 (глава 19).

Если вы нацелились на производительность в 3 мопа за такт, тогда следите, чтобы не происходило перебоев в доставке инструкций и их раскодировке (глава 14 и 15), особенно в маленьких циклах.

Ограничение на чтение максимум из двух постоянных регистров может снизить вашу производительность до уровня, меньшего чем 3 мопа за такт. Это может случиться, если вы часто читаете регистры, когда уже истекли четыре такта с момента их последнего изменения. Это может, например, случиться, если вы часто используете указатели для адресации, но редко модифицируете указатели.

Производительность в три мопа за такт требует, чтобы никакой порт выполнения не получал больше 1/3 всех мопов (глава 17).

Станция вывода из обращения может обрабатывать 3 мопа за такт, но может быть менее эффективной при работе с полученными переходами (глава 18). © Агнер Фог, пер. Aquila


0 702
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532