【发布时间】:2010-11-05 13:26:09
【问题描述】:
我有一个 C 程序,我开始对 SPE(单元处理器)等使用一些 SIMD 优化。我想以某种方式“计时”他们需要多少个周期。一种想法是打开/关闭并测量整个执行时间。但这很慢。我还可以在执行 gettimeofday(&start,NULL) 等语句之间和之前添加,但我认为它们只有在处理超过毫秒时才准确。
我想知道是否可以有效地测量每条指令的纳秒数或仅测量 CPU 周期或其他一些精确的时间测量。
【问题讨论】:
我有一个 C 程序,我开始对 SPE(单元处理器)等使用一些 SIMD 优化。我想以某种方式“计时”他们需要多少个周期。一种想法是打开/关闭并测量整个执行时间。但这很慢。我还可以在执行 gettimeofday(&start,NULL) 等语句之间和之前添加,但我认为它们只有在处理超过毫秒时才准确。
我想知道是否可以有效地测量每条指令的纳秒数或仅测量 CPU 周期或其他一些精确的时间测量。
【问题讨论】:
根据您的 CPU,您可能能够在 CPU 本身内获得performance registers,它跟踪指令时钟和许多其他有用的东西。探查器和其他性能实用程序可以做到这一点,因此也应该可以从用户代码中实现。在 Mac OS X 上,我会使用 Apple CHUD 框架,但您没有说明您使用的是什么操作系统或 CPU,因此很难给出具体建议。
【讨论】:
在循环中执行要测试的代码,并用循环计数器除以它所花费的时间。您使用的计时器必须不是高分辨率才能测量正确的值。
【讨论】:
纳秒是不够的。你需要皮秒。
我认为你不能可靠地测量这样的东西。您将不得不查看规格(我不确定当前的 CPU 是否记录了此信息)。
【讨论】:
作为一个非 C 的人...我猜你需要查看汇编代码,然后从那里开始。唯一的问题是单个指令可能需要 1 或 100000 个 cpu 周期,具体取决于您使用的确切 CPU。
【讨论】: