如何在 C++ 中测量基本的原始操作?

Posted

技术标签:

【中文标题】如何在 C++ 中测量基本的原始操作?【英文标题】:How to measure basic, primitive operations in C++? 【发布时间】:2014-09-11 20:01:53 【问题描述】:

对于一个项目,我应该为我正在使用的机器测量 C++ 中基本原始操作的运行时间。它是这样说的:

编写一个程序,确定(fetchstore,+-*/<,函数调用,函数返回,@的定时参数的值987654330@、delete[]) 用于运行它的机器。

fetchstore 是:

a = b + 1

b1 正在被“获取”(并与 + 一起添加),并存储在 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++ 中测量对比度

在 Visual C++ 中测量操作速度的最佳方法

如何测量 C++ 和 OpenCV 中 KNN 分类器训练的训练时间?

C++:如何测量非阻塞套接字的实际上传速率

c++如何分配类方法

如何在 C# 和 C++ 之间进行互操作