This pull request implements the specfem::domain::impl::kernels class. Perviously we used virtual pointers on elements, sources and receivers to implement the physics related to different elements. However, on GPUs this is very inefficient. This update implements the templated kernels class which describes the kokkos parallelism and generates separate kernels for different types of elements. This restores the optimal performance achieved from working-operator-implementation branch.
Issue Number
If there is an issue created for these changes, link it here
Checklist
Please make sure to check developer documentation on specfem docs.
[x] I ran the code through pre-commit to check style
[ ] My code passes all the integration tests
[x] I have added sufficient unittests to test my changes
[x] I have added/updated documentation for the changes I am proposing
[x] I have updated CMakeLists to ensure my code builds
Description
Implements the Kokkos kernels class.
This pull request implements the
specfem::domain::impl::kernels
class. Perviously we used virtual pointers on elements, sources and receivers to implement the physics related to different elements. However, on GPUs this is very inefficient. This update implements the templated kernels class which describes the kokkos parallelism and generates separate kernels for different types of elements. This restores the optimal performance achieved fromworking-operator-implementation
branch.Issue Number
If there is an issue created for these changes, link it here
Checklist
Please make sure to check developer documentation on specfem docs.