Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 你们能用Qemu模拟器检查程序的性能吗?_C_Linux_Arm_Qemu - Fatal编程技术网

C 你们能用Qemu模拟器检查程序的性能吗?

C 你们能用Qemu模拟器检查程序的性能吗?,c,linux,arm,qemu,C,Linux,Arm,Qemu,比如说,如果我使用Qemu运行一个ARM模拟器,是否可以像在真正的ARM处理器上一样找到程序的执行时间。换句话说,如果我在模拟器上运行的程序中使用函数(如gettimeofday)来检查经过的时间,经过的时间会通过周期精确模拟准确给出吗?我们公司在这一问题上的调查得出结论,Qemu(用于ARM)不是周期精确的。如果我没记错的话,周期精度不是Qemu的目标,相反,它的目标是快速仿真。还要注意的是,确切的时间取决于相当不可预测的事情,如缓存命中和未命中。它还将取决于所选择的实际架构。请注意,ARM只

比如说,如果我使用Qemu运行一个ARM模拟器,是否可以像在真正的ARM处理器上一样找到程序的执行时间。换句话说,如果我在模拟器上运行的程序中使用函数(如
gettimeofday
)来检查经过的时间,经过的时间会通过周期精确模拟准确给出吗?

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

我们使用来自ARM的模拟器来评估性能,但对于最新版本的ARM体系结构来说,即使是这个模拟器也不是完全循环准确的。

GEM5

我见过一位对此的研究人员。评估其准确性。我创造了

正如Bryan提到的那样,QEMU是为速度而设计的:只有有效的x86API行为才能达到,而不一定是以正确的周期数或相同的管道顺序。这也称为功能仿真

此外,DRAM内存访问被认为是即时的,因此模拟缓存也没有意义。正如我们所知,当前的CPU基本上是内存延迟隐藏机器

另一方面,周期精确模拟器也模拟CPU内部,因此速度慢得多

问题的根源当然是没有充分记录处理器的性能特性,供应商不会发布这些特性来防止知识产权泄漏

GEM5似乎实现了通用CPU内部构件的通用版本,因此它应该比功能仿真器更精确地进行周期模拟,但如果没有内部人员的了解,真正精确的周期模拟可能是不可能的

然后,第三方仿真实现人员必须根据实验和现有文档对CPU性能进行反向工程

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

相关的:

  • 提出如何实现周期精确模拟器的问题:

我看不出qemu的周期精度有多高,也看不出可能有多高。arm内核/芯片之外的变量太多,您必须拥有一个板级精确定时sim卡才能获得有用的数字。假设您能够创建精确到您感兴趣的任何边界的循环,并且计时参考在该边界内,那么确保它会工作