1054def41SToby Isaac #pragma once 2054def41SToby Isaac #include <../src/vec/is/sf/impls/basic/sfpack.h> 3054def41SToby Isaac #include <petsc/private/cupminterface.hpp> 4054def41SToby Isaac #include <petsc/private/cupmatomics.hpp> 5054def41SToby Isaac #include <petsc/private/deviceimpl.h> 6054def41SToby Isaac 7054def41SToby Isaac namespace Petsc 8054def41SToby Isaac { 9054def41SToby Isaac 10054def41SToby Isaac namespace sf 11054def41SToby Isaac { 12054def41SToby Isaac 13054def41SToby Isaac namespace cupm 14054def41SToby Isaac { 15054def41SToby Isaac 16054def41SToby Isaac namespace impl 17054def41SToby Isaac { 18054def41SToby Isaac 19054def41SToby Isaac template <device::cupm::DeviceType T> 20*85f25e71SJed Brown struct PETSC_SINGLE_LIBRARY_VISIBILITY_INTERNAL SfInterface : device::cupm::impl::Interface<T> { 21054def41SToby Isaac PETSC_CUPM_INHERIT_INTERFACE_TYPEDEFS_USING(T); 22054def41SToby Isaac 23054def41SToby Isaac private: 24054def41SToby Isaac template <typename Type, PetscInt BS, PetscInt EQ> 25054def41SToby Isaac static PetscErrorCode Pack(PetscSFLink, PetscInt, PetscInt, PetscSFPackOpt, const PetscInt *, const void *, void *) noexcept; 26054def41SToby Isaac 27054def41SToby Isaac template <typename Type, class Op, PetscInt BS, PetscInt EQ> 28054def41SToby Isaac static PetscErrorCode UnpackAndOp(PetscSFLink, PetscInt, PetscInt, PetscSFPackOpt, const PetscInt *, void *, const void *) noexcept; 29054def41SToby Isaac 30054def41SToby Isaac template <typename Type, class Op, PetscInt BS, PetscInt EQ> 31054def41SToby Isaac static PetscErrorCode FetchAndOp(PetscSFLink, PetscInt, PetscInt, PetscSFPackOpt, const PetscInt *, void *, void *) noexcept; 32054def41SToby Isaac 33054def41SToby Isaac template <typename Type, class Op, PetscInt BS, PetscInt EQ> 34054def41SToby Isaac static PetscErrorCode ScatterAndOp(PetscSFLink, PetscInt, PetscInt, PetscSFPackOpt, const PetscInt *, const void *, PetscInt, PetscSFPackOpt, const PetscInt *, void *) noexcept; 35054def41SToby Isaac 36054def41SToby Isaac template <typename Type, PetscInt BS, PetscInt EQ> 37054def41SToby Isaac static PetscErrorCode ScatterAndInsert(PetscSFLink, PetscInt, PetscInt, PetscSFPackOpt, const PetscInt *, const void *, PetscInt, PetscSFPackOpt, const PetscInt *, void *) noexcept; 38054def41SToby Isaac 39054def41SToby Isaac template <typename Type, class Op, PetscInt BS, PetscInt EQ> 40054def41SToby Isaac static PetscErrorCode FetchAndOpLocal(PetscSFLink, PetscInt, PetscInt, PetscSFPackOpt, const PetscInt *, void *, PetscInt, PetscSFPackOpt, const PetscInt *, const void *, void *) noexcept; 41054def41SToby Isaac 42054def41SToby Isaac template <typename Type, PetscInt BS, PetscInt EQ> 43054def41SToby Isaac static void PackInit_RealType(PetscSFLink) noexcept; 44054def41SToby Isaac 45054def41SToby Isaac template <typename Type, PetscInt BS, PetscInt EQ, PetscInt size /*sizeof(Type)*/> 46054def41SToby Isaac struct PackInit_IntegerType_Atomic; 47054def41SToby Isaac 48054def41SToby Isaac template <typename Type, PetscInt BS, PetscInt EQ> 49054def41SToby Isaac static void PackInit_IntegerType(PetscSFLink link) noexcept; 50054def41SToby Isaac 51054def41SToby Isaac #if PetscDefined(HAVE_COMPLEX) 52054def41SToby Isaac template <typename Type, PetscInt BS, PetscInt EQ> 53054def41SToby Isaac static void PackInit_ComplexType(PetscSFLink link) noexcept; 54054def41SToby Isaac #endif 55054def41SToby Isaac 56054def41SToby Isaac template <typename Type> 57054def41SToby Isaac static void PackInit_PairType(PetscSFLink link) noexcept; 58054def41SToby Isaac 59054def41SToby Isaac template <typename Type, PetscInt BS, PetscInt EQ> 60054def41SToby Isaac static void PackInit_DumbType(PetscSFLink link) noexcept; 61054def41SToby Isaac 62054def41SToby Isaac static PetscErrorCode LinkSyncDevice(PetscSFLink) noexcept; 63054def41SToby Isaac static PetscErrorCode LinkSyncStream(PetscSFLink) noexcept; 64054def41SToby Isaac static PetscErrorCode LinkMemcpy(PetscSFLink, PetscMemType, void *, PetscMemType, const void *, size_t) noexcept; 65054def41SToby Isaac static PetscErrorCode LinkDestroy_MPI(PetscSF, PetscSFLink) noexcept; 66054def41SToby Isaac 67054def41SToby Isaac public: 68054def41SToby Isaac static PetscErrorCode Malloc(PetscMemType, size_t, void **) noexcept; 69054def41SToby Isaac static PetscErrorCode Free(PetscMemType, void *) noexcept; 70054def41SToby Isaac static PetscErrorCode LinkSetUp(PetscSF, PetscSFLink, MPI_Datatype) noexcept; 71054def41SToby Isaac }; 72054def41SToby Isaac 73054def41SToby Isaac } // namespace impl 74054def41SToby Isaac 75054def41SToby Isaac } // namespace cupm 76054def41SToby Isaac 77054def41SToby Isaac } // namespace sf 78054def41SToby Isaac 79054def41SToby Isaac } // namespace Petsc 80