【问题标题】:Different number of cycles when running a benchmark more than once on C++ emulator在 C++ 模拟器上多次运行基准测试时的不同周期数
【发布时间】:2015-08-24 15:22:31
【问题描述】:

运行基准测试时,例如dhrystone 使用命令:

make output/dhrystone.riscv.out

如所述:http://riscv.org/download.html#tab_rocket, 在 C++ 模拟器上。我得到以下输出: 第一次运行时:

Microseconds for one run through Dhrystone: 1064
Dhrystones per Second: 939
cycle = 533718
instret = 148672

第二次:

Microseconds for one run through Dhrystone: 1064
Dhrystones per Second:                      939
cycle = 533715
instret = 148672

为什么周期不同?他们不应该完全一样。我也用其他基准测试过这个,并且偏差更大。如果这是正常的,偏差从何而来?

【问题讨论】:

  • 我怀疑这与时间有关。根据确切的值,时间计算可能需要不同的周期数。这可能吗?
  • 根据您运行的条件,这可能不是错误。连续的 dhrystone 运行并不等同,因为核心和缓存将处于微妙不同的状态。这些结果是模拟器的两次不同启动还是只有一次?
  • 这些是模拟器两次不同启动的结果。

标签: riscv


【解决方案1】:

随机初始化的寄存器存在少量不确定性(例如,由 HTIF 恢复的时钟被初始化为随机相位)。这些微小的偏差似乎不会影响任何性能基准测试。

如果您每次都需要相同的结果(例如,用于验证?),您可以修改模拟器代码以每次将寄存器初始化为某个已知值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多