NeoFOAM
WIP Prototype of a modern OpenFOAM core
Loading...
Searching...
No Matches
CPUExecutor.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> // IWYU pragma: keep
6
7namespace NeoFOAM
8{
9
18{
19public:
20
21 using exec = Kokkos::DefaultHostExecutionSpace;
22
25
26 template<typename T>
27 T* alloc(size_t size) const
28 {
29 return static_cast<T*>(Kokkos::kokkos_malloc<exec>("Field", size * sizeof(T)));
30 }
31
32 template<typename T>
33 T* realloc(void* ptr, size_t newSize) const
34 {
35 return static_cast<T*>(Kokkos::kokkos_realloc<exec>(ptr, newSize * sizeof(T)));
36 }
37
38 void* alloc(size_t size) const { return Kokkos::kokkos_malloc<exec>("Field", size); }
39
40 void* realloc(void* ptr, size_t newSize) const
41 {
42 return Kokkos::kokkos_realloc<exec>(ptr, newSize);
43 }
44
52 template<typename ValueType>
53 decltype(auto) createKokkosView(ValueType* ptr, size_t size) const
54 {
55 return Kokkos::View<ValueType*, Kokkos::HostSpace, Kokkos::MemoryUnmanaged>(ptr, size);
56 }
57
58 void free(void* ptr) const noexcept { Kokkos::kokkos_free<exec>(ptr); };
59
60 std::string name() const { return "CPUExecutor"; };
61};
62
63} // namespace NeoFOAM
Executor for handling multicore CPU based parallelization.
T * realloc(void *ptr, size_t newSize) const
void free(void *ptr) const noexcept
decltype(auto) createKokkosView(ValueType *ptr, size_t size) const
create a Kokkos view for a given ptr
std::string name() const
T * alloc(size_t size) const
void * alloc(size_t size) const
Kokkos::DefaultHostExecutionSpace exec
void * realloc(void *ptr, size_t newSize) const