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

chan at mcs.anl.gov chan at mcs.anl.gov
Thu Nov 5 11:49:59 CST 2009


If you don't make any MPI call within your OpenMP segment,
you don't need MPI_THREAD_MULTIPLE, i.e. MPI and OpenMP don't know
about each other.  MPICH2's configure does not know about OpenMP(yet),
so you need to compile your fortran code with intel OpenMP flag, -openmp,
with mpif77/mpif90. For portability/convenience, you may want to use
environment variable OMP_NUM_THREADS to set the number of OMP threads
instead of calling omp_set_num_threads() inside your code (mpiexec has
option to set environment variable in every process).

A.Chan

----- "Susan A. Schwarz" <Susan.A.Schwarz at dartmouth.edu> wrote:

> 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
> 
> _______________________________________________
> mpich-discuss mailing list
> mpich-discuss at mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss


More information about the mpich-discuss mailing list