首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能在Windows11中使用OpenMP并行运行多个线程,VIsual Studio 2019

不能在Windows11中使用OpenMP并行运行多个线程,VIsual Studio 2019
EN

Stack Overflow用户
提问于 2022-08-01 09:51:48
回答 1查看 208关注 0票数 1

我在Windows11中使用VisualStudio2019创建了一个空的C++项目。

然后,我使用OpenMP运行了这段最小的代码来测试多线程:

代码语言:javascript
运行
复制
#include <iostream>
#include <omp.h>


int main() {
    
    omp_set_dynamic(0); // ensure that the number of threads doesn't change due to system demands
    omp_set_num_threads(16);
    std::cout << "Max threads: " << omp_get_max_threads() << "\n";

    int id;
#pragma omp parallel private(id)
    {
        std::cout << "Number of threads running in parallel: " << omp_get_num_threads() << "\n";
        std::cout << "Thread ID in parallel region: " << omp_get_thread_num() << "\n";
    }

    return 0;
}

这是我得到的输出:

最大线程: 16 并行运行的线程数:1 并行区域中的线程ID :0

我首先在CMake项目中尝试多线程(使用CMake 3.22和将OpenMP包含在CMake项目中的现代方法),并尝试使用VisualStudio2019和2022编译器。结果是一样的,我不能得到超过一个线程并行运行。于是,我在Visual 2019中尝试了这个简单的例子,并遇到了同样的问题。

我想知道是否有一些Windows规则/设置限制了我可以使用的线程数量。顺便说一句,利用Matlab2021b和并行计算工具箱,我成功地使用了多线程(8/16线程)。

如果你需要关于这个问题/我的系统的任何其他信息,请不要犹豫地问我。

谢谢。

编辑:

我从CMake获得以下输出

"C:\Program \JetBrains\CLion 2022.1.1\bin\cmake\win\bin\cmake.exe“-DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_Program=C:/Program/JetBrains/Clien2022.1.1/bin/ Ninja /win/ninja.exe”-G Ninja -S -B -B“

  • CXX编译器标识为MSVC 19.32.31332.0
  • CUDA编译器标识为NVIDIA 11.6.124
  • 检测CXX编译器ABI信息
  • 检测CXX编译器ABI信息已完成
  • 检查CXX编译器的工作情况: C:/Program /Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe
  • 跳过
  • 检测CXX编译特性
  • 检测CXX编译特性-已完成
  • 检测CUDA编译器ABI信息
  • 检测CUDA编译器ABI信息已完成
  • 检查CUDA编译器的工作情况: C:/Program /NVIDIA GPU计算工具包/CUDA/v11.6/bin/nvcc.exe-跳过
  • 检测CUDA编译特征
  • 检测数据自动化系统编译功能-已完成
  • 找到Matlab: C:/Program /MATLAB/R2022a/extern/include(找到版本"9.12")找到的组件: MAT_LIBRARY
  • 找到Git: C:/Program /Git/cmd/git.exe(找到版本"2.36.1.windows.1")
  • Found OpenMP_CXX:-openmp (找到版本"2.0")
  • Found : TRUE (找到版本"2.0")
  • 配置已完成
  • 生成完成
  • 生成文件已写入: C:/Users/parvanitis/Documents/MBI_code/cpp/ImagingFocus/cmake-build-debug

完成

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 08:17:57

好吧,真正的新秀错误。

首先,我没有将/openmp标志添加到CMAKE_CXX_FLAGS中,这在CMAKE_CXX_FLAGS中是必要的(我认为find_package(OpenMP)就足够了,而添加-fopenmp,就像在Linux中一样,没有被识别,所以我跳过了)。

即使在我做完之后,它也不起作用。原因是我正在构建的项目也使用CUDA,我从一个.cu文件调用OpenMP-多线程代码,它当然是用NVCC编译的,它不知道CXX标志,而且很可能没有任何理由支持它们。因此,我需要将OpenMP多线程代码移动到.cpp文件中,这样它才能正常工作。我没有提到我的项目一开始也在使用CUDA,因为我不认为这会引起问题(愚蠢的我)。

无论如何,谢谢你的帮助,杰罗姆。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73191905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档