[mpich-discuss] MPI_Recv: MPI + Pthreads

Pavan Balaji balaji at mcs.anl.gov
Tue Apr 22 22:01:23 CDT 2008

Can you send us a sample code that fails? I'm assuming you are using 
mpich2-1.0.7 (the latest version).

Btw, the most common error people make while using threads (assuming all 
threads perform MPI calls) is to use MPI_Init() -- you should use 

  -- Pavan

On 04/22/2008 09:00 PM, Olya Krachina wrote:
> Hello list,
> i am kind of new to MPI and Pthreads.... and trying to understand MPI_Recv.
> I am trying to write a parallel matrix multiply (square power of two dimension: 
> AxB = C). I am using 3 machines, 8-core each. So, my program should create MPI 
> processes (-np option with mpiexec) and each MPI process in turn should 
> generate 8 threads on the "home" machine. 
> I have a regular MPI version running fine for up to 32 MPI processes, and my 1-
> MPI_process + pthreads runs fine, and regular 8-thread version working fine, 
> but once i increase number of MPI processes to 2 with 8 threads (i.e. matrices 
> are 16x16) i get:
> $rank 1 in job 147 .... caused collective abord of all ranks, killed by signal 9
> My algorithm is very basic:
> root mpi_broadcasts B and mpi_sends strip of rows of A, non-roots mpi_receive A 
> and broadcast/receive B;
> then all perform threaded computation of part of A and B place it in C and send 
> it back to the root;
> i do not use any mutexes with pthreads, since writing to resulting C is totally 
> independent.
> and somehow i get abort signal on receive in root.... another thing is that 
> root always finishes first, while non-root doesnt get to collect its threads 
> before the abort. 
> So, my question is: what is the timing involved with MPI_Recv... it seems to 
> fail if there is no data to receive... i tried using MPI_Irecv and wait, but no 
> change. Another thing, how can i find out what is the error status..... isnt it 
> what is the last argument of Irecv?
> thank you in advance,
> Olya

Pavan Balaji

More information about the mpich-discuss mailing list