[mpich-discuss] how to configure mpich2 v1.1 for hybrid mpi/openmp code

Susan A. Schwarz Susan.A.Schwarz at dartmouth.edu
Thu Nov 5 11:07:12 CST 2009


I have a question about how to configure MPICH2 v1.1 to run my hybrid Fortran
MPI/OpenMP code. I have been running it with MPICH1 and it has been working
correctly but when I tried to use it with MPICH2, the OpenMP section uses only 
one thread instead of the 8 that I request. Here is a description of how the 
code works.

In the MPI section of the code, the master processor sends out work to each of
the slave processors, the slave sends back the results and receives more work
from the master until all the work is done. After this point the slave processes 
wait while the master processor does the OpenMP section of the code. The master 
calls the OpenMP function omp_set_num_threads to set the number of  threads to 
be 8 which is the number of cores on a single node. The master processor then 
calls the OpenMP MKL pardiso function to invert the sparse matrix that contains 
the results from the MPI portion of the code. When the pardiso calculation is 
completed, the MPI section of the code goes onto the next iteration. We run this 
code on multiple dual quad-core nodes and use only one of the nodes for the 
OpenMP pardiso calculation.  Typically, I run this on 24 processors (3 8-core 
nodes). I would like to be able to use all 24 processors in the MPI section and 
then the 8 processors on the master node for the OpenMP section.

Up until recently, I have been using MPICH1 v1.2.7p1, the intel v11.1 fortran
compiler and the mkl v10.2 library for this calculation and it has been working
correctly. I recently tried to build this code to use MPICH2 compiled with the 
v11.1 intel compilers for the ch3:nemesis device which allows for 
multithreading. However, despite a call to set the number of openmp threads to 
8, it only uses 1 thread for the pardiso calculation.

Here is how I configured MPICH2:

./configure --prefix=/opt/mpich2/mpich2-1.1-intel-11.1 --with-device=ch3:nemesis 
--enable-debuginfo  --enable-f90 --enable-cxx --enable-romio

Here is how I initialize MPI:

  call MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,provided,ierr)

I am running this code on 64-bit RHEL v5.3.

My question is, how do I configure my MPICH2 environment to run this code.

Susan Schwarz
Dartmouth College



More information about the mpich-discuss mailing list