Visual Studio 2013 OMP发布模式

时间:2015-06-07 05:54:51

标签: c++ visual-studio-2013 openmp

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

它在调试模式下工作得非常好,并且性能得到了极大的提升,但是当我切换到发布模式时,我的OpenMP激活效果最差。

打印线程编号在发布模式下始终为0。

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

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

1 个答案:

答案 0 :(得分:4)

我已经使用MSVC2013社区版进行了一些测试,它在发布时也非常有效。

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

enter image description here

这里是一个小测试,表明它有效:

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;