C程序执行时间OpenMP/Sequential

C program execution time OpenMP/Sequential

我正在尝试测量与 OpenMP 并行化的方法(C 程序)的执行时间。我需要比较并行算法(使用 OpenMP)及其顺序版本的执行时间。 我在并行情况下使用 omp_get_wtime() 方法,在顺序情况下使用 gettimeofday() 方法来进行比较。 我想知道这种进行比较的方法是否正确。感谢您的帮助。

这里是我用来定义宏的代码:

#ifdef _OPENMP
    #include <omp.h>
    #define STARTTIME(id)                           \
    double start_time_42_##id, end_time_42_##id; \
    start_time_42_##id = omp_get_wtime();

    #define ENDTIME(id, x)        \
    end_time_42_##id = omp_get_wtime(); \
    x = end_time_42_##id - start_time_42_##id

#else   
    #include <sys/time.h>
    #include <time.h>
    #include <math.h>
    #define STARTTIME(id) \
    struct timeval start_##id; \
    gettimeofday(&start_##id, NULL);
    
    #define ENDTIME(id, x) \
    struct timeval end_##id; \
    gettimeofday(&end_##id, NULL); \
    x = ((end_##id.tv_sec  - start_##id.tv_sec) * 1000000u + end_##id.tv_usec - start_##id.tv_usec) / 1.e6;

#endif

当然可以,为什么不呢。最后一行看起来有点麻烦。为什么不喜欢这样:

x = (end_##id.tv_sec - start_##id.tv_sec) + (end_##id.tv_usec - start_##id.tv_usec) * 1.e-6;

除此之外,如果您只需要挂钟时间,您的解决方案就可以正常工作。