在gem5模拟环境中测量时间的最佳方法是什么

What is the best way to measure time in gem5 simulation environment

我是运行一个gem5仿真环境下的矩阵乘法小程序,想测一下程序的执行时间。该程序使用 Fortran 语言,我在矩阵乘法例程前后使用 cpu_time 来获取时间。但是在gem5环境下有没有其他更好的方式来衡量时间呢?

在完整系统模式下使用 gem5 测量给定二进制文件统计信息的标准方法是使用 --script 参数提供 rcS 脚本:

./build/ARM/gem5.fast ... your_options... --script=./script.rcS

您的脚本应包含 m5ops 以根据需要重置和转储统计信息。一个例子 script.rcS:

m5 resetstats
/bin/yourbinary
m5 dumpstats

然后您可以从 stats.txt 获取执行时间 (sim_seconds) 或您需要的任何统计数据。如果您使用的是系统调用仿真模式,则可以直接检查 stats.txt 而无需 rcS 脚本。

您当然可以根据您的构建查看不同的统计文件,但我认为最简单的方法是在您的模拟命令之前标记时间:

time ./build/ARM/gem5.fast ... your_options... --script=./script.rcS ...

您还可以直接在基准测试中添加 resetstats / dumpstats 魔法汇编指令,如下所示:How to count the number of CPU clock cycles between the start and end of a benchmark in 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,它显示了多少 CPU 个滴答声已通过。