我遇到了 C OpenMP 脚本的执行时间问题。
脚本中的计时是使用 gettimeofday() 函数在代码块上完成的:
gettimeofday(&tim, NULL);
double t1=tim.tv_sec+(tim.tv_usec/1000000.0);
.. Timed Code Here
gettimeofday(&tim, NULL);
double t2=tim.tv_sec+(tim.tv_usec/1000000.0);
printf("%.6lf seconds elapsed\n", t2-t1);
但是,当我连续运行脚本时,每次执行的时间都会增加:
自从昨天我没有遇到这个问题以来,该脚本就没有被编辑过。此外,我发现当离开一段时间(比如 10-20 秒)然后重新运行程序执行时,时间开始减少。
我唯一的猜测是它与过程本身有关。我正在使用 GCC 版本 4.8.2 在 Linux Mint 17 上使用 XFCE (gcc 4.8.2-19ubuntu1) 进行编译:
gcc bluromp.c -fopenmp -o bluromp.out
有任何想法吗?
编辑:从 time.h 添加时钟()进行测试:
start_t = clock();
.. Timed Code Here
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
printf("Time.h clock result: %ld\n", total_t);
结果:
尽管程序中的工作量相同,但时钟也在增加(如前所述,如果我等待约 20 秒,则执行时间会更少
编辑2:
在另一台机器上运行时,程序连续运行的结果是正确的,所以问题出在我的系统某处。
编辑 3:
使用同步没有帮助,今天早上我的时间似乎在跳跃而不是简单地增加,我认为它一定是某个地方的缓存或内存问题:
编辑4:
使用 vmstat 获取内存/cpu 信息: