如何在 C++ 中测量基本的原始操作?
Posted
技术标签:
【中文标题】如何在 C++ 中测量基本的原始操作?【英文标题】:How to measure basic, primitive operations in C++? 【发布时间】:2014-09-11 20:01:53 【问题描述】:对于一个项目,我应该为我正在使用的机器测量 C++ 中基本原始操作的运行时间。它是这样说的:
编写一个程序,确定(
fetch
,store,
+
,-
,*
,/
,<
,函数调用,函数返回,@的定时参数的值987654330@、delete
和[]
) 用于运行它的机器。
fetch
和 store
是:
a = b + 1
b
和 1
正在被“获取”(并与 +
一起添加),并存储在 a
中。
我以前从未做过这样的事情。我需要使用时钟方法来计算运行时间吗?我正在计时的代码应该是复杂的还是简单的?应该评估多少次?
【问题讨论】:
如果您使用的是 x86 机器,它将具有性能挂钩。 See this answer. @RossRogers 抱歉,我是新手。什么是性能挂钩?我怎么知道我在 x86 机器上? 当您非常准确地测量 C++ 操作数的性能时,您实际上需要让您的 CPU 告诉您它们花费了多长时间。英特尔的 x86 芯片具有内置于芯片中的特殊性能监视器。无论如何,如果这是一个家庭作业项目,那么您可能能够走一条不太准确的路线,例如在一个紧密的循环中一遍又一遍地执行操作数,然后对整个过程进行计时。或者,其他人已经测量了指令的时间,您可以根据生成的汇编代码计算操作数的时间。 @RossRogers 我有一个 AMD Turion 64 X2 CPU,我查了一下,***说它适用于 x86-64。我想这就是我正在做的。这不是家庭作业问题,我是在自学。 :) 看起来您需要 AMD 的性能计数器 :-) 另外,您可能必须处于 x86 ring-0 模式(操作系统特权级别),因此您可能需要执行类似编写 Linux 之类的操作内核模块。无论如何,这个项目很容易失控:-) 记住"Premature optimization is the root of all evil" 性能瓶颈几乎从来都不是你想象的那样。你必须分析你的代码。 【参考方案1】:我认为this 可能会有所帮助。就我个人而言,我会制作一些具有不同迭代次数的循环(例如从 10 开始到 100 000 结束)。类似于比较排序方法。
Ofc,如果你需要更复杂的方法,你可以使用前面提到的性能挂钩。
【讨论】:
以上是关于如何在 C++ 中测量基本的原始操作?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenCV + Visual C++ 中测量对比度