C++ 使用std::chrono::high_resolution_clock::now()后OpenMp速度变慢

C++ 使用std::chrono::high_resolution_clock::now()后OpenMp速度变慢,c++,performance,openmp,C++,Performance,Openmp,我有一个使用OpenMp运行得非常快的代码,但是没有使用chrono计算经过的时间 一旦我开始使用std::chrono::high_resolution\u clock::now(),如果我使用OpenMp,代码的运行速度就会慢很多。如果我关闭OpenMp,即使使用chrono,代码也会运行得很快 该代码在MAC OSX上编译如下: g++-4.9-O3-std=c++11 test.cpp-o test-lstdc++-D_uuno_uuinline_uuu-m64-fopenmp 这个问题

我有一个使用OpenMp运行得非常快的代码,但是没有使用chrono计算经过的时间

一旦我开始使用
std::chrono::high_resolution\u clock::now()
,如果我使用OpenMp,代码的运行速度就会慢很多。如果我关闭OpenMp,即使使用chrono,代码也会运行得很快

该代码在MAC OSX上编译如下:

g++-4.9-O3-std=c++11 test.cpp-o test-lstdc++-D_uuno_uuinline_uuu-m64-fopenmp

这个问题显然是在使用chrono计算时间后引起的。许多其他帖子都报告说,使用OpenMp的代码比不使用OpenMp的代码慢,但这似乎是因为使用了chrono,没有人报告

因此,以下三种情况只是为了更容易理解情况:

OpenMp+无时钟=快速代码

OpenMp+chrono=慢代码


没有OpenMp+chrono=快速代码

要慢多少?显示您的测量值并显示您的代码!如果没有OpenMp,我只需1.55秒就能得到解决方案。使用OpenMp,我可以在116秒内获得解决方案。该代码具有使用chrono的嵌套时间戳。代码太大了(4000行),但我会创建一个较小的版本并发布在这里。您是否在每次迭代中调用计时器例程?总共有10000000次?尝试提取代码中最相关的部分,并将其粘贴到此处,以使我们这些魔法球已耗尽法力的人更容易使用。您的代码调用std::chrono::high_resolution_clock::now()多少次?如果只在开始之前和之后调用它一次来比较时间,那么很明显,创建实际计时器会对性能产生巨大影响。简单的解决方案是不使用它。在OpenMP代码中使用omp_get_wtime。