【发布时间】:2022-01-03 19:35:45
【问题描述】:
我正在运行 .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 程序中的时间吗?
谢谢。
【问题讨论】:
-
介意设置这个答案:stackoverflow.com/a/63621357/3785618 是正确答案吗? 8 年后,从技术上讲是最合适的,所以当人们看到这个 (stackoverflow.com/a/10874375/3785618) 被选中时会感到困惑。
标签: c++ time parallel-processing openmp