1 #include <petscdevice_cuda.h> 2 #include <petsc/private/sfimpl.h> 3 #include "../sfcupm.hpp" 4 #include "../sfcupm_impl.hpp" 5 6 namespace Petsc 7 { 8 9 namespace sf 10 { 11 12 namespace cupm 13 { 14 15 namespace impl 16 { 17 18 template struct SfInterface<device::cupm::DeviceType::CUDA>; 19 20 } // namespace impl 21 22 } // namespace cupm 23 24 } // namespace sf 25 26 } // namespace Petsc 27 28 using PetscSFCuda = ::Petsc::sf::cupm::impl::SfInterface<::Petsc::device::cupm::DeviceType::CUDA>; 29 30 PetscErrorCode PetscSFMalloc_CUDA(PetscMemType mtype, size_t size, void **ptr) 31 { 32 PetscFunctionBegin; 33 PetscCall(PetscSFCuda::Malloc(mtype, size, ptr)); 34 PetscFunctionReturn(PETSC_SUCCESS); 35 } 36 37 PetscErrorCode PetscSFFree_CUDA(PetscMemType mtype, void *ptr) 38 { 39 PetscFunctionBegin; 40 PetscCall(PetscSFCuda::Free(mtype, ptr)); 41 PetscFunctionReturn(PETSC_SUCCESS); 42 } 43 44 PetscErrorCode PetscSFLinkSetUp_CUDA(PetscSF sf, PetscSFLink link, MPI_Datatype unit) 45 { 46 PetscFunctionBegin; 47 PetscCall(PetscSFCuda::LinkSetUp(sf, link, unit)); 48 PetscFunctionReturn(PETSC_SUCCESS); 49 } 50