gpt4 book ai didi

c++ - 测量执行简单指令的时间

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:00 25 4
gpt4 key购买 nike

我正在尝试测量我的 CPU 执行特定指令(应该占用一个 CPU 周期的指令)所花费的周期数,并且输出必须是周期长度(CPU 完成一个指令所花费的时间循环)。所以首先,我的 CPU 是 2.1GHz,这意味着我计算机上的一个周期长度单位是 1/2100,对吗?另外 - 我正在使用 getTimeOfDay以微秒为单位测量时间,然后计算 1,000,000 次迭代的平均值。因此,如果我没记错的话,我想要的输出必须是 result*2100(为了得到它的周期长度)。我对吗?谢谢!

P.S 不知道这是否重要,但我正在用 cpp 编写

最佳答案

我相信您在一些事情上被误导了。

在现代术语中,时钟速度是速度的指示,而不是速度的实际度量 - 因此没有合理的方法来估计单个指令可能需要多长时间。

您的问题基于所有指令都相等的假设 - 它们肯定不是,某些 CPU 指令在某些架构上被解释为微指令序列,而在其他架构上,时序可能会改变。

此外,您不能安全地假设在现代架构上重复的指令将以相同的方式执行,这取决于数据和指令缓存、管道和分支预测。

getTimeOfDay 的精度不足以估计测量单个指令所需的时间长度,甚至 CPU 时钟周期计数器(x86 上的 TSC)也不够。

此外,您的操作系统是估计此类时序的主要错误来源,上下文切换、电源管理、机器负载和中断都会产生巨大影响。但即使在真正的硬实时操作系统(QNX 或 VxWorks)上,这样的测量仍然很困难,需要时间和工具,以及解释结果的专业知识。在通用操作系统(Windows 或基本 Linux)上,您几乎没有希望获得准确的测量值)

读取和存储 CPU 周期计数的计算开销和错误也会使一条指令所需的时间相形见绌。至少,我建议您考虑将数百或数千条指令组合在一起。

在没有缓存的确定性架构(1 个周期 = 1 条指令)上,如 PIC 芯片,您可以使用时钟倍频器完全按照您的建议进行操作,但即便如此,为了验证您的测量结果,您可能还需要逻辑分析仪(即,您需要在硬件中执行此操作)。

简而言之,这是一个极其困难的问题。

关于c++ - 测量执行简单指令的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com