在C ++ OpenMP代码中测量执行时间

我以顺序方式运行.cpp代码(i)和(ii)使用OpenMP语句。 我想看看时差。 为了计算时间,我使用这个:

#include <time.h>
.....
main()
{

  clock_t start, finish;
  start = clock();
  .
  .
  .
  finish = clock();

  processing time = (double(finish-start)/CLOCKS_PER_SEC);

 }

在代码的连续(上面)运行中,时间非常准确。 这需要大约8秒钟的时间。 当我在代码中插入OpenMP语句,然后计算出时间减少的时间,但在控制台上显示的时间约为8-9秒,实际上它实时只有3-4秒!

这里是我的代码看起来如何抽象:

#include <time.h>
.....
main()
{

  clock_t start, finish;
  start = clock();
  .
  .
  #pragma omp parallel for
  for( ... )
     for( ... )
       for (...)
    {           
      ...;      
    }
  .
  .
  finish = clock();

  processing time = (double(finish-start)/CLOCKS_PER_SEC);

 }

当我运行上面的代码,我得到的时间减少,但显示的时间是不准确的实时。 在我看来,clock()函数正在计算每个线程的单独时间并将其累加并显示出来。

有人可以说明原因吗?或者建议我使用其他计时函数来衡量OpenMP程序中的时间?

谢谢。


我见过clock()报告CPU时间,而不是实时。

你可以使用

struct timeval start, end;
gettimeofday(&start, NULL);

// benchmark code

gettimeofday(&end, NULL);

delta = ((end.tv_sec  - start.tv_sec) * 1000000u + 
         end.tv_usec - start.tv_usec) / 1.e6;

改变时间


在我看来,clock()函数正在计算每个线程的单独时间并将其累加并显示出来。

这正是clock()所做的 - 它测量进程使用的CPU时间,至少在Linux和Mac OS X上意味着自进程启动以来存在于进程中的所有线程的累积CPU时间。

OpenMP应用程序的实时时钟(又名挂钟)时序应使用高分辨率OpenMP定时器调用omp_get_wtime()来完成,该omp_get_wtime()返回自过去任意点以来秒数的double值。 它是一个可移植的函数,例如存在于Unix和Windows OpenMP运行时,与gettimeofday()不同,它只是Unix。


是的,这就是clock()应该做的事情,告诉你程序使用了多少处理器时间。

如果您想查找实时时间,而不是CPU时间,请使用返回挂钟时间的函数,例如gettimeofday()

链接地址: http://www.djcxy.com/p/85975.html

上一篇: Measure execution time in C++ OpenMP code

下一篇: python QApplicationPrivate::notify