如果我使用Qemu运行ARM模拟器,是否可以找到执行程序的时间,就像在真正的ARM处理器上一样。换句话说,如果我在模拟器上运行的程序中使用诸如gettimeofday
之类的函数来检查经过的时间,是否会通过周期精确模拟准确地给出经过的时间?
答案 0 :(得分:3)
我们公司对此问题的调查得出结论,Qemu(针对ARM)的周期不准确。如果我没记错,循环精度不是Qemu的目标,而是针对快速仿真。还要注意确切的时间取决于非常不可预测的事情,如缓存命中和未命中。它还取决于所选的实际架构。注意,ARM仅仅是指令集IP,并且存在几种不同的实现。如果另外一个操作系统被模拟,事情变得更加难以预测。
我们使用ARM的模拟器来评估性能,但即使是那个,对于最新版本的ARM体系结构来说也不是完全周期准确的。
答案 1 :(得分:0)
<强> GEM5 强>
我见过一位研究员use gem5。 This paper评估其准确程度。我创建了an easy to get started setup on GitHub。
正如Bryan所说,QEMU是为速度而设计的:只有必须达到有效的x86 API行为,不一定要有正确的周期数或相同的管道顺序。这也称为功能仿真。
此外,假设DRAM存储器访问是立即的,因此模拟缓存也没有意义。而且我们知道,目前的CPU基本上都是内存延迟隐藏机器。
另一方面,循环精确仿真器,也模拟CPU内部,因此速度慢。
问题的根源当然是处理器的记录性能特征,供应商不会发布以防止知识产权泄漏。
GEM5似乎实现了通用CPU内部的通用版本,因此它应该比功能仿真器更准确,但如果没有内幕知识,真正的周期精确仿真可能是不可能的。
第三方仿真实现者必须通过实验和现有文档对CPU性能进行逆向工程。
一些关键的“内部”是缓存,管道和分支预测。
相关: