I've been successful at using MPI_Dist_graph_create_adjacent to create a new communicator with graph topology, and using it with MPI_Neighbor_alltoallv. But I have a few questions:
1. Where can I use this communicator? Can it be used with the usual stuff like MPI_Allgather, or do I need to hang onto the original communicator (MPI_COMM_WORLD actually) for that purpose? 2. It turns out that my graph isn't symmetric sometimes (but I think I understood that is okay). I usually just need to send stuff in one direction, but occasionally it needs to go in the reverse direction. Am I right that I need a second graph communicator built with the reverse edges to use with MPI_Neighbor_alltoallv for that communication? My testing seems to indicate so, but I'm not absolutely certain. 3. Is there any real advantage to using the non-symmetric graph, or should I just symmetrize it and use the one? Thanks for your help!