有没有一种快速/简单的方法(至少可以提供粗略的估计)?
我正在对算法进行基准测试,我想知道我的计算机执行指令的绝对速度,并将其与我的渐近分析进行比较,这样很酷。
有没有一种快速/简单的方法(至少可以提供粗略的估计)?
我正在对算法进行基准测试,我想知道我的计算机执行指令的绝对速度,并将其与我的渐近分析进行比较,这样很酷。
如果你想了解你的CPU能够做什么,那么请查看文档。你的CPU供应商会指定所有指令的延迟和吞吐量,以及各种其他信息(每个周期可以发出或撤回多少指令,缓存延迟等)。基于此,你可以计算出理论峰值吞吐量。
如果你想知道你的CPU实际上在做什么,那么运行自己的代码并测量其性能。
然而,请记住,现代CPU非常复杂,它们的性能取决于各种因素,你很少能够接近将CPU最大化,了解为什么,或者到底是什么阻碍了你的代码需要对硬件有相当透彻的理解。(我的一般经验法则是,如果你获得了持续的30-40%的理论峰值FLOPS,则表现非常好)
NOP
指令的循环(因此指令被前端丢弃并不进入微操作缓冲区)。我猜想你可以通过这种方式在理论上超过“每个周期100条指令”。 - Brendanclock_gettime()
是首选的方法,因为您可以指定如何测量时间(如果您真的想要它,甚至会映射到RDTSC); C++11或多或少将其合并到了std::chrono
中。 - DanielKO