+1

I do not know what you meant by "MPI_Bcast() supports unsigned long long while MPI_Allgatherv()"

counts (and displacements for MPI_Allgatherv()) are all int according to the MPI standard.

(and as suggested by Jeff, use BigMPI in order to use MPI_Count instead of int)


if you mentioned the datatype, both work fine with MPI_INT and MPI_UNSIGNED_LONG_LONG.


note if your counts are a multiple of a large number, you can create a vector type, and hopefully the number of vectors you have to transmit

will fit into an int, so you can use standard MPI calls.


Cheers,


Gilles


On 11/29/2017 11:20 AM, Jeff Hammond wrote:
You may be looking for BigMPI (

https://github.com/jeffhammond/BigMPI). The README and paper linked therein will tell you everything you need to know.


However, BigMPI solves a correctness problem, not a performance one. If you want to get the faster collectives for multi-gigabyte buffers, you should roll your own pipelined implementation.


Jeff

On Tue, Nov 28, 2017 at 4:05 PM Konstantinos Konstantinidis <kostas1...@gmail.com <mailto:kostas1...@gmail.com>> wrote:

    Hi, I have a communicator, say /comm/, and some shuffling of data
    takes place within its nodes.

    I have implemented the shuffling with broadcasts but now I am
    trying to experiment with MPI_Allgather() and MPI_Allgatherv().

    For demonstration purposes I am adding here a small part of the
    C++ code. You can assume that /no_keys/ keys each of size /keysize
    /unsigned char//are locally stored at some structure named
    /endata, /at each node.

    *unsigned keysize = 100;*
    *unsigned long long no_keys = 10;*
    **
    *// unsigned long long bytes_send_count = no_keys*keysize; *
    *int bytes_send_count = (int)no_keys*keysize; *
    *
    *
    *unsigned int commSize = (unsigned)comm.Get_size();*
    *
    *
    *// unsigned long long* recv_counts = new unsigned long
    long[commSize];*
    *int* recv_counts = new int[commSize];*
    **
    *// unsigned long long* displs = new unsigned long long[commSize];*
    *int* displs = new int[commSize]; *
    **
    *//Εxchange amount of data*
    *// comm.Allgather(&bytes_send_count, 1, MPI::UNSIGNED_LONG_LONG,
    recv_counts, 1, MPI::UNSIGNED_LONG_LONG); *
    *comm.Allgather(&bytes_send_count, 1, MPI::INT, recv_counts, 1,
    MPI::INT); *
    *
    *
    *unsigned long long total = 0; *
    *for(unsigned int i = 0; i < commSize; i++){*
    *displs[i] = total; *
    *total += recv_counts[i]; *
    *}*
    *
    *
    *unsigned char* recv_buf = new unsigned char[total];*
    **
    *//Exchange actual data*
    *comm.Allgatherv(&endata, no_keys*keysize, MPI::UNSIGNED_CHAR,
    recv_buf, recv_counts, displs, MPI::UNSIGNED_CHAR);*
    *
    *
    My problem is that the number of keys is actually big and cannot
    fit into an *int*, that's why it is defined as an *unsigned long
    long*. So, what I would like to do is basically the commented
    lines of code but I get the error that there is no match to this
    function if I use *unsigned long long*. Is this true, and if yes
    why is that? I don't understand why Bcast() supports unsigned long
    long while Allgatherv() does not.

    I would like to avoid setting up multiple Allgatherv() calls for
    this since the number of connections that are initiated based on
    my algorithm is quite big and I am afraid that this will create
    further delays. Actually, this is the reason I am trying to
    replace Bcast() and try other things.

    I am using Open MPI 2.1.2 and testing on a single computer with 7
    MPI processes. The ompi_info is the attached file.
    _______________________________________________
    users mailing list
    users@lists.open-mpi.org <mailto:users@lists.open-mpi.org>
    https://lists.open-mpi.org/mailman/listinfo/users

--
Jeff Hammond
jeff.scie...@gmail.com <mailto:jeff.scie...@gmail.com>
http://jeffhammond.github.io/


_______________________________________________
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