-
Notifications
You must be signed in to change notification settings - Fork 44
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
Launch policies for algorithms #272
Comments
Something like that is definitely needed and there was previous discussion about it. Some parts of the functionality described below are in DASH already but I think its not 100% working at the moment. The idea to provide similar functionality as you describe with an
While |
We have |
I introduced the GlobAsync* types quite some time ago and they do exactly that. We don't want to use the low-level function interface
and
Another related concept is |
... and the same launch policies will also be used for algorithms.
will be changed to
There's not much to it, just mimicking the C++11 concepts. |
Thanks for the clarifications, I wasn't aware that there were already activities in that direction in the DASH part. Looking forward to seeing this happen and leaving this ticket open to track progress. |
For the latest proposal on execution and launch policies, see my comment in #300 |
At the moment, accesses to global memory of DASH containers through subscript operators are serialized using blocking put operations (
dart_put_blocking
) inGlobRef
, potentially resulting in poor performance for naive users. I understand that this is useful to avoid synchronization problems in the general case, but allowing asynchronous access through subscript operators would provide an easy way of improving performance of remote access to multiple elements while using the same (simple to use) interface.Hence, we could introduce asynchronous epochs, which have an explicit begin and end, e.g.,
Within an epoch,
GlobRef
will issue non-blockingput
(+get
?) operations and data transfers are guaranteed to complete only after the end of the epoch.Note: I am aware of
dash::put_value_async
inOneSided
but I think it's not intuitively usable and quite wordy, e.g.,The documentation is not clear on the use of these methods and there are no tests/examples either. I also cannot efficiently mix
dash::put_value_async
andoperator[]
because the latter causes a flush. The idea of asynchronous epochs closely resembles the model employed by MPI-RMA (MPI_Put
andMPI_Flush
), just with a nicer interface :)Please let me know what you think. Maybe there have been discussions about it earlier?
The text was updated successfully, but these errors were encountered: