如何测量C程序中每条指令的CPU周期

时间:2010-11-05 13:26:10

标签: c cell cycle timing

我有一个C程序,我开始对SPE(Cell处理器)等使用一些SIMD优化。我想以某种方式“计算”他们需要多少个周期。一个想法是打开/关闭并测量整个执行时间。但这很慢。我还可以在执行gettimeofday(& start,NULL)和so语句之间和之前添加,但是只有当我们处理超过几毫秒的时候它们才是精确的。

我想知道是否有可能有效地测量每条指令的纳秒数或者只测量CPU周期或其他一些精确的定时测量值。

4 个答案:

答案 0 :(得分:4)

根据您的CPU,您可以在CPU本身内performance registers获取跟踪指令时钟和许多其他有用的东西。 Profilers和其他性能实用程序可以执行此操作,因此也应该可以从用户代码中执行此操作。在Mac OS X上,我会使用Apple CHUD框架,但您没有说明您使用的操作系统或CPU,因此很难给出具体的建议。

答案 1 :(得分:1)

在循环中执行要测试的代码,并将循环计数器所需的时间分开。您使用的计时器不能是高分辨率来测量正确的值。

答案 2 :(得分:0)

Nano秒数不足以满足要求。你需要皮秒。

我认为你不能可靠地测量这样的东西。您将不得不查看规范(我不确定当前的CPU是否记录了此信息)。

答案 3 :(得分:0)

作为一个不是C的人...我的猜测是你需要查看汇编代码,并从那里开始。唯一的问题是单个指令可能需要1或100000个cpu周期,具体取决于你所使用的CPU。