我在 Linux 上用 C++ 编程。
我有几个竞争对手的程序,它们执行相同的任务,但方式不同。
我想在 CPU 周期花费和退役指令数量方面将这些系统与我的系统进行比较。
如何计算程序执行过程中的(CPU 周期)和(已退出的指令)总数?
我需要访问任何硬件计数器吗?或者是否有任何众所周知的方法来实现它?
有许多工具可以计算周期数和停用指令。一种广泛使用的工具是 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 无关。