1152b3e56SJunchao Zhang #if !defined(PETSCVEC_KOKKOS_HPP) 2152b3e56SJunchao Zhang #define PETSCVEC_KOKKOS_HPP 3152b3e56SJunchao Zhang 411d22bbfSJunchao Zhang #include <petscconf.h> 511d22bbfSJunchao Zhang 6ac09b921SBarry Smith /* SUBMANSEC = Vec */ 7ac09b921SBarry Smith 811d22bbfSJunchao Zhang #if defined(PETSC_HAVE_KOKKOS) 911d22bbfSJunchao Zhang #if defined(petsccomplexlib) 1011d22bbfSJunchao Zhang #error "Error: You must include petscvec_kokkos.hpp before other petsc headers in this C++ file to use petsc complex with Kokkos" 1111d22bbfSJunchao Zhang #endif 1211d22bbfSJunchao Zhang 1311d22bbfSJunchao Zhang #define PETSC_DESIRE_KOKKOS_COMPLEX 1 /* To control the definition of petsccomplexlib in petscsystypes.h */ 1411d22bbfSJunchao Zhang #endif 1511d22bbfSJunchao Zhang 16152b3e56SJunchao Zhang #include <petscvec.h> 17152b3e56SJunchao Zhang 18152b3e56SJunchao Zhang #if defined(PETSC_HAVE_KOKKOS) 19152b3e56SJunchao Zhang #include <Kokkos_Core.hpp> 20152b3e56SJunchao Zhang 2121bad809SJunchao Zhang /*@C 2221bad809SJunchao Zhang VecGetKokkosView - Returns a constant Kokkos View that contains up-to-date data of a vector in the specified memory space. 23152b3e56SJunchao Zhang 2421bad809SJunchao Zhang Synopsis: 2521bad809SJunchao Zhang #include <petscvec_kokkos.hpp> 2621bad809SJunchao Zhang PetscErrorCode VecGetKokkosView (Vec v,Kokkos::View<const PetscScalar*,MemorySpace>* kv); 2721bad809SJunchao Zhang PetscErrorCode VecGetKokkosView (Vec v,Kokkos::View<PetscScalar*,MemorySpace>* kv); 2821bad809SJunchao Zhang 2921bad809SJunchao Zhang Logically Collective on Vec 3021bad809SJunchao Zhang 3121bad809SJunchao Zhang Input Parameter: 32*87497f52SBarry Smith . v - the vector in type of `VECKOKKOS` 3321bad809SJunchao Zhang 3421bad809SJunchao Zhang Output Parameter: 3521bad809SJunchao Zhang . kv - the Kokkos View with a user-specified template parameter MemorySpace 3621bad809SJunchao Zhang 3721bad809SJunchao Zhang Notes: 38*87497f52SBarry Smith If the vector is not of type `VECKOKKOS`, an error will be raised. 39*87497f52SBarry Smith 40*87497f52SBarry Smith The functions are similar to `VecGetArrayRead()` and `VecGetArray()` respectively. One can read-only or read/write the returned Kokkos View. 41*87497f52SBarry Smith 42*87497f52SBarry Smith Passing in a const View enables read-only access. 43*87497f52SBarry Smith 44*87497f52SBarry Smith One must return the View by a matching `VecRestoreKokkosView()` after finishing using the View. Currently, only two memory 4521bad809SJunchao Zhang spaces are supported: Kokkos::HostSpace and Kokkos::DefaultExecutionSpace::memory_space. 4621bad809SJunchao Zhang If needed, a memory copy will be internally called to copy the latest vector data to the specified memory space. 4721bad809SJunchao Zhang 4821bad809SJunchao Zhang Level: beginner 4921bad809SJunchao Zhang 50db781477SPatrick Sanan .seealso: `VecRestoreKokkosView()`, `VecRestoreArray()`, `VecGetKokkosViewWrite()`, `VecGetArrayRead()`, `VecGetArrays()`, `VecGetArrayF90()`, `VecGetArrayReadF90()`, `VecPlaceArray()`, `VecGetArray2d()`, 51db781477SPatrick Sanan `VecGetArrayPair()`, `VecRestoreArrayPair()`, `VecGetArrayWrite()`, `VecRestoreArrayWrite()` 5221bad809SJunchao Zhang @*/ 53152b3e56SJunchao Zhang template<class MemorySpace> PetscErrorCode VecGetKokkosView (Vec,Kokkos::View<const PetscScalar*,MemorySpace>*); 54152b3e56SJunchao Zhang template<class MemorySpace> PetscErrorCode VecGetKokkosView (Vec,Kokkos::View<PetscScalar*,MemorySpace>*); 5521bad809SJunchao Zhang 5621bad809SJunchao Zhang /*@C 57*87497f52SBarry Smith VecRestoreKokkosView - Returns a Kokkos View gotten by `VecGetKokkosView()`. 5821bad809SJunchao Zhang 5921bad809SJunchao Zhang Synopsis: 6021bad809SJunchao Zhang #include <petscvec_kokkos.hpp> 6121bad809SJunchao Zhang PetscErrorCode VecRestoreKokkosView (Vec v,Kokkos::View<const PetscScalar*,MemorySpace>* kv); 6221bad809SJunchao Zhang PetscErrorCode VecRestoreKokkosView (Vec v,Kokkos::View<PetscScalar*,MemorySpace>* kv); 6321bad809SJunchao Zhang 6421bad809SJunchao Zhang Logically Collective on Vec 6521bad809SJunchao Zhang 66f1a722f8SMatthew G. Knepley Input Parameters: 67*87497f52SBarry Smith + v - the vector in type of `VECKOKKOS` 6821bad809SJunchao Zhang - kv - the Kokkos View with a user-specified template parameter MemorySpace 6921bad809SJunchao Zhang 7021bad809SJunchao Zhang Notes: 71*87497f52SBarry Smith If the vector is not of type `VECKOKKOS`, an error will be raised. 72*87497f52SBarry Smith The functions are similar to `VecRestoreArrayRead()` and `VecRestoreArray()` respectively. They are the counterpart of `VecGetKokkosView()`. 7321bad809SJunchao Zhang 7421bad809SJunchao Zhang Level: beginner 7521bad809SJunchao Zhang 76db781477SPatrick Sanan .seealso: `VecGetKokkosView()`, `VecRestoreKokkosViewWrite()`, `VecRestoreArray()`, `VecGetArrayRead()`, `VecGetArrays()`, `VecGetArrayF90()`, `VecGetArrayReadF90()`, `VecPlaceArray()`, `VecGetArray2d()`, 77db781477SPatrick Sanan `VecGetArrayPair()`, `VecRestoreArrayPair()`, `VecGetArrayWrite()`, `VecRestoreArrayWrite()` 7821bad809SJunchao Zhang @*/ 7921bad809SJunchao Zhang template<class MemorySpace> PetscErrorCode VecRestoreKokkosView(Vec,Kokkos::View<const PetscScalar*,MemorySpace>*){return 0;} 80152b3e56SJunchao Zhang template<class MemorySpace> PetscErrorCode VecRestoreKokkosView(Vec,Kokkos::View<PetscScalar*,MemorySpace>*); 81152b3e56SJunchao Zhang 8221bad809SJunchao Zhang 8321bad809SJunchao Zhang /*@C 8421bad809SJunchao Zhang VecGetKokkosViewWrite - Returns a Kokkos View that contains the array of a vector in the specified memory space. 8521bad809SJunchao Zhang 8621bad809SJunchao Zhang Synopsis: 8721bad809SJunchao Zhang #include <petscvec_kokkos.hpp> 8821bad809SJunchao Zhang PetscErrorCode VecGetKokkosViewWrite (Vec v,Kokkos::View<PetscScalar*,MemorySpace>* kv); 8921bad809SJunchao Zhang 9021bad809SJunchao Zhang Logically Collective on Vec 9121bad809SJunchao Zhang 9221bad809SJunchao Zhang Input Parameter: 93*87497f52SBarry Smith . v - the vector in type of `VECKOKKOS` 9421bad809SJunchao Zhang 9521bad809SJunchao Zhang Output Parameter: 9621bad809SJunchao Zhang . kv - the Kokkos View with a user-specified template parameter MemorySpace 9721bad809SJunchao Zhang 9821bad809SJunchao Zhang Notes: 99*87497f52SBarry Smith If the vector is not of type `VECKOKKOS`, an error will be raised. 100*87497f52SBarry Smith 101*87497f52SBarry Smith The functions is similar to `VecGetArrayWrite()`. The returned view might contain garbage data or stale data and one is not 10221bad809SJunchao Zhang expected to read data from the View. Instead, one is expected to overwrite all data in the View. 103*87497f52SBarry Smith One must return the View by a matching `VecRestoreKokkosViewWrite()` after finishing using the View. 104*87497f52SBarry Smith 10521bad809SJunchao Zhang Currently, only two memory spaces are supported: Kokkos::HostSpace and Kokkos::DefaultExecutionSpace::memory_space. 10621bad809SJunchao Zhang 10721bad809SJunchao Zhang Level: beginner 10821bad809SJunchao Zhang 109db781477SPatrick Sanan .seealso: `VecRestoreKokkosViewWrite()`, `VecRestoreKokkosView()`, `VecGetKokkosView()`, `VecRestoreArray()`, `VecGetArrayRead()`, `VecGetArrays()`, `VecGetArrayF90()`, `VecGetArrayReadF90()`, `VecPlaceArray()`, `VecGetArray2d()`, 110db781477SPatrick Sanan `VecGetArrayPair()`, `VecRestoreArrayPair()`, `VecGetArrayWrite()`, `VecRestoreArrayWrite()` 11121bad809SJunchao Zhang @*/ 112152b3e56SJunchao Zhang template<class MemorySpace> PetscErrorCode VecGetKokkosViewWrite (Vec,Kokkos::View<PetscScalar*,MemorySpace>*); 11321bad809SJunchao Zhang 11421bad809SJunchao Zhang /*@C 115*87497f52SBarry Smith VecRestoreKokkosViewWrite - Returns a Kokkos View gotten with `VecGetKokkosViewWrite()`. 11621bad809SJunchao Zhang 11721bad809SJunchao Zhang Synopsis: 11821bad809SJunchao Zhang #include <petscvec_kokkos.hpp> 11921bad809SJunchao Zhang PetscErrorCode VecRestoreKokkosViewWrite (Vec v,Kokkos::View<PetscScalar*,MemorySpace>* kv); 12021bad809SJunchao Zhang 12121bad809SJunchao Zhang Logically Collective on Vec 12221bad809SJunchao Zhang 123f1a722f8SMatthew G. Knepley Input Parameters: 124*87497f52SBarry Smith + v - the vector in type of `VECKOKKOS` 12521bad809SJunchao Zhang - kv - the Kokkos View with a user-specified template parameter MemorySpace 12621bad809SJunchao Zhang 12721bad809SJunchao Zhang Notes: 128*87497f52SBarry Smith If the vector is not of type `VECKOKKOS`, an error will be raised. 129*87497f52SBarry Smith 130*87497f52SBarry Smith The function is similar to `VecRestoreArrayWrite()`. It is the counterpart of `VecGetKokkosViewWrite()`. 13121bad809SJunchao Zhang 13221bad809SJunchao Zhang Level: beginner 13321bad809SJunchao Zhang 134db781477SPatrick Sanan .seealso: `VecGetKokkosViewWrite()`, `VecGetKokkosView()`, `VecGetKokkosView()`, `VecRestoreArray()`, `VecGetArrayRead()`, `VecGetArrays()`, `VecGetArrayF90()`, `VecGetArrayReadF90()`, `VecPlaceArray()`, `VecGetArray2d()`, 135db781477SPatrick Sanan `VecGetArrayPair()`, `VecRestoreArrayPair()`, `VecGetArrayWrite()`, `VecRestoreArrayWrite()` 13621bad809SJunchao Zhang @*/ 137152b3e56SJunchao Zhang template<class MemorySpace> PetscErrorCode VecRestoreKokkosViewWrite(Vec,Kokkos::View<PetscScalar*,MemorySpace>*); 138152b3e56SJunchao Zhang 139a02b07edSJunchao Zhang #if defined(PETSC_HAVE_COMPLEX) && defined(PETSC_USE_COMPLEX) 140a02b07edSJunchao Zhang static_assert(std::alignment_of<Kokkos::complex<PetscReal>>::value == std::alignment_of<std::complex<PetscReal>>::value, 141a02b07edSJunchao Zhang "Alignment of Kokkos::complex<PetscReal> and std::complex<PetscReal> mismatch. Reconfigure your Kokkos with -DKOKKOS_ENABLE_COMPLEX_ALIGN=OFF, or let PETSc install Kokkos for you with --download-kokkos --download-kokkos-kernels"); 142a02b07edSJunchao Zhang #endif 143a02b07edSJunchao Zhang 144152b3e56SJunchao Zhang #endif 145152b3e56SJunchao Zhang 146152b3e56SJunchao Zhang #endif 147