NeoFOAM
WIP Prototype of a modern OpenFOAM core
Loading...
Searching...
No Matches
GPUExecutor.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// SPDX-FileCopyrightText: 2023 NeoFOAM authors
3#pragma once
4
5#include <Kokkos_Core.hpp>
6
7namespace NeoFOAM
8{
9
17{
18public:
19
20 using exec = Kokkos::DefaultExecutionSpace;
21
24
25 template<typename T>
26 T* alloc(size_t size) const
27 {
28 return static_cast<T*>(Kokkos::kokkos_malloc<exec>("Field", size * sizeof(T)));
29 }
30
31 template<typename T>
32 T* realloc(void* ptr, size_t newSize) const
33 {
34 return static_cast<T*>(Kokkos::kokkos_realloc<exec>(ptr, newSize * sizeof(T)));
35 }
36
44 template<typename ValueType>
45 decltype(auto) createKokkosView(ValueType* ptr, size_t size) const
46 {
47 return Kokkos::View<ValueType*, Kokkos::DefaultExecutionSpace, Kokkos::MemoryUnmanaged>(
48 ptr, size
49 );
50 }
51
52 void* alloc(size_t size) const { return Kokkos::kokkos_malloc<exec>("Field", size); }
53
54 void* realloc(void* ptr, size_t newSize) const
55 {
56 return Kokkos::kokkos_realloc<exec>(ptr, newSize);
57 }
58
59 void free(void* ptr) const noexcept { Kokkos::kokkos_free<exec>(ptr); }
60
61 std::string name() const { return "GPUExecutor"; };
62};
63
64} // namespace NeoFOAM
Executor for GPU offloading.
T * realloc(void *ptr, size_t newSize) const
Kokkos::DefaultExecutionSpace exec
void free(void *ptr) const noexcept
void * alloc(size_t size) const
void * realloc(void *ptr, size_t newSize) const
std::string name() const
decltype(auto) createKokkosView(ValueType *ptr, size_t size) const
create a Kokkos view for a given ptr
T * alloc(size_t size) const