运行代码只需一秒钟

时间:2014-08-19 13:35:12

标签: c arrays for-loop time

我想知道如何编程,以便我的程序可以运行一秒钟。

我想评估部分代码,看看时间花在哪里,所以我正在分析它的部分内容。

这是我的代码中有趣的部分:

int size = 256
clock_t start_benching = clock();
for (uint32_t i = 0;i < size; i+=4)
{
    myarray[i];
    myarray[i+1];
    myarray[i+2];
    myarray[i+3];
}
clock_t stop_benching = clock();

这只是给我执行所有操作所需的功能。

我想运行代码一秒钟,看看已完成了多少操作。

这是打印时间测量的行:

printf("Walking through buffer took %f seconds\n", (double)(stop_benching - start_benching) / CLOCKS_PER_SEC);

2 个答案:

答案 0 :(得分:1)

更好的基准测试方法是了解在代码的每个部分上花费的时间百分比。 不要让代码运行正好1秒,而是使用stop_benchmarking - start_benchmarking总运行时间 - 花费在代码的任何部分上花费的时间除以总运行时间以获得0到1之间的值。将此值乘以100并且你有特定部分消耗的时间百分比。

答案 1 :(得分:1)

非答案建议:使用实际的分析器来分析代码部分的性能。

在* nix上,您可以设置一个alarm(2),其signal handler设置一个全局标志以指示已用时间。 Windows API提供与SetTimer类似的内容。

#include <unistd.h>
#include <signal.h>

int time_elapsed = 0;

void alarm_handler(int signal) {
  time_elapsed = 1;
}

int main() {
  signal(SIGALRM, &alarm_handler);
  alarm(1); // set alarm time-out to 1 second

  do {
    // stuff...
  } while (!time_elapsed);

  return 0;
}

在更复杂的情况下,您可以使用setitimer(2)代替alarm(2),这可以让您

  • 使用微秒精度和
  • 在计算之间做出选择
    • 挂钟时间,
    • 用户CPU时间,或
    • 用户和系统CPU时间。