我遇到了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添加了clock()进行测试:
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:
使用Sync没有帮助,今天早上我的时间似乎是跳跃而不是简单地增加,我认为它必须是某处的缓存或内存问题:
编辑4:
使用vmstat获取内存/ cpu信息: