我很好奇使用单个线程或多线程(使用openmp)花费的时间,所以我编写了这段代码以查看差异:
#define N 1000000000 // 10^9
int main(int argc, char* argv[])
{
int i, *a = malloc(N * sizeof *a);
clock_t begin, end;
double time_spent;
begin = clock();
#pragma omp parallel for
for(i=0;i<N;i++)
a[i] = i;
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("Time Spent: %lf\n", time_spent);
free(a);
return 0;
}
然后发生了一件奇怪的事情:使用#pragma
规则,执行时间约为4.6秒,但没有它,它大约是3.6秒。怎么可能呢?难道我做错了什么?或者我可能没有使用正确的计时功能?
答案 0 :(得分:0)
clock()
返回CLOCK_PROCESS_CPUTIME_ID
时钟的值。 clock_gettime(3)
:
CLOCK_PROCESS_CPUTIME_ID (since Linux 2.6.12)
Per-process CPU-time clock (measures CPU time consumed by all
threads in the process).
将clock_gettime()
与CLOCK_MONOTONIC
一起使用以获得正确的衡量标准。