Hi, Pavan,

Thanks a lot, that is most confusing part for me in MPI. I would like to clear this type of problems.

So the blocking begins to send message to itself, but there is no receive posted. Thus, the MPI block it. Am I right here?

Thus, I need a nonblocking receive to wait the message here. Can I use blocking receive?

Hi Jeff,

The weblink is https://computing.llnl.gov/tutorials/mpi/#Derived_Data_Types
the code is second example. Thank you

Thanks a lot!
Sufeng


On Tue, Jul 2, 2013 at 4:48 PM, Pavan Balaji <balaji@mcs.anl.gov> wrote:

This is an incorrect program.  You need to post an Irecv before sending to yourself.

 -- Pavan


On 07/02/2013 04:39 PM, Sufeng Niu wrote:
Hi,

I try to familiar with mpi self defined type api, and I directly run a
very simple code from LLNL webpage:

//-----------------------------------------------------------------------------------------------

#include"mpi.h"
#include <stdio.h>
#define SIZE 4

int main(argc,argv)
int argc;
char *argv[];  {
int numtasks, rank, source=0, dest, tag=1, i;
float a[SIZE][SIZE] =
   {1.0, 2.0, 3.0, 4.0,
    5.0, 6.0, 7.0, 8.0,
    9.0, 10.0, 11.0, 12.0,
   13.0, 14.0, 15.0, 16.0};
float b[SIZE];

MPI_Status stat;
MPI_Datatype columntype;

MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);

MPI_Type_vector(SIZE, 1, SIZE, MPI_FLOAT, &columntype);
MPI_Type_commit(&columntype);

if (numtasks == SIZE) {
   if (rank == 0) {
      for (i=0; i<numtasks; i++)
        MPI_Send(&a[0][i], 1, columntype, i, tag, MPI_COMM_WORLD);
         }

   MPI_Recv(b, SIZE, MPI_FLOAT, source, tag, MPI_COMM_WORLD, &stat);
   printf("rank= %d  b= %3.1f %3.1f %3.1f %3.1f\n",
         rank,b[0],b[1],b[2],b[3]);
   }
else
   printf("Must specify %d processors. Terminating.\n",SIZE);

MPI_Type_free(&columntype);
MPI_Finalize();
}

//-----------------------------------------------------------------------------------------------

However, it doesn't work. the program just suspend there. I figure out
the problem is at line MPI_Send, and MPI_Recv. the MPI_Send just send it
to itself. but I don't know why it doesn't work. Is it caused by dead
lock? why?

Thank you very much!

--
Best Regards,
Sufeng Niu
ECASP lab, ECE department, Illinois Institute of Technology
Tel: 312-731-7219


_______________________________________________
discuss mailing list     discuss@mpich.org
To manage subscription options or unsubscribe:
https://lists.mpich.org/mailman/listinfo/discuss


--
Pavan Balaji
http://www.mcs.anl.gov/~balaji



--
Best Regards,
Sufeng Niu
ECASP lab, ECE department, Illinois Institute of Technology
Tel: 312-731-7219