PETSc algebraic solvers now run on GPU systems from NVIDIA and AMD. This sometimes provides an alternative high-performance, low-cost solution technique.
We recommend working with petsc master (git branch) if you wish to work witht his feature.WARNING: Using GPUs effectively is difficult! You must be dedicated and willing to get into the guts of GPU usage if you are serious about using GPUs.
- Installing PETSc to use NVIDIA GPUs (CUDA)
- Installing PETSc to use GPUs independent of the vendor (OpenCL)
- How the GPU solvers are implemented in PETSc
- Example that uses CUDA directly in the user function evaluation
- Presentation on some aspects of GPU usage from PETSc
Quick summary of usage with CUDA:
VECCUDAmay be used with
VecSetType()or -vec_type seqcuda,mpicuda, or cuda when
MATAIJCUSPARSEmaybe used with MatSetType or -mat_type seqaijcusparse,mpiaijcusparse, or aijcusparse when
- If you are creating the vectors and matrices with a DM, you can use -dm_vec_type cuda and -dm_mat_type aijcuda
- The VecType
Quick summary of usage with OpenCL (provided by the ViennaCL library):
VECVIENNACLmay be used with
VecSetType()or -vec_type seqviennacl,mpiviennacl, or viennacl when
MATAIJVIENNACLmaybe used with MatSetType or -mat_type seqaijviennacl,mpiaijviennacl, or aijviennacl when
- If you are creating the vectors and matrices with a DM, you can use -dm_vec_type viennacl and -dm_mat_type aijviennacl
- The VecType
- It is useful to develop your code with the default vectors and then run production runs with the command line options to use the GPU since debugging on GPUs is difficult.
All of the Krylov methods except
KSPIBCGSrun on the GPU.
The only preconditioners to run directly on the GPU are
PCASMare just containers, so if the subsolver runs on the GPU, they can also be considered to run on the GPU.
Some GPU systems (for example many laptops) only run with single
precision; thus, PETSc must be built with the
./configure option --with-precision=single
- We could use your help in further developing PETSc for GPUs; see PETSc Developers site.