2017-04-26 54 views
1

我有一個支持8核+ HT(16線程)的i7-5960X CPU。這是一個試圖使用OpenMP和OpenMPI的程序。它稱爲如下:在openmpi openmpi中的奇怪任務行爲

# mpirun -np <NN1> -x OMP_NUM_THREADS=<NN2> <my_prog> 

其中NN1和NN2是變化的。在代碼我有這樣的:

#pragma omp parallel 
    nOMP=omp_get_num_threads(); 

    int maxOMP=omp_get_max_threads(); 
    int procOMP=omp_get_num_procs(); 
    printf("OMP version running on %d threads. Max threads=%d, available procs=%d\n", nOMP, maxOMP, procOMP); 

下面是結果:

#1, NN1=2, NN2=2: 
    OMP version running on 2 threads. Max threads=2, available procs=2 
#2, NN1=2, NN2=4: 
    OMP version running on 4 threads. Max threads=4, available procs=2 
#3, NN1=3, NN2=4: 
    OMP version running on 4 threads. Max threads=4, available procs=16 

因此,對於圖1和2個MPI線程omp_get_num_procs()返回 「2」 總是和3和上面它返回「16 」。

問題是:爲什麼以及如何強制它爲1和2 mpi線程返回正確的值?

OpenMpi版本是1.10.3,GCC版本是4.8.5,Centos 7 x86_64。沒有mpirun的直接呼叫也是正確的。

UPD1這是一個相關的討論:http://forum.abinit.org/viewtopic.php?f=2&t=2782,但無論如何沒有答案。

UPD2 openmpi-2.x.x修復了這個問題。

+0

您應該看到與MPI進程一樣多的打印行。我看到你只是展示其中的一個。它可能與CPU綁定和超線程有關。您可以使用mpirun'--bind-to'選項手動控制進程如何綁定到CPU內核。 –

+0

感謝您的回覆。日誌只從#0級mpi線程開始。這裏沒有任何約束力。我是否真的需要他們爲「-np 2」,而「-np 3」它本身是否工作? – krege

回答

0

1.10.x版本中存在一些錯誤。 Openmpi-2.x.x解決了這個問題。