我有一个 C++ 类,其中一些函数具有 OpenMP 并行 for 循环。我正在使用 MSVC2017 将其构建到两个应用程序中,并发现其中一个功能在两个应用程序中的运行方式不同。该函数有两个独立的并行 for 循环。在一个版本中,VS 调试器显示它们在处理一块测试数据时都使用了 7 个内核并持续了整整一秒;另一方面,它只显示了两个多核使用情况,大概在每个并行部分的开头,但大部分时间只有一个处理器运行。
这些函数在类的代码深处,这在 2 个应用程序中是相同的。据我所知,这些构建具有相同的编译器和链接器选项。我使用 CMake 生成项目,从不手动修改它们。
任何人都可以提出这种行为的可能原因吗?我完全了解并行化代码的其他方法,所以请不要告诉我这些。我只是在寻找有关 MSVC 下 OpenMP 的专业知识。