1*6d54fb17SJacob Faibussowitsch #ifndef PETSC_DEVICE_CUPM_KERNELS_HPP 2*6d54fb17SJacob Faibussowitsch #define PETSC_DEVICE_CUPM_KERNELS_HPP 3*6d54fb17SJacob Faibussowitsch 4*6d54fb17SJacob Faibussowitsch #include <petscdevice_cupm.h> 5*6d54fb17SJacob Faibussowitsch 6*6d54fb17SJacob Faibussowitsch #if defined(__cplusplus) 7*6d54fb17SJacob Faibussowitsch 8*6d54fb17SJacob Faibussowitsch namespace Petsc 9*6d54fb17SJacob Faibussowitsch { 10*6d54fb17SJacob Faibussowitsch 11*6d54fb17SJacob Faibussowitsch namespace device 12*6d54fb17SJacob Faibussowitsch { 13*6d54fb17SJacob Faibussowitsch 14*6d54fb17SJacob Faibussowitsch namespace cupm 15*6d54fb17SJacob Faibussowitsch { 16*6d54fb17SJacob Faibussowitsch 17*6d54fb17SJacob Faibussowitsch namespace kernels 18*6d54fb17SJacob Faibussowitsch { 19*6d54fb17SJacob Faibussowitsch 20*6d54fb17SJacob Faibussowitsch namespace util 21*6d54fb17SJacob Faibussowitsch { 22*6d54fb17SJacob Faibussowitsch 23*6d54fb17SJacob Faibussowitsch template <typename SizeType, typename T> 24*6d54fb17SJacob Faibussowitsch PETSC_DEVICE_INLINE_DECL static void grid_stride_1D(const SizeType size, T &&func) noexcept 25*6d54fb17SJacob Faibussowitsch { 26*6d54fb17SJacob Faibussowitsch for (SizeType i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) func(i); 27*6d54fb17SJacob Faibussowitsch return; 28*6d54fb17SJacob Faibussowitsch } 29*6d54fb17SJacob Faibussowitsch 30*6d54fb17SJacob Faibussowitsch } // namespace util 31*6d54fb17SJacob Faibussowitsch 32*6d54fb17SJacob Faibussowitsch } // namespace kernels 33*6d54fb17SJacob Faibussowitsch 34*6d54fb17SJacob Faibussowitsch } // namespace cupm 35*6d54fb17SJacob Faibussowitsch 36*6d54fb17SJacob Faibussowitsch } // namespace device 37*6d54fb17SJacob Faibussowitsch 38*6d54fb17SJacob Faibussowitsch } // namespace Petsc 39*6d54fb17SJacob Faibussowitsch 40*6d54fb17SJacob Faibussowitsch #endif // __cplusplus 41*6d54fb17SJacob Faibussowitsch 42*6d54fb17SJacob Faibussowitsch #endif // PETSC_DEVICE_CUPM_KERNELS_HPP 43