-
Notifications
You must be signed in to change notification settings - Fork 48
Provide local asynchronous access consistency #409
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
Closed
Closed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Member
|
I'm on it. |
…llow future extensions)
…o feat-dart-asyncput
Member
Author
|
I'm closing this PR because it has developed into a collection of random tweaks. I will disseminate the changes in smaller PRs... |
Merged
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds implicit local consistency to read operations following asynchronous writes, i.e., a
dart_getordart_get_blockingwill read any value that was previously written bydart_puteven if there has not been an explicit flush issued by the user. It does so by tracking the state of the segment and triggering a flush operation if a previous put operation to the same segment has not been flushed, i.e., if the segment is dirty. A read on a different segment will not trigger a flush.The goal is to use this as the basis for operations on
.asyncon DASH containers, see #371. In particular, the open problem of blocking reads following asynchronous writes will be solved while still allowing multiple put operations to be issued without requiring a flush.To get there, this PR also restructures and unifies the handling of the local allocation window (segment with ID 0): it is now treated as a regular segment of
DART_TEAM_ALL(which is the team owning this segment). Most notably, this gets rid of the special handling in DART communication operations, thus simplifying the code (at the expense of slightly higher overhead for access to local allocation segments). Some additional cleanup to the code has been done (hopefully making it more readable).Background
MPI does not provide any guarantee on the ordering of asynchronous RMA operations and hence we have to make sure that all previous
puts have finished before issuing agetto the same segment. This is in line with consistency guarantees provided by other PGAS approaches, e.g., CoArray. This will enable us to use STL algorithms onarray.async. Since normal container accesses are blocking by default, they are not affected (we might consider changing the default at some point, though.)Alternative solution:
AsyncGlobRefcall back into the container to mark it dirty (boo!). Also, that would not work if the user holds multiple references to the same value.