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