xref: /petsc/src/sys/objects/kokkos/kinit.kokkos.cxx (revision c2b86a4894b3a9760ea54de32c9fed1ec15c1c7e)
1*c2b86a48SJunchao Zhang #include <petscsys.h>
2*c2b86a48SJunchao Zhang #include <petsc/private/petscimpl.h>
3*c2b86a48SJunchao Zhang #include <Kokkos_Core.hpp>
4*c2b86a48SJunchao Zhang 
5*c2b86a48SJunchao Zhang /* These wrappers are used as C bindings for the Kokkos routines */
6*c2b86a48SJunchao Zhang PetscErrorCode PetscKokkosInitialize_Private(void)
7*c2b86a48SJunchao Zhang {
8*c2b86a48SJunchao Zhang   Kokkos::InitArguments args;
9*c2b86a48SJunchao Zhang   int                   devId;
10*c2b86a48SJunchao Zhang 
11*c2b86a48SJunchao Zhang   PetscFunctionBegin;
12*c2b86a48SJunchao Zhang #if defined(KOKKOS_ENABLE_CUDA)
13*c2b86a48SJunchao Zhang   cudaGetDevice(&devId);
14*c2b86a48SJunchao Zhang #elif defined(KOKKOS_ENABLE_HIP) /* Kokkos does not support CUDA and HIP at the same time */
15*c2b86a48SJunchao Zhang   hipGetDevice(&devId);
16*c2b86a48SJunchao Zhang #endif
17*c2b86a48SJunchao Zhang   args.device_id = devId;
18*c2b86a48SJunchao Zhang   Kokkos::initialize(args);
19*c2b86a48SJunchao Zhang   PetscFunctionReturn(0);
20*c2b86a48SJunchao Zhang }
21*c2b86a48SJunchao Zhang 
22*c2b86a48SJunchao Zhang PetscErrorCode PetscKokkosFinalize_Private(void)
23*c2b86a48SJunchao Zhang {
24*c2b86a48SJunchao Zhang   PetscFunctionBegin;
25*c2b86a48SJunchao Zhang   Kokkos::finalize();
26*c2b86a48SJunchao Zhang   PetscFunctionReturn(0);
27*c2b86a48SJunchao Zhang }
28*c2b86a48SJunchao Zhang 
29*c2b86a48SJunchao Zhang PetscErrorCode PetscKokkosIsInitialized_Private(PetscBool *isInitialized)
30*c2b86a48SJunchao Zhang {
31*c2b86a48SJunchao Zhang   PetscFunctionBegin;
32*c2b86a48SJunchao Zhang   *isInitialized = Kokkos::is_initialized() ? PETSC_TRUE : PETSC_FALSE;
33*c2b86a48SJunchao Zhang   PetscFunctionReturn(0);
34*c2b86a48SJunchao Zhang }