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

时间:2017-03-03 00:33:44

标签: c++

我在Linux上用C ++编程。

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

我希望在CPU周期支出和退役指令数方面将这些系统与我的系统进行比较。

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

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

1 个答案:

答案 0 :(得分:4)

有很多工具可以计算周期和退役指令。一个广泛使用的工具是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

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

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