为什么OpenMP中的for循环串行执行?如何在VS2017中实现并行运行?
VS2017 OpenMP串行问题修复方案
1 开启编译器OpenMP支持(最核心原因)
MSVC默认关闭OpenMP编译支持,需要手动开启:
- 右键点击解决方案资源管理器中的项目名称,选择「属性」
- 在左侧菜单展开「C/C++」分类,选择「语言」选项页
- 找到「OpenMP支持」配置项,将值修改为「是(/openmp)」
- 点击「确定」保存配置,重新编译项目即可
2 代码补充校验
确保代码满足以下要求:
- 代码开头必须引入OpenMP头文件:
#include <omp.h>,否则omp_set_num_threads等函数不会生效 - 可以在编译制导语句中增加
num_threads子句做双重校验,修改后的编译制导如下:
#pragma omp parallel for schedule(static, 3) num_threads(4)
3 效果验证
修改完成后运行代码,会看到4个线程分别分配到不同的循环块执行,不会再全部由线程0处理。
内容的提问来源于stack exchange,提问作者bexolder
相关产品推荐
相关产品推荐

