我想知道如何编程,以便我的程序可以运行一秒钟。
我想评估部分代码,看看时间花在哪里,所以我正在分析它的部分内容。
这是我的代码中有趣的部分:
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);
答案 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)
,这可以让您