如何计算程序执行过程中的(CPU 周期)和(已退出的指令)总数?

syk*_*yko 3 c++

我在 Linux 上用 C++ 编程。

我有几个竞争对手的程序,它们执行相同的任务,但方式不同。

我想在 CPU 周期花费和退役指令数量方面将这些系统与我的系统进行比较。

如何计算程序执行过程中的(CPU 周期)和(已退出的指令)总数?

我需要访问任何硬件计数器吗?或者是否有任何众所周知的方法来实现它?

Jef*_*eff 6

有许多工具可以计算周期数和停用指令。一种广泛使用的工具是 Linux perf,在https://perf.wiki.kernel.org/index.php/Tutorial中有详细描述。

从上述教程中,您将找到直接满足您需求的答案:

LC_NUMERIC=en_US.UTF8 perf stat -B -e cycles:u,instructions:u dd if=/dev/zero of=/dev/null count=10000000

100000+0 records in
100000+0 records out
51200000 bytes (51 MB) copied, 0.0971547 s, 527 MB/s

 Performance counter stats for 'dd if=/dev/zero of=/dev/null count=100000':

       96,551,461 cycles
       38,176,009 instructions             #      0.395 IPC

       0.098556460  seconds time elapsed
Run Code Online (Sandbox Code Playgroud)

这个答案可能更完整。您还可以考虑 Intel Vtune,它提供与 Linux perf 类似的硬件感知分析。正如您想象的那样,Intel Vtune 支持 Intel 处理器,尽管它应该支持 Linux、Mac 和 Windows(我只在 Linux 上使用过它)。

免责声明:我为英特尔工作,但与 Vtune 无关。

  • 还有 AMD 的 [CodeAnalyst for Linux®](http://developer.amd.com/tools-and-sdks/archive/compute/amd-codeanalyst-performance-analyzer/amd-codeanalyst-performance-analyzer-for-linux/ )。 (2认同)