Actual source code: matdiagonalcuda.cu

      1: #include <petsc/private/matimpl.h>

      3: #include "../matdiagonalcupm.hpp"
      4: #include "../src/vec/vec/impls/seq/cupm/vecseqcupm.hpp"
      5: #include "../src/vec/vec/impls/seq/cupm/vecseqcupm_impl.hpp"

      7: using namespace Petsc::device::cupm;
      8: using Petsc::device::cupm::DeviceType;

     10: static constexpr impl::MatDiagonal_CUPM<DeviceType::CUDA, ::Petsc::vec::cupm::impl::VecSeq_CUPM<DeviceType::CUDA>> cupm_mat{};

     12: PETSC_INTERN PetscErrorCode MatADot_Diagonal_SeqCUDA(Mat A, Vec x, Vec y, PetscScalar *val)
     13: {
     14:   PetscFunctionBegin;
     15:   PetscCall(cupm_mat.ADot(A, x, y, val));
     16:   PetscFunctionReturn(PETSC_SUCCESS);
     17: }

     19: PETSC_INTERN PetscErrorCode MatANormSq_Diagonal_SeqCUDA(Mat A, Vec x, PetscReal *val)
     20: {
     21:   PetscFunctionBegin;
     22:   PetscCall(cupm_mat.ANormSq(A, x, val));
     23:   PetscFunctionReturn(PETSC_SUCCESS);
     24: }