-
Notifications
You must be signed in to change notification settings - Fork 19
Kokkos Thermodynamics #992
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
Draft
Thanduriel
wants to merge
25
commits into
kokkos
Choose a base branch
from
kokkos_ModelArrayStore
base: kokkos
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
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
* made device buffer init lazy * removed resize_arrays() * fix: moved sync state to ExtModelArray
* PDTestDynamics is registered under the proper name
bba9367 to
23e8a6e
Compare
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.
Kokkos Thermodynamics
Work in progress on the Kokkos(GPU) thermodynamics. (issue #672)
To track changes in buffers and to sync data between host and device a more data oriented approach is needed. To this end, the management of fields was made more explicit through the
ModelArrayAccessor. The whole model and the tests have been updated to use this new interface which requires:See for example
physics/src/modules/LateralIceSpreadModule/HiblerSpread.cppThe USE_KOKKOS block should be ignored since is just a copy that has not been updated yet.To actually enable device execution, the code needs to be ported to Kokkos which involves further changes:
ModelArraySee for example
physics/src/modules/IceThermodynamicsModule/ThermoWinton.cpp.The question is, how should these two different code paths be separated? In the dynamics, the Kokkos code is kept in separate files that build on top of the existing reference implementation, replacing all the relevant parts. This is necessary to achieve a tight integration for the actual computations. In long-term, the idea was to focus on maintaining the Kokkos version since it runs on both CPU and GPU and perhaps remove the old implementation at some point.
Thermodynamics could be ported in the same way, but since the individual components are much smaller it is also feasible to insert the switch inside the update routines and reuse more of the code. In fact, I build a light abstraction layer that hides all the specifics so there is just one version of the code, see
ThermoWinton::update. Of course, the combined kernel foroverElementsstill needs to adhere to the stricter rules of a Kokkos kernel, so using these abstractions would not automatically make all the code compatible. This abstraction is also somewhat redundant because Kokkos does effectively the same thing with its execution space concept. It just brings the added benefit of working directly withModelArrayand not needing Kokkos to build NeXtSIM-DG.