ENH: GPU version
Adding support for GPUs in GPAW is under development. For more details about the effort, please see a recent presentation at the GPAW 2021: Users and Developers Meeting or check out the repository: https://gitlab.com/mlouhivu/gpaw/-/tree/hip
This issue is for tracking the development effort and for collecting plans and discussions about the GPU version.
Note: the information below is a bit outdated. Integration of the HIP/CUDA branch to the master is active in !1583 (merged)
Merge
Tentative merge strategy for a step-wise merge that allows for sufficient testing:
- add working CI for GPU code
- merge back-end, tests, and a simple FD demonstrator
- merge basic functionality
- merge additional performance enhancements
TODO
Goal: Minimise code impact of the GPU version and integrate nicely with the CPU version to prepare for an eventual merging of the GPU and CPU versions. Expansion of functionality should be left post-merge.
Build system
-
integrate with normal build -
fix CI
Tests
-
ensure existing tests work -
add GPU tests
Clean up
-
separation of debug code -
documentation / comments -
clean up code, clarify naming -
remove unused code
Integration
-
clean separation of GPU and CPU functions at C level -
GPU-CPU branching at deeper level -
transparent data movements -
encapsulate GPU-specific imports -
more (all?) arrays to GPU -
test alternative GPU array implementations (cupy?) -
test and decide if(removed)xc_thread
should be on or off by default -
test and decide if(removed)hybrid_blas
should be on or off by default -
fix hardware parameters (currently just Fermi and Kepler)
User documentation
-
installation instructions -
usage examples
Expand functionality (future work, post-merge)
-
fix LCAO mode -
fix PW mode -
fix other eigensolvers (CG, Davidson)