Multithreading Ubuntu 14.04、gfortran 4.8.2上的OpenMP线程数限制为4

Multithreading Ubuntu 14.04、gfortran 4.8.2上的OpenMP线程数限制为4,multithreading,ubuntu,openmp,scheduler,gfortran,Multithreading,Ubuntu,Openmp,Scheduler,Gfortran,Ubuntu 14.04,gfortran 4.8.2,在安装了四个Xeon X7350的HP Proliant DL580 G5上运行。16个硬件线程可用 OpenMP环境变量: OMP_NUM_线程数=16 使用以下标志编译每个.f、.f90文件: -O2-I/usr/include-fdefault-real-8-fopenmp 链接到: -O2-fdefault-real-8-fopenmp-fmax堆栈变量大小=1000000 堆栈大小标志是由于私有变量和分配的早期问题而设置的,但是这

Ubuntu 14.04,gfortran 4.8.2,在安装了四个Xeon X7350的HP Proliant DL580 G5上运行。16个硬件线程可用

OpenMP环境变量: OMP_NUM_线程数=16

使用以下标志编译每个.f、.f90文件: -O2-I/usr/include-fdefault-real-8-fopenmp 链接到: -O2-fdefault-real-8-fopenmp-fmax堆栈变量大小=1000000 堆栈大小标志是由于私有变量和分配的早期问题而设置的,但是这些问题已经解决了

运行时,我最多只能使用四个硬件线程


Linux调度程序有什么我不知道的吗?检查您的会话是否不局限于cpuset,例如,通过cat/proc/self/status之类的方式,查看允许的CPU列表的值,或者查看允许的CPU列表的值。请注意,后一个是位掩码。例如,GOMP_CPU_affinity设置的关联掩码是按位的,并与CPU_中允许的关联掩码相匹配。感谢您提醒我cpusets之类的东西的存在,这是另一件需要了解的事情,但它看起来不像任何应用程序。允许的CPU是0xFFFFFF,允许的CPU列表是0-31…好吧,这太疯狂了-我不能再等了,所以我只是试着在我们的完整问题上运行这个东西,我得到了所有16个线程!最初的试运行使用的配置文件要求共享大约73Mb的阵列。完整的问题是将大约20Gb分配给同一个阵列,瞧,我得到了我所要求的一切。OpenMP运行时是否如此智能,以至于它知道在73Mb的情况下线程创建的开销不值得花时间,但在20Gb的情况下却值得花时间?该标准允许OpenMP运行时有相当多的考虑,但GCC运行时不被认为是智能OpenMP运行时之一。导致这种行为的原因可能是其他原因,也可能是琐碎的原因。可能是琐碎的原因,也可能是我的代码中暗示可以找到解决方法的原因——或者可能是月亮的相位。谁知道呢!我会用不同的方法进一步调查。。。