0

我遇到了 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);

结果:

终端截图2

尽管程序中的工作量相同,但时钟也在增加(如前所述,如果我等待约 20 秒,则执行时间会更少

编辑2:

在另一台机器上运行时,程序连续运行的结果是正确的,所以问题出在我的系统某处。

编辑 3:

使用同步没有帮助,今天早上我的时间似乎在跳跃而不是简单地增加,我认为它一定是某个地方的缓存或内存问题:

在此处输入图像描述

编辑4:

使用 vmstat 获取内存/cpu 信息:

在此处输入图像描述

4

0 回答 0