Visual Studio 2013 OMP发布模式

Visual Studio 2013 OMP release mode

我正在尝试在 Visual Studio 2013 年使用 OpenMP。

它在调试模式下工作得很好并且有巨大的性能提升,但是当我切换到发布模式时,我在激活 OpenMP 的情况下得到最差的结果。

在Release模式下打印线程数总是0。

  printf("%d\n", omp_get_thread_num());

显然我的问题是:OpenMP 是否在发布模式下工作? There is 已经在 StackOverlfow 上提出问题,但没有人回答

我用 MSVC2013 Community Edition 做了一些测试,它在发行版中也能完美运行。

您的问题的可能原因是某些编译选项取决于所选的构建模式。因此,如果您在调试模式下设置了一些选项,例如 /openmp,您必须确保在切换到发布模式后再次设置它们:

这里的小测试表明它有效:

const int size = 2048;
double mytable[size];
std::map<int, int> t;

#pragma omp parallel for   
for(int n = 0; n < size; ++n) {
    double angle = 2 * 3.1415 * n / size; 
    mytable[n] = std::sin(angle) - std::pow(std::cos(angle), 2.0);
    t[omp_get_thread_num()]++; 
}
std::cout << "Number of elements processed per thread:"<<std::endl; 
for(auto &x : t)
    std::cout<< x.first<<": "<< x.second<<std::endl; 
std::cout << "Done" << std::endl;