https://mooseframework.inl.gov
Public Member Functions | Private Attributes | List of all members
Moose::Kokkos::FunctorWrapperHost< Object > Class Template Reference

Host functor wrapper class that allocates a functor on device and creates its device wrapper. More...

#include <KokkosFunctorWrapper.h>

Inheritance diagram for Moose::Kokkos::FunctorWrapperHost< Object >:
[legend]

Public Member Functions

 FunctorWrapperHost (const void *functor)
 Constructor. More...
 
 ~FunctorWrapperHost ()
 Desturctor. More...
 
FunctorWrapperDeviceBaseallocate () override final
 Allocate device functor and wrapper. More...
 
void copyFunctor () override final
 Copy functor to device. More...
 
void freeFunctor () override final
 Free host and device copies of functor. More...
 

Private Attributes

const Object & _functor_host
 Reference of the functor on host. More...
 
std::unique_ptr< Object > _functor_copy
 Copy of the functor on host. More...
 
Object * _functor_device = nullptr
 Copy of the functor on device. More...
 

Detailed Description

template<typename Object>
class Moose::Kokkos::FunctorWrapperHost< Object >

Host functor wrapper class that allocates a functor on device and creates its device wrapper.

This class holds the actual device instance of the functor and manages its allocation and deallocation, and the device wrapper simply keeps a pointer to it.

Template Parameters
ObjectThe functor class type

Definition at line 20 of file KokkosFunctorWrapper.h.

Constructor & Destructor Documentation

◆ FunctorWrapperHost()

template<typename Object >
Moose::Kokkos::FunctorWrapperHost< Object >::FunctorWrapperHost ( const void functor)
inline

Constructor.

Parameters
functorPointer to the functor

Definition at line 102 of file KokkosFunctorWrapper.h.

102 : _functor_host(*static_cast<const Object *>(functor)) {}
const Object & _functor_host
Reference of the functor on host.

◆ ~FunctorWrapperHost()

template<typename Object >
Moose::Kokkos::FunctorWrapperHost< Object >::~FunctorWrapperHost ( )

Desturctor.

Definition at line 170 of file KokkosFunctorWrapper.h.

171 {
172  ::Kokkos::kokkos_free<ExecSpace::memory_space>(_functor_device);
173 }
Object * _functor_device
Copy of the functor on device.

Member Function Documentation

◆ allocate()

template<typename Object >
FunctorWrapperDeviceBase * Moose::Kokkos::FunctorWrapperHost< Object >::allocate ( )
finaloverridevirtual

Allocate device functor and wrapper.

Returns
The pointer to the device wrapper

Implements Moose::Kokkos::FunctorWrapperHostBase.

Definition at line 129 of file KokkosFunctorWrapper.h.

130 {
131  // Allocate storage for device wrapper on device
132  auto wrapper_device = static_cast<FunctorWrapperDevice<Object> *>(
133  ::Kokkos::kokkos_malloc<ExecSpace::memory_space>(sizeof(FunctorWrapperDevice<Object>)));
134 
135  // Allocate device wrapper on device using placement new to populate vtable with device pointers
136  ::Kokkos::parallel_for(
137  1, KOKKOS_LAMBDA(const int) { new (wrapper_device) FunctorWrapperDevice<Object>(); });
138 
139  // Allocate storage for functor on device
141  static_cast<Object *>(::Kokkos::kokkos_malloc<ExecSpace::memory_space>(sizeof(Object)));
142 
143  // Let device wrapper point to the copy
144  ::Kokkos::Impl::DeepCopy<MemSpace, ::Kokkos::HostSpace>(
145  &(wrapper_device->_functor), &_functor_device, sizeof(Object *));
146 
147  return wrapper_device;
148 }
Object * _functor_device
Copy of the functor on device.

◆ copyFunctor()

template<typename Object >
void Moose::Kokkos::FunctorWrapperHost< Object >::copyFunctor ( )
finaloverridevirtual

Copy functor to device.

Implements Moose::Kokkos::FunctorWrapperHostBase.

Definition at line 152 of file KokkosFunctorWrapper.h.

153 {
154  // Make a copy of functor on host to trigger copy constructor
155  _functor_copy = std::make_unique<Object>(_functor_host);
156 
157  // Copy functor to device
158  ::Kokkos::Impl::DeepCopy<MemSpace, ::Kokkos::HostSpace>(
159  _functor_device, _functor_copy.get(), sizeof(Object));
160 }
Object * _functor_device
Copy of the functor on device.
std::unique_ptr< Object > _functor_copy
Copy of the functor on host.
const Object & _functor_host
Reference of the functor on host.

◆ freeFunctor()

template<typename Object >
void Moose::Kokkos::FunctorWrapperHost< Object >::freeFunctor ( )
finaloverridevirtual

Free host and device copies of functor.

Implements Moose::Kokkos::FunctorWrapperHostBase.

Definition at line 164 of file KokkosFunctorWrapper.h.

165 {
166  _functor_copy.reset();
167 }
std::unique_ptr< Object > _functor_copy
Copy of the functor on host.

Member Data Documentation

◆ _functor_copy

template<typename Object >
std::unique_ptr<Object> Moose::Kokkos::FunctorWrapperHost< Object >::_functor_copy
private

◆ _functor_device

template<typename Object >
Object* Moose::Kokkos::FunctorWrapperHost< Object >::_functor_device = nullptr
private

◆ _functor_host

template<typename Object >
const Object& Moose::Kokkos::FunctorWrapperHost< Object >::_functor_host
private

Reference of the functor on host.

Definition at line 116 of file KokkosFunctorWrapper.h.

Referenced by Moose::Kokkos::FunctorWrapperHost< Object >::copyFunctor().


The documentation for this class was generated from the following file: