This is with 1.10.1, configured with flags --enable-debug --enable-mem-debug. Use the attached test cases to reproduce yourself.
* Iallgatherv() prints a warning, but otherwise seems to succeed (for some reason, running under valgrind hangs, so I cannot test further): $ mpicc iallgatherv.c $ ./a.out MPI Error in MPI_Pack_size() (0:0) * Iscatterv() and Igatherv() both prints the pack-size error and fail: $ mpicc iscatterv.c $ ./a.out MPI Error in MPI_Pack_size() (0:0) Error in NBC_Copy() (49) [kw2060:25204] *** An error occurred in MPI_Iscatterv [kw2060:25204] *** reported by process [140736503742465,0] [kw2060:25204] *** on communicator MPI_COMM_SELF [kw2060:25204] *** MPI_ERR_SIZE: invalid size [kw2060:25204] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort, [kw2060:25204] *** and potentially your MPI job) $ mpicc igatherv.c $ ./a.out MPI Error in MPI_Pack_size() (0:0) Error in NBC_Copy() (49) [kw2060:25212] *** An error occurred in MPI_Igatherv [kw2060:25212] *** reported by process [140727914332161,0] [kw2060:25212] *** on communicator MPI_COMM_SELF [kw2060:25212] *** MPI_ERR_SIZE: invalid size [kw2060:25212] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort, [kw2060:25212] *** and potentially your MPI job) -- Lisandro Dalcin ============ Research Scientist Computer, Electrical and Mathematical Sciences & Engineering (CEMSE) Numerical Porous Media Center (NumPor) King Abdullah University of Science and Technology (KAUST) http://numpor.kaust.edu.sa/ 4700 King Abdullah University of Science and Technology al-Khawarizmi Bldg (Bldg 1), Office # 4332 Thuwal 23955-6900, Kingdom of Saudi Arabia http://www.kaust.edu.sa Office Phone: +966 12 808-0459
#include <mpi.h> int main(int argc, char *argv[]) { signed char a=1,b=2; int rcounts[1] = {0}; int rdispls[1] = {0}; MPI_Request request; MPI_Init(&argc, &argv); MPI_Iallgatherv(&a, 0, MPI_SIGNED_CHAR, &b, rcounts, rdispls, MPI_SIGNED_CHAR, MPI_COMM_SELF, &request); MPI_Wait(&request, MPI_STATUS_IGNORE); MPI_Finalize(); return 0; }
#include <mpi.h> int main(int argc, char *argv[]) { signed char a=1,b=2; int rcounts[1] = {0}; int rdispls[1] = {0}; MPI_Request request; MPI_Init(&argc, &argv); MPI_Igatherv(&a, 0, MPI_SIGNED_CHAR, &b, rcounts, rdispls, MPI_SIGNED_CHAR, 0, MPI_COMM_SELF, &request); MPI_Wait(&request, MPI_STATUS_IGNORE); MPI_Finalize(); return 0; }
#include <mpi.h> int main(int argc, char *argv[]) { signed char a=1,b=2; int scounts[1] = {0}; int sdispls[1] = {0}; MPI_Request request; MPI_Init(&argc, &argv); MPI_Iscatterv(&a, scounts, sdispls, MPI_SIGNED_CHAR, &b, 0, MPI_SIGNED_CHAR, 0, MPI_COMM_SELF, &request); MPI_Wait(&request, MPI_STATUS_IGNORE); MPI_Finalize(); return 0; }