Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::mesh::TicketIssuer< NgpMemSpace > Class Template Reference

Issues tickets for modifications in a given memory space. More...

#include <NgpModRequests.hpp>

Public Types

using host_space = Kokkos::HostSpace
using memory_space = NgpMemSpace
using execution_space = typename NgpMemSpace::execution_space
using ticket_id = size_t

Public Member Functions

Constructors / Destructors
 TicketIssuer ()=default
 Default constructor w/ delayed initialization. Call initialize(device_active) to set up.
 TicketIssuer (const TicketIssuer &)=default
TicketIssueroperator= (const TicketIssuer &)=default
 TicketIssuer (TicketIssuer &&)=default
TicketIssueroperator= (TicketIssuer &&)=default
 ~TicketIssuer ()=default
 TicketIssuer (bool activate_device)
 Construct a TicketIssuer with the specified initial active memory space.
void initialize (bool activate_device=true)
 Initialize a default-constructed TicketIssuer. Cannot be called on an already initialized TicketIssuer, will throw (in debug mode).
Control plane (HOST only)
void activate_host ()
 Sets the active memory space to host and synchronizes ticket state if needed. While active, calling claim or count from device will result in a throw.
void activate_device ()
 Sets the active memory space to device and synchronizes ticket state if needed. While active, calling claim or count from host will result in a throw.
void sync ()
 Synchronize ticket state between active and inactive memory spaces.
void reset ()
size_t finalize_count ()
 Finalize the count of issued tickets.
Data plane (HOST or DEVICE)
TicketRange claim (size_t n) const
 Claim N contiguous tickets atomically. Returns a TicketRange representing the claimed tickets. If you claim more tickets than are available, an exception is thrown (in debug mode).
size_t claim () const
 Claim a single ticket atomically. Returns the claimed ticket ID. If you claim more tickets than are available, an exception is thrown (in debug mode).
size_t count () const
 Get the current count of issued tickets atomically.

Detailed Description

template<typename NgpMemSpace>
class mundy::mesh::TicketIssuer< NgpMemSpace >
Note
This class uses dual-view-like semantics to manage ticket state. The NgpMemSpace is the device memory space but the host can also claim tickets when activated. Importantly, only one memory space can claim tickets at a time and changing the active space acts as a phase boundary that synchronizes ticket state between host and device.

Member Typedef Documentation

◆ host_space

template<typename NgpMemSpace>
using mundy::mesh::TicketIssuer< NgpMemSpace >::host_space = Kokkos::HostSpace

◆ memory_space

template<typename NgpMemSpace>
using mundy::mesh::TicketIssuer< NgpMemSpace >::memory_space = NgpMemSpace

◆ execution_space

template<typename NgpMemSpace>
using mundy::mesh::TicketIssuer< NgpMemSpace >::execution_space = typename NgpMemSpace::execution_space

◆ ticket_id

template<typename NgpMemSpace>
using mundy::mesh::TicketIssuer< NgpMemSpace >::ticket_id = size_t

Constructor & Destructor Documentation

◆ TicketIssuer() [1/4]

template<typename NgpMemSpace>
mundy::mesh::TicketIssuer< NgpMemSpace >::TicketIssuer ( )
default

◆ TicketIssuer() [2/4]

template<typename NgpMemSpace>
mundy::mesh::TicketIssuer< NgpMemSpace >::TicketIssuer ( const TicketIssuer< NgpMemSpace > & )
default

◆ TicketIssuer() [3/4]

template<typename NgpMemSpace>
mundy::mesh::TicketIssuer< NgpMemSpace >::TicketIssuer ( TicketIssuer< NgpMemSpace > && )
default

◆ ~TicketIssuer()

template<typename NgpMemSpace>
mundy::mesh::TicketIssuer< NgpMemSpace >::~TicketIssuer ( )
default

◆ TicketIssuer() [4/4]

template<typename NgpMemSpace>
mundy::mesh::TicketIssuer< NgpMemSpace >::TicketIssuer ( bool activate_device)
inline

Member Function Documentation

◆ operator=() [1/2]

template<typename NgpMemSpace>
TicketIssuer & mundy::mesh::TicketIssuer< NgpMemSpace >::operator= ( const TicketIssuer< NgpMemSpace > & )
default

◆ operator=() [2/2]

template<typename NgpMemSpace>
TicketIssuer & mundy::mesh::TicketIssuer< NgpMemSpace >::operator= ( TicketIssuer< NgpMemSpace > && )
default

◆ initialize()

template<typename NgpMemSpace>
void mundy::mesh::TicketIssuer< NgpMemSpace >::initialize ( bool activate_device = true)
inline

◆ activate_host()

template<typename NgpMemSpace>
void mundy::mesh::TicketIssuer< NgpMemSpace >::activate_host ( )
inline

◆ activate_device()

template<typename NgpMemSpace>
void mundy::mesh::TicketIssuer< NgpMemSpace >::activate_device ( )
inline

◆ sync()

template<typename NgpMemSpace>
void mundy::mesh::TicketIssuer< NgpMemSpace >::sync ( )
inline

◆ reset()

template<typename NgpMemSpace>
void mundy::mesh::TicketIssuer< NgpMemSpace >::reset ( )
inline

◆ finalize_count()

template<typename NgpMemSpace>
size_t mundy::mesh::TicketIssuer< NgpMemSpace >::finalize_count ( )
inline

◆ claim() [1/2]

template<typename NgpMemSpace>
TicketRange mundy::mesh::TicketIssuer< NgpMemSpace >::claim ( size_t n) const
inline

◆ claim() [2/2]

template<typename NgpMemSpace>
size_t mundy::mesh::TicketIssuer< NgpMemSpace >::claim ( ) const
inline

◆ count()

template<typename NgpMemSpace>
size_t mundy::mesh::TicketIssuer< NgpMemSpace >::count ( ) const
inline