Как лучше всего измерить время в среде моделирования gem5?
Я запускаю небольшую программу умножения матриц в среде моделирования gem5 и хочу измерить время выполнения программы. Программа находится на Фортране, и я использую cpu_time до и после процедуры умножения матриц, чтобы получить время. Но есть ли другой лучший способ измерить время в среде gem5?
2 ответа
Стандартный способ измерения статистики для данного двоичного файла с использованием gem5 в режиме полной системы заключается в предоставлении сценария rcS с использованием параметра --script:
./build/ARM/gem5.fast ... your_options... --script=./script.rcS
Ваш скрипт должен содержать m5ops для сброса и сброса статистики по мере необходимости. Пример script.rcS:
m5 resetstats
/bin/yourbinary
m5 dumpstats
Затем из stats.txt вы можете взять время выполнения (sim_seconds) или любой другой стат, который вам требуется. Если вы используете режим эмуляции Syscall, вы можете напрямую проверить stats.txt без необходимости использования сценария rcS.
Вы также можете добавить инструкции по волшебной сборке resetstats / dumpstats прямо в свои тесты производительности, как показано на странице: Как подсчитать количество тактовых циклов процессора между началом и концом теста в gem5? Например, в aarch64:
/* resetstats */
__asm__ __volatile__ ("mov x0, #0; mov x1, #0; .inst 0XFF000110 | (0x40 << 16);" : : : "x0", "x1")
/* dumpstats */
__asm__ __volatile__ ("mov x0, #0; mov x1, #0; .inst 0xFF000110 | (0x41 << 16);" : : : "x0", "x1")
Затем вы, вероятно, захотите посмотреть на system.cpu.numCycles
который показывает, сколько тактов ЦП прошло.
Конечно, вы можете просматривать различные файлы статистики в зависимости от вашей сборки, но я думаю, что самый простой способ - пометить время перед командой симуляции:
time ./build/ARM/gem5.fast ... your_options... --script=./script.rcS ...