我在Linux上用C ++编程。
我有几个竞争对手的程序以不同的方式执行相同的任务。
我希望在CPU周期支出和退役指令数方面将这些系统与我的系统进行比较。
如何在程序执行期间计算(CPU周期)和(退出指令)的总数?
我是否需要访问任何硬件计数器?还是有任何众所周知的方法来实现它?
答案 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无关。