«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > IACA помогает оптимизировать анализ производительности кода CPU Intel

IACA помогает оптимизировать анализ производительности кода CPU Intel

Опубликовано в 2025-04-29
Просматривать:154

How Does Intel Architecture Code Analyzer (IACA) Help Analyze and Optimize Code Performance for Intel CPUs?

известный как анализатор кода архитектуры Intel, IACA является расширенным инструментом для оценки планирования кода по процессорам Intel. Он работает в трех режимах:

  • режим пропускной способности: максимальная пропускная способность IACA, предполагая, что это тело вложенного цикла. Инструкции.
  • ]
  • режим трассировки: IACA прослеживает последовательность инструкций по мере их продвижения через трубопроводы.
  • waling и приложения:

в подробных диаграммах ASCII или интерактивных графиков. Язык.

    c/c:
  • включить необходимый заголовок IACA (iacamarks.h) и поместите начало и конечный маркер while (cond) { IACA_START / * Внутреннее тело петли */ / * ... */ } IACA_END
  • Assembly (x86):
]

вставьте указанные шаблоны магических байтов для обозначения маркеров вручную:

/ * nasm *// MOV EBX, 111; Начать маркерные байты DB 0x64, 0x67, 0x90; Начать маркерные байты .innerMostLooplabel: ; Тел петли ; ... jne .innermostlooplabel; Условная ветвь назад к вершине петли MOV EBX, 222; Конечные маркерные байты DB 0x64, 0x67, 0x90; Конец маркера Bytes

invocation: ]

invoke iAca из командной строки с соответствующими параметрами, такими как:

iAca.sh -64 -Arch hsw -graph insndeps. ЦП Haswell, генерируя отчет об анализе и визуализацию Graphviz.
/* C or C   Usage */

while(cond){
    IACA_START
    /* Innermost Loop Body */
    /* ... */
}
IACA_END

output Interpretation:

В выходном отчете содержится подробная информация о планировании целевого кода и узких местах. Например, рассмотрим следующий фрагмент сборки:

. L2: vmovaps ymm1, [rdi rax]; l2 vfmadd231ps ymm1, ymm2, [rsi rax]; l2 vmovaps [rdx rax], ymm1; S1 добавить Ракса, 32; ДОБАВЛЯТЬ Jne .l2; Jmp
/* C or C   Usage */

while(cond){
    IACA_START
    /* Innermost Loop Body */
    /* ... */
}
IACA_END
, вставив маркеры вокруг этого кода и анализируя его, IACA может сообщить (Abridged):

отчет анализа пропускной способности --------------------------- Блок пропускной способности: 1,55 циклов пропускной способности. [Разбивка давления в порту] | Инструкция -------------------------- | ----------------- | | vmovaps ymm1, ymmword ptr [rdi rax*1] | 0,5 cp | | 1,5 CP | VFMADD231PS YMM1, YMM2, YMMWORD PTR [RSI RAX*1] | 1,5 CP | vmovaps ymmword ptr [rdx rax*1], ymm1 | 1 cp | Добавить RAX, 0x20 | 0 cp | jnz 0xfffffffffffffffec

из этого вывода IACA идентифицирует Agu Haswell и порт 2 и 3 как узкие места. Он предполагает, что оптимизация инструкции хранилища, которая будет обработана с помощью порта 7, могла повысить производительность.

iaca.sh -64 -arch HSW -graph insndeps.dot foo

iACA имеет некоторые ограничения:

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

]

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

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3