【问题标题】:How does Pragma (OMP) affect the measurement of time taken to execute a piece of code?Pragma (OMP) 如何影响执行一段代码所用时间的测量?
【发布时间】:2019-05-06 09:42:26
【问题描述】:

我正在尝试测量在不同条件下执行一段代码所花费的时间。我提供了一个数字 n,程序会打印执行循环 n 次所花费的时间。但是与#pragma 指令一起使用时显示的时间似乎不准确。

我尝试过使用和不使用#pragma 指令。

#include <threads.h>
#include <stdio.h>
#include <time.h>
#include <omp.h>

void loopy(int);
void runloop(int);
int main(int argc, char *argv[]){

    int num = atoi(argv[1]);
    printf("The number entered is :: %d\n",num);

    displayTimeTaken(loopy,num);

}

void loopy(int num){
    int i;
    #pragma omp parallel for
    for(i=0;i<num;i++)for(int j=0;j<num;j++);
}

void displayTimeTaken(void *function(), int num){
    clock_t start, end;
    double cpu_time_used;
    start = clock();

    function(num);

    end = clock();
    cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
    printf("Time taken is :: %10fs for the number %d\n ", cpu_time_used,num);
}

输入 100000 在我的 CPU 中的结果是 :: (无并行)

数字 100000 所用时间为 :: 24.632967s

我的时钟记录的实时时间也是 24 秒。

到目前为止一切顺利。

(具有并行性)

数字 100000 所用时间为 :: 24.408596s

但实际花费的时间约为 8 秒! 我多次检查了代码,但对我来说 pragma 如何影响显示时间没有任何意义。我运行了 gdb,发现程序正在启动 3 个线程。

The number entered is :: 100000
[New Thread 0x7ffff7d79700 (LWP 8761)]
[New Thread 0x7ffff7578700 (LWP 8762)]
[New Thread 0x7ffff6d77700 (LWP 8763)]
Time taken is ::  24.177702s for the number 100000
 [Thread 0x7ffff6d77700 (LWP 8763) exited]
[Thread 0x7ffff7578700 (LWP 8762) exited]
[Thread 0x7ffff7d79700 (LWP 8761) exited]
[Inferior 1 (process 8760) exited normally]

因此,我的第一个理论是,不知何故,各个线程所花费的时间正在加起来。但同样,这对我来说毫无意义。

如果有人能对此有所了解,我会很高兴。

【问题讨论】:

    标签: c time


    【解决方案1】:

    clock() 返回进程使用的近似处理器时间。这可以大于或小于用于执行的实时时间(有时称为“墙上时间”)。

    作为替代方案,您可以使用time 函数,但这通常只有一秒的分辨率。

    对于更高分辨率的挂钟,您需要使用特定于系统的东西(例如,clock_gettime 在提供 POSIX 标头的系统上,GetTickCount 在 Windows 上)。

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2021-03-22
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      相关资源
      最近更新 更多