5

假设我正在使用 Qemu 运行 ARM 模拟器,是否可以像在真正的 ARM 处理器上一样找到程序的执行时间。换句话说,如果我gettimeofday在模拟器上运行的程序中使用诸如 , 之类的功能来检查经过的时间,是否会通过周期精确的模拟准确地给出经过的时间?

4

2 回答 2

5

我们公司对这个问题的调查得出结论,Qemu(用于 ARM)不是周期准确的。如果我没记错的话,循环精度不是 Qemu 的目标,而是旨在快速仿真。还要注意,确切的时间取决于非常不可预测的事情,例如缓存命中和未命中。它还取决于选择的实际架构。请注意,ARM 只是一个指令集 IP,存在几种不同的实现。如果另外模拟操作系统,事情会变得更加不可预测。

我们使用 ARM 的模拟器来评估性能,但即使是最新版本的 ARM 架构,它也不是完全周期准确的。

于 2013-07-03T18:54:39.823 回答
1

创业板5

我见过一位研究人员为此使用 gem5本文评估它的准确性。我在 GitHub 上创建了一个易于上手的设置

正如 Bryan 提到的,QEMU 是为速度而设计的:只需要达到有效的 x86 API 行为,而不必使用正确的周期数或相同的流水线顺序。这也称为功能仿真。

此外,DRAM 内存访问被认为是即时的,因此模拟高速缓存也没有任何意义。众所周知,当前的 CPU 基本上是内存延迟隐藏机器。

另一方面,循环精确的模拟器也模拟 CPU 内部,因此速度较慢。

问题的根源当然是处理器的性能特性记录不足,供应商不会发布这些特性以防止知识产权泄露。

GEM5 似乎实现了通用 CPU 内部的通用版本,因此它应该比功能仿真器更精确的周期,但是如果没有内部知识,真正的周期精确仿真可能是不可能的。

然后,第三方仿真实施者必须从实验和现有文档中对 CPU 性能进行逆向工程。

一些关键的“内部”是缓存、管道和分支预测。

有关的:

于 2015-11-07T08:42:24.597 回答