Windows 10 openMP环境设置

Windows 10 openMP环境设置,windows-10,openmp,Windows 10,Openmp,我有一个也许很简单的问题,但还没有找到答案。 问题:编译后是否可以设置openMP环境设置?在源代码中没有设置它们。 问题2:如果我使用/libs:static或.dll,会有区别吗 我想将openMP与以下硬件一起使用: 2个CPU(2个插座) 每个CPU有12个内核和24个线程 我的解决办法是: set OMP_NUM_THREADS=12 set OMP_PLACES="{0,1,2,3,4,5}{6,7,8,9,10,11}" set OMP_PROC_BIND=sp

我有一个也许很简单的问题,但还没有找到答案。 问题:编译后是否可以设置openMP环境设置?在源代码中没有设置它们。 问题2:如果我使用/libs:static或.dll,会有区别吗

我想将openMP与以下硬件一起使用: 2个CPU(2个插座) 每个CPU有12个内核和24个线程 我的解决办法是:

set OMP_NUM_THREADS=12
set OMP_PLACES="{0,1,2,3,4,5}{6,7,8,9,10,11}"
set OMP_PROC_BIND=spread
性能不好,两个CPU都没有使用。我使用Windows10


谢谢你的简短回答。

我不能给你一个简短的回答,因为你没有提到你正在使用哪个编译器。环境变量确实是用来设置环境的
OMP_PLACES
在此处无效,因为必须在括号之间添加缺少的逗号。使用
OMP\u DISPLAY\u ENV=TRUE
检查参数。除此之外,您的
OMP_PLACES
配置还可以做一些您可能不想做的事情:您只为12个线程定义了两个位置。请仔细阅读。。。。根据我的经验,链接静态或动态没有什么区别。OpenMP环境变量(如果实现)在进入并行区域时读取。libgomp(至少是我使用过的版本)忽略了Windows上的OMP_位置和OMP_PROC_绑定。我使用过的OpenMP Windows实现实现亲和力的时间要比linux长得多,所以在较短的并行区域上看不到多少好处。如果没有OMP_位置,即使禁用了超线程,也无法扩展到完整的内核数。如果使用的是Microsoft编译器,它可能不支持OMP_位置或OMP_PROC_BIND,因为默认情况下它只支持OpenMP 2.0,这些都是更高版本的功能。(他们现在似乎正在努力升级)