Есть ли сценарий для пост-обработки некоторых выходных данных objdump --disassemble
, чтобы аннотировать количество циклов? Особенно для семейства ARM. В большинстве случаев это будет только сопоставление шаблона с поиском в таблице для подсчета. Я предполагаю, что могут понадобиться аннотации, такие как Perl, python, bash, +5M
для пяти циклов памяти.C
и т. д. в порядке. Я думаю, что это можно сделать в общем случае, но меня интересует ARM, который имеет ортогональный набор инструкций. Вот ветка на 68HC11, делающая то же самое. Сценарию потребуется параметр ЦП model для выбора подходящего количества циклов; Я думаю, что эти значения уже есть в описании машины gcc
.
Я не думаю, что для этого есть переключатель objdump
, но RTFM было бы здорово.
Редактировать: Чтобы уточнить, такие предположения, как подсистема памяти в лучшем случае, которая будет иметь место, когда код выполняется из кеша, в порядке. Целью является не 100% точный подсчет циклов, как на какой-нибудь работающей машине. Можно получить разумную оценку, иначе разработка компилятора была бы невозможна.
Как указывает DWelch, простой промежуточный итог невозможен с глубокой конвейерной архитектурой, такой как более поздние чипы Cortex. Постобработка objdump
должна была смотреть на окружающие коды операций. Плагин gcc, скорее всего, сможет это сделать, и, поскольку он новый (4.5+), я не думаю, что такая вещь существует. Скрипт для ARM926, безусловно, возможен и достаточно прост.
Задержка памяти не имеет значения. Контроллер памяти вроде другой CPU
. Он занимается своими делами, пока процессор занимается арифметикой и т. д. Хороший/хорошо настроенный алгоритм будет параллельным. доступ к памяти с вычислениями. Подсчитывая загрузки/хранения и циклы, вы можете определить, насколько достигается параллелизм при активном профилировании с помощью таймера. Конвейер важен из-за блокировок между регистрами, но количество циклов для базовых блоков может быть достоверно определено. рассчитываются и используются даже на современных процессорах ARM; это слишком сложно для простого скрипта.