Как посчитать количество тактов ЦП между началом и концом теста в gem5?
Как посчитать количество тактов ЦП между началом и концом теста в gem5?
Я заинтересован во всех следующих случаях:
эталонный тест для всей системы. Может быть
m5
У гостевого инструмента есть способ сделать это?голый металлический тест. Когда gem5 выходит из системы, он автоматически выводит статистику, поэтому главный вопрос заключается в том, как пропустить циклы для загрузчика и перейти непосредственно к самому тесту.
Есть ли способ помимо изменения исходного кода с помощью инструментария инструментария? Как написать эти инструкции по приборам в деталях?
тест эмуляции syscall. Я думаю, что gem5 просто выводит
stats.txt
в конце пробега, а затем вы можете просто grepsystem.cpu.numCycles
, но я должен подтвердить это, в настоящее время заблокирован на: Как решить "FATAL: ядро слишком старое" при запуске gem5 в режиме SE эмуляции syscall?
Я хочу использовать это, чтобы узнать:
- узнать, как работают процессоры
- как оптимизировать код сборки или настройки компилятора для оптимальной работы на данном процессоре
1 ответ
m5
инструмент
Хорошим приближением является запуск, в идеале из сценария оболочки, который является /init
программа:
m5 resetstats
run-benchmark
m5 dumpstats
Тогда на хосте:
grep -E '^system.cpu.numCycles ' m5out/stats.txt
Дает что-то вроде:
system.cpu.numCycles 33942872680 # number of cpu cycles simulated
Обратите внимание, что если вы воспроизводите с m5 checkpoint
с другим процессором, например:
--restore-with-cpu=HPI --caches
тогда вам нужно grep для другого идентификатора:
grep -E '^system.switch_cpus.numCycles ' m5out/stats.txt
resetstats
обнуляет совокупную статистику и dumpstats
сбрасывает то, что было собрано во время теста.
Это не идеально, так как между системным вызовом exec есть некоторое время для m5 dumpstats
окончание и начало теста, но если тест достаточно, это не должно иметь значения.
http://arm.ecs.soton.ac.uk/wp-content/uploads/2016/10/gem5_tutorial.pdf также предлагает еще несколько эвристик:
#!/bin/sh
# Wait for system to calm down
sleep 10
# Take a checkpoint in 100000 ns
m5 checkpoint 100000
# Reset the stats
m5 resetstats
run-benchmark
# Exit the simulation
m5 exit
m5 exit
также работает, так как GEM5 сбрасывает статистику по окончании.
Инструкции по эксплуатации
Иногда кажется, что это просто неизбежно, что вам нужно немного изменить исходный код с помощью этих инструкций, чтобы:
- пропустить инициализацию и перейти непосредственно в устойчивое состояние
- оценивать отдельные прогоны основного цикла
Пример можно найти по адресу: https://github.com/arm-university/arm-gem5-rsk/blob/aa3b51b175a0f3b6e75c9c856092ae0c8f2a7cdc/parsec_patches/xcompile-patch.diff#L188 в контексте теста Parsec.
m5
Инструмент использует тот же механизм под капотом, но, добавляя инструкции непосредственно в источник, мы избегаем системного вызова, и поэтому более точны и репрезентативны (за счет большей ручной работы).
Адресный мониторинг
Другой способ, который можно использовать, - отслеживать интересующие адреса вместо добавления магических инструкций к источнику.
Например, если вы знаете, что тест начинается с PIC == 0x400
, должно быть возможно сделать что-то, когда этот адрес ударил.
Чтобы найти интересующие адреса, вы должны, например, использовать readelf
или же gdb
или трассировку, и если полная система работает поверх Linux, убедитесь, что ASLR выключен.
Этот метод был бы наименее навязчивым, но установка сложнее, и, честно говоря, я еще не сделал этого. Один день, один день.