-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
implement nonblocking vector collectives using generalized requests #27
Comments
Question: can't you use MPI_Ineighbor_alltoallw() instead of MPI_Neighbor_alltoallw() in src/vcollectives_x.c? Opening a new thread seems expensive and might be difficult to port. |
You are a co-author of a paper that contains the following:
;-) |
D'oh! |
After reading this part of the standard, I assume it's possible to implement this via the non-blocking variant and generalized requests, but without threads. We can free the temporary arrays in the callback functions, right? |
Unfortunately, generalized requests are useless without threads. This is a well-known flaw. I think it is covered in http://www.mcs.anl.gov/~thakur/papers/grequest-redesign.pdf. If not there, then I look up the details, but the basic idea is that generalized requests cannot make progress by any means other than threads. Querying the status does not cause them to make progress. We can use MPICH generalized requests instead of threads, but that is not a portable implementation. However, since OpenMPI does not support MPI_THREAD_MULTIPLE, it is not really less portable to assume MPICH extended generalized requests versus MPI generalized requests with threads. Another solution, which works just fine for users but I prefer not to implement in BigMPI itself, is to create a new request object and associated query functions that can store and manage the temporaries. If we added a |
Hmm, maybe I'm (again) missing something obvious, but does BigMPI actally need to manually drive progress? I thought it was sufficient to block for the requrest returned by MPI_I${COLLECTIVE}v in the callback functions query_fn, free_fn, cancel_fn -- these are invoked from MPI on user request. |
No, that's the problem with generalized requests. If you create one then And you probably wonder how such a useless feature got into the standard in On Thu, Oct 29, 2015 at 10:54 AM, Andreas Schäfer [email protected]
Jeff Hammond |
Wow... :-( |
It's possible to this using a thread, perhaps just using the blocking collective implementation hanging off of a thread.
The text was updated successfully, but these errors were encountered: