OpenMP并行块输出异常:线程数不符合预期问题咨询
OpenMP在VS中并行块执行异常的问题
我编写了以下OpenMP代码,预期是创建最多10个线程来执行并行块:
#include <iostream> #include <omp.h> using namespace std; int main() { omp_set_num_threads(10); #pragma omp parallel { int id = omp_get_thread_num(); printf("%d %d %d\n", id, omp_get_num_threads(), omp_get_max_threads()); } return 0; }
但在VS中编译运行后,输出完全不符合预期:并行块执行了12次,所有线程的omp_get_num_threads()值均为1,且除第一个线程外,omp_get_max_threads()值为12,具体输出如下:
0 1 10 0 1 12 0 1 12 0 1 12 0 1 12 0 1 12 0 1 12 0 1 12 0 1 12 0 1 12 0 1 12 0 1 12
而在VS Code终端使用g++ -fopenmp .\openMp.c -o prog命令编译同一代码时,输出符合预期:
1 10 10 2 10 10 3 10 10 4 10 10 0 10 10 5 10 10 6 10 10 7 10 10 8 10 10 9 10 10
我已在VS中进行了如下配置:
- 向「配置属性 > 链接器 > 输入 > 附加依赖项」中添加libomp.lib
- 向「C/C++ > 附加选项」中添加
-fopenmp -Xclang编译选项 - 开启「C/C++ > 所有选项 > Open MP支持」为“是”
但我在MSVC安装目录中找不到libomp.dll。我的CPU为6核12逻辑处理器,请问为何会出现该异常,该如何解决?
内容的提问来源于stack exchange,提问作者maths soso
相关产品推荐
相关产品推荐

