Florian, You send position=0 MPI_PACKED instead of estimatedPackSize, so it is very odd you see get_count = 12
Can you please double check that part ? Also, who returns MPI_ERR_TRUNCATE ? MPI_Recv ? MPI_Unpack ? Cheers, Gilles Florian Lindner <mailingli...@xgm.de> wrote: >Hello, > >I have this example code: > >#include <vector> >#include <mpi.h> > >int main(int argc, char *argv[]) >{ > MPI_Init(&argc, &argv); > { > MPI_Request req1, req2; > std::vector<int> vec = {1, 2, 3}; > int packSize = sizeof(int) * vec.size(); > int position = 0; > std::vector<char> packSendBuf(packSize); > int vecSize = vec.size(); > MPI_Pack(vec.data(), vec.size(), MPI_INT, packSendBuf.data(), packSize, > &position, MPI_COMM_WORLD); > > int estimatedPackSize = 0; > MPI_Pack_size(vec.size(), MPI_INT, MPI_COMM_WORLD, &estimatedPackSize); > std::cout << "packSize = " << packSize << ", estimatedPackSize = " << > estimatedPackSize << std::endl; > > MPI_Isend(&vecSize, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &req1); > MPI_Isend(packSendBuf.data(), position, MPI_PACKED, 0, 0, MPI_COMM_WORLD, > &req2); > } > { > int vecSize, msgSize; > int packSize = 0, position = 0; > > MPI_Recv(&vecSize, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, > MPI_STATUS_IGNORE); > > MPI_Status status; > MPI_Probe(0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); > MPI_Get_count(&status, MPI_PACKED, &packSize); > char packBuffer[packSize]; > std::cout << "packSize from get_count = " << packSize << std::endl; > > std::vector<int> vec(vecSize); > MPI_Recv(packBuffer, packSize, MPI_PACKED, 0, MPI_ANY_TAG, MPI_COMM_WORLD, > MPI_STATUS_IGNORE); > MPI_Unpack(packBuffer, vecSize, &position, vec.data(), vecSize, MPI_INT, > MPI_COMM_WORLD); > } > MPI_Finalize(); >} > > >Which gives an MPI_ERR_TRUNCATE even when running on 1 rank only. Background >is that I want to send multiple differently >sized objects, also with more complex types that to not map to MPI_*, for >which I plan to use MPI_BYTES. I plan to pack >them into one stream and unpack them one after one. > >I suspect I got somthig with the sizes wrong. The lines > > int estimatedPackSize = 0; > MPI_Pack_size(vec.size(), MPI_INT, MPI_COMM_WORLD, &estimatedPackSize); > std::cout << "packSize = " << packSize << ", estimatedPackSize = " << > estimatedPackSize << std::endl; > >Return the same number, that is 12, the packSize from get_cont is also 12. > >Could you give a hint, what the is problem is here? > >OpenMPI 3.0.0 @ Arch or OpenMPI 1.1.0.2 @ Ubuntu 16.04 > >Thanks, >Florian > > >_______________________________________________ >users mailing list >users@lists.open-mpi.org >https://lists.open-mpi.org/mailman/listinfo/users _______________________________________________ users mailing list users@lists.open-mpi.org https://lists.open-mpi.org/mailman/listinfo/users