并行的执行时间

时间:2016-02-03 08:10:57

标签: c multithreading openmp execution-time

我很好奇使用单个线程或多线程(使用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秒。怎么可能呢?难道我做错了什么?或者我可能没有使用正确的计时功能?

1 个答案:

答案 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一起使用以获得正确的衡量标准。