Multithreading OpenMP如何进行线程分配?

Multithreading OpenMP如何进行线程分配?,multithreading,parallel-processing,openmp,multicore,Multithreading,Parallel Processing,Openmp,Multicore,我想研究OpenMP API将线程分配给内核的基础。在这样做时,它考虑了哪些因素?是否可以根据程序员的需要修改此分配?我相信您正在寻找开放式线程和硬件线程/核心之间的亲和力。答案是肯定的,顺便说一句 如果您使用英特尔编译器,您可以在此网站上查看KMP_AAFFINITY环境变量。 如果您使用GNU编译器,您可能会对这些官方OpenMP环境变量感兴趣。 是的,线程的数量可以根据程序员的判断进行修改 参考: 默认情况下,OpenMP分配的线程数量与其运行的机器/节点(如果是分布式系统)上的内核数量

我想研究OpenMP API将线程分配给内核的基础。在这样做时,它考虑了哪些因素?是否可以根据程序员的需要修改此分配?

我相信您正在寻找开放式线程和硬件线程/核心之间的亲和力。答案是肯定的,顺便说一句

如果您使用英特尔编译器,您可以在此网站上查看KMP_AAFFINITY环境变量。

如果您使用GNU编译器,您可能会对这些官方OpenMP环境变量感兴趣。

是的,线程的数量可以根据程序员的判断进行修改

参考:


默认情况下,OpenMP分配的线程数量与其运行的机器/节点(如果是分布式系统)上的内核数量相同。

这可能是一个过于宽泛的问题。考虑到其他社区的询问,比如我不认为GNU文档清楚地表明,亲和支持被保留到完全支持的目标(不包括Windows)。Intel和gnu OpenMP都默认为每个逻辑处理器1个线程,这通常太多(除非禁用超线程)