Hi Adam,
Soon after we decided to request alltoallv to be added to the dv ticket, I realized there is one important difference between this and the dynamic sparse data exchange (DSDE) case. With alltoallv, the receiver knows which ranks it will recieve data from, but it doesn't with DSDE.
I think for alltoalldv, you just need each process to provide two lists: a send list and receive list. Where the current API looks like this:
MPI_Alltoallv( sendbuf, sendcounts[], sdispls[], sendtype, /* O(P) list */ recvbuf, recvcounts[], rdispls[], rectype, /* O(P) list */ comm );
Provide a new O(k) interface like so (have to add a count to each list to give its length, and a list of ranks):
MPI_Alltoalldv( nsends, sendbuf, sendranks[], sendcounts[], sdispls[], sendtype, /* O(k) list */ nrecvs, recvbuf, recvranks[], recvcounts[], rdispls[], rectype, /* O(k) list */ comm ); Yes, this would probably be the simplest solution, however, it requires the user to specify k and the receiver list. As we know, this is sometimes hard. So I was hoping to solve the more general problem of DSDE with this interface. However, I agree that this departs from MPI semantics and since it requires dynamic memory allocation, it may not be a good choice for MPI. Bu I was hoping to discuss those issues at the telecon.
Putting one of those interfaces into the draft document is simple (once we agree on how much we want to provide :-). Thanks & All the Best, Torsten -- bash$ :(){ :|:&};: --------------------- http://www.unixer.de/ ----- Torsten Hoefler | Performance Modeling and Simulation Lead Blue Waters Directorate | University of Illinois (UIUC) 1205 W Clark Street | Urbana, IL, 61801 NCSA Building | +01 (217) 244-7736