在 OpenMP 代码C++测量执行时间
Measure execution time in C++ OpenMP code
我正在运行一个.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);
}
当我运行上面的代码时,我得到了时间的减少,但显示的时间在实时方面并不准确。在我看来,时钟()函数正在计算每个线程的单独时间并将它们相加并显示它们。
有人可以说出原因或建议我用于测量 OpenMP 程序中时间的任何其他计时函数吗?
谢谢。
在我看来,时钟()函数正在计算每个线程的单独时间并将它们相加并显示它们。
这正是clock()
所做的 - 它测量进程使用的 CPU 时间,至少在 Linux 和 Mac OS X 上意味着自进程启动以来该进程中曾经存在的所有线程的累积 CPU 时间。
应用程序的实时时钟(又称挂钟)计时应使用高分辨率 OpenMP 计时器调用omp_get_wtime()
完成,该调用返回自过去任意点以来的秒数的double
值。它是一个可移植的功能,例如存在于Unix和Windows OpenMP运行时中,不像gettimeofday()
只有Unix
我已经看到 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;
改为计时
您可以在 omp 库本身中使用内置的omp_get_wtime
函数。下面是一个示例代码片段,用于了解执行时间。
#include <stdio.h>
#include <omp.h>
int main(){
double itime, ftime, exec_time;
itime = omp_get_wtime();
// Required code for which execution time needs to be computed
ftime = omp_get_wtime();
exec_time = ftime - itime;
printf("nnTime taken is %f", exec_time);
}
嗯,是的,这就是clock()
应该做的,告诉你程序使用了多少处理器时间。
如果要查找经过的实时时间(而不是 CPU 时间),请使用返回挂钟时间的函数,例如 gettimeofday()
。
#include "ctime"
std::time_t start, end;
long delta = 0;
start = std::time(NULL);
// do your code here
end = std::time(NULL);
delta = end - start;
// output delta
- 简单C++"Hello World"程序的执行时间长
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 如何测量cudaMalloc执行时间
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- 测量执行时间 - 在程序代码或外壳中
- 我们应该测量例程的平均执行时间还是最小执行时间?
- CUDA 程序不测量执行时间:cuda事件记录
- 在Visual Studio Enterprise 2017(C )中测量功能执行时间
- 最佳C 11测量嵌入式系统代码执行时间的方法
- 测量C 中函数调用的执行时间
- C++ 实现时钟来测量执行时间
- 在 OpenMP 代码C++测量执行时间
- 当我从Java代码执行C++程序时,我应该如何测量它的执行时间
- 测量执行时间-gettimeofday与clock()与chrono
- 在c++中测量执行时间:clock()和clock_gettime()给出完全不同的结果
- 如何在freeRTOS中使用vApplicationTickHook()函数来测量任务执行时间
- 在c++和matlab中测量FPS和执行时间
- 如何在 visual c++ 中以 ns、ps 或 clk 周期为单位测量执行时间
- 如何初始化CUDA,以便我可以进行有效的执行时间测量