在Ubuntu 14.04上限制为4的OpenMP线程数,gfortran 4.8.2

时间:2015-04-17 21:31:42

标签: multithreading ubuntu openmp scheduler gfortran

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

OpenMP环境变量: OMP_NUM_THREADS = 16

使用以下标志编译每个.f,.f90文件: -O2 -I / usr / include -fdefault-real-8 -fopenmp 与连接: -O2 -fdefault-real-8 -fopenmp -fmax-stack-var-size = 1000000 (由于早期的PRIVATE vars和ALLOCATE问题,堆栈大小标志已经到位,但这些问题已经解决了......)

运行时,我不能使用超过四个硬件线程!

我不知道Linux调度程序有什么问题吗? < - 修辞,显然......

OpenMP指令没有做任何简单的PARALLEL,标记一些变量SHARED。没有嵌套的PARALLEL。我的循环之前有一个DO SCHEDULE(DYNAMIC,1)指令,但删除它没有效果。

我知道正在遵守OMP_NUM_THREADS,因为当我将其设置为1,2或3,并从顶部观察输出时,会使用相应的核心数。超过4的任何东西都会被忽略。看起来在某些配置中有一个最大值设置。我用GOMP_CPU_AFFINITY,OMP_PLACE等尝试过各种各样的游戏,没有任何帮助。

我甚至尝试使用NUM_THREADS()子句,omp_lib omp_set_num_threads()调用等来硬连线,并且没有任何帮助。

使用带有四个硬件线程的Windows 7 x64机箱上运行的英特尔Fortran XE编译的相同代码很好地填充了所有四个线程,没有设置任何env变量,并且没有进行omp_lib调用。

有什么想法吗?

编辑:我在具有12个可用内核的Ubuntu 14.04桌面上看到了同样的行为。运行相同的程序显示最多使用4个核心,不多,所以它可能不是HP Proliant特有的。

0 个答案:

没有答案