-
Notifications
You must be signed in to change notification settings - Fork 99
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
SpMV_struct: Implementation of a structured spmv algorithm #446
Conversation
The implementation hinges on the regularity of the sparsity pattern of the matrix. It is leveraged to access vector entries without using the view of column indices. The new kernel is faster for the 5 stencils implemented: 1D, 2D and 3D FD and FE. It also does check for a multivector containing a single vector in which case it calls the vector implementation of spmv_struct. A fall back to the unstructured implementation is used for the multivector case at the moment. A unit test and a performance test are added to assess correctness and performance of the kernel. Three utility functions are implemented in: test_common/KokkosKernels_Test_Structured_Matrix.hpp They return matrices corresponding to the discretization of the Laplace operator on 1D, 2D and 3D grids for FD and FE discretization. Reactivating the spmv unit-test on Cuda
@lucbv Thanks ! Let me take a look. |
So, results on bowman:
|
Results on white:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, Luc, for getting this PR in ! Are the performance results in the wiki up to date with these changes. I know there were multiple passes to the code, so just want to make sure the final performance is in the wiki.
@brian-kelley Spot checks passed here, why would it fail now ? |
The implementation hinges on the regularity of the sparsity pattern of the matrix.
It is leveraged to access vector entries without using the view of column indices.
The new kernel is faster for the 5 stencils implemented: 1D, 2D and 3D FD and FE.
It also does check for a multivector containing a single vector in which case it
calls the vector implementation of spmv_struct. A fall back to the unstructured
implementation is used for the multivector case at the moment.
A unit test and a performance test are added to assess correctness and performance
of the kernel. Three utility functions are implemented in:
test_common/KokkosKernels_Test_Structured_Matrix.hpp
They return matrices corresponding to the discretization of the Laplace operator on
1D, 2D and 3D grids for FD and FE discretization.
Reactivating the spmv unit-test on Cuda