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

Reply via email to