Visual Studio 2017中OpenMP编译指令被忽略问题求助
解决VS2017中OpenMP编译指令不生效的问题
我来帮你排查这个OpenMP指令被忽略的问题——你已经开启了项目的OpenMP支持,但还有几个容易漏掉的关键配置点需要确认:
确保配置与编译模式匹配
你在项目属性里开启OpenMP支持时,要注意顶部的「配置」和「平台」选项是否和你当前编译的模式一致。比如你修改了Debug x86的设置,但实际编译的是Release x64,那OpenMP的配置根本没生效。一定要在你正在使用的配置(Debug/Release)和平台(x86/x64)下开启「OpenMP支持」。检查编译器命令行是否包含
/openmp参数
有时候VS的UI设置可能没同步到编译命令里,你可以手动验证:
右键项目 → 属性 → C/C++ → 命令行,在「附加选项」里查看是否有/openmp。如果没有,手动添加这个参数,然后重新编译项目。用线程号验证并行执行状态
有时候std::cout的输出可能因为线程竞争看起来像是只输出一行(虽然你这里确实只输出一行,大概率是没并行),可以修改代码打印线程ID,明确看到是否有多线程在运行:#include <iostream> #include <omp.h> int main(int argc, char* argv[]) { // omp_set_num_threads(15); // 可以打开这句指定线程数 #pragma omp parallel { std::cout << "Hello world from thread " << omp_get_thread_num() << "\n"; } system("pause"); return 0; }如果并行生效,会输出多个不同线程号的行。
清理重建项目或重启VS
VS的配置缓存偶尔会出问题,尝试执行「Build → Clean Solution」清理编译文件,然后重新构建项目;如果还是不行,重启VS再试试。
VS2017对OpenMP 2.0是完全支持的,#pragma omp parallel这类基础指令肯定能生效,所以问题基本都出在配置没正确应用上。
内容的提问来源于stack exchange,提问作者Håkon Seljåsen
相关产品推荐
相关产品推荐

