c - ridiculous simple MPI_Send/Recv problem and I don_t understand why -


There are two tasks with different algorithms to me I first function I non-blocking communication (Mpiai_aiarsivi, Mpiai_aisand) apply And the program runs without any errors. Even when I change the non-blocking to block communication, it's all right. No deadlock but if I do I apply such other functions with the default intercept communications (at issue algorithm):

  if (my_rank == 0) {a = 3 ; MPI Side (& amp; A, 1, MPIDouble, 1.0, MPIKMM_WORLD); } And if (my_rank == 1) {MPI_Recv (& amp; A, 1, MPI_ DOUBLE, 0,0, MPI_COMM_WORLD, and position); }   

Therefore, Process 1 should get the value from Process 1. But I am getting this error:

Fatal error in MPI_Recv: message small, error stack: MPI_Rakewe (187) ................. ......: Mpiai_arkev (buf = 0xbfbef2a8, count = 1, Mpiai_ DOUBLE, src = 0, tag = 0, MPI_COMM_WORLD, status = 0xbfbef294) failed MPIDI_CH3U_Request_unpack_uebuf (600): the message has been shortened; Received 32 bytes, but the buffer size 8 rank in job 2 39 Blbla the situation to get out of position and rank cause mass cancellation of all ranks second signal executed by 9

If I have only two tasks with a program, they are considered as work but both result together in the above error message. I understand the error message, but I do not know what I can do against it. Can anyone explain to me that I have to look for this error? Since IM is not getting deadlock in the first function, so assuming that an unexpected transmission from the first function can not be performed which leads to error on the other hand.

Then, the first thing here is:

  MPI_Type_vector (m, 1, m, MPI_DOUBLE, and column_mpi_t); MPI_Type_commit (& amp; column_mpi_t); T = (double **) molk (m * size * (double *)); T_data = (double *) malloc (m * m * sizeof (double)); (I = 0; i & lt; m; i ++) for {t [i] = & amp; (T_data [im]); } If (my_rank == 0) {s = & amp; (T [0] [0]); For (i = 1; i & lt; p; i ++) {MPI Side (S, 1, column_mpi_t, I, 0, MPICOMMWWLD); }} For (k = 0; k   

I have come to the conclusion that the derivative datatype is the root of my problems, why does anyone see?

Well, I wrong if I change to send MPI datatype to MPI_Irecv / MPI_DOUBLE, which will be fit for the datatypes of recv / send another function .. so no Tronskekshn error. So, no solution ....

Comments