alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
alpaka::onHost::cpu::Queue< T_Device > Struct Template Reference

#include <Queue.hpp>

Inheritance diagram for alpaka::onHost::cpu::Queue< T_Device >:

Public Member Functions

 Queue (internal::concepts::DeviceHandle auto device, uint32_t const idx, uint32_t numIdx, bool isBlocking)
 Queue (Queue &&)=delete
 Queue (Queue const &)=delete
 ~Queue ()
bool operator!= (Queue const &other) const
Queueoperator= (Queue &&)=delete
Queueoperator= (Queue const &)=delete
bool operator== (Queue const &other) const

Private Member Functions

void _ ()
template<alpaka::onHost::concepts::FrameSpec T_FrameSpec>
void enqueue (T_FrameSpec const &frameSpec, auto const &kernelBundle)
template<alpaka::onHost::concepts::ThreadSpec T_ThreadSpec>
void enqueue (T_ThreadSpec const &threadSpec, auto const &kernelBundle)
void enqueueHostFn (auto const &task)
 execute a task in the queue
void enqueueHostFnDeferred (auto const &task)
void enqueueNativeFn (auto const &fn)
auto getDevice () const
auto getDeviceKind () const
std::string getName () const
auto getNativeHandle () const noexcept
std::shared_ptr< QueuegetSharedPtr ()
bool isQueueEmpty () const
 Checks if the queue is empty.
template<typename T_Fn>
auto submit (T_Fn &&fn)
 Submit a task to the queue.

Private Attributes

Handle< T_Device > m_device
uint32_t m_idx = 0u
bool m_isBlocking {false}
std::atomic< bool > m_isBlockingTaskExecuted {false}
 Flag to show if a blocking tasks is executed.
std::mutex m_mutex
 Mutex to ensure sequential execution of tasks and operation if the queue is blocking.
uint32_t m_numaIdx = 0u
core::CallbackThread m_workerThread

Friends

struct alpaka::internal::GetApi
struct alpaka::internal::GetDeviceType
struct alpaka::internal::GetName
struct internal::AllocDeferred
struct internal::Enqueue
struct internal::GetNativeHandle
struct internal::IsQueueEmpty
struct internal::Memcpy
struct internal::MemcpyDeviceGlobal
struct internal::Memset
struct internal::Wait
struct internal::WaitFor
struct onHost::internal::GetDevice

Detailed Description

template<typename T_Device>
struct alpaka::onHost::cpu::Queue< T_Device >

Definition at line 36 of file Queue.hpp.

Constructor & Destructor Documentation

◆ Queue() [1/3]

template<typename T_Device>
alpaka::onHost::cpu::Queue< T_Device >::Queue ( internal::concepts::DeviceHandle auto device,
uint32_t const idx,
uint32_t numIdx,
bool isBlocking )
inline

Definition at line 39 of file Queue.hpp.

◆ ~Queue()

template<typename T_Device>
alpaka::onHost::cpu::Queue< T_Device >::~Queue ( )
inline

Definition at line 49 of file Queue.hpp.

◆ Queue() [2/3]

template<typename T_Device>
alpaka::onHost::cpu::Queue< T_Device >::Queue ( Queue< T_Device > const & )
delete

◆ Queue() [3/3]

template<typename T_Device>
alpaka::onHost::cpu::Queue< T_Device >::Queue ( Queue< T_Device > && )
delete

Member Function Documentation

◆ _()

template<typename T_Device>
void alpaka::onHost::cpu::Queue< T_Device >::_ ( )
inlineprivate

Definition at line 72 of file Queue.hpp.

◆ enqueue() [1/2]

template<typename T_Device>
template<alpaka::onHost::concepts::FrameSpec T_FrameSpec>
void alpaka::onHost::cpu::Queue< T_Device >::enqueue ( T_FrameSpec const & frameSpec,
auto const & kernelBundle )
inlineprivate

Definition at line 177 of file Queue.hpp.

◆ enqueue() [2/2]

template<typename T_Device>
template<alpaka::onHost::concepts::ThreadSpec T_ThreadSpec>
void alpaka::onHost::cpu::Queue< T_Device >::enqueue ( T_ThreadSpec const & threadSpec,
auto const & kernelBundle )
inlineprivate

Definition at line 151 of file Queue.hpp.

◆ enqueueHostFn()

template<typename T_Device>
void alpaka::onHost::cpu::Queue< T_Device >::enqueueHostFn ( auto const & task)
inlineprivate

execute a task in the queue

Attention
Do NOT enqueue a task which captures the queue internally to keep the queue alive as dependency. In this case the destructure of the queue is not called.

Definition at line 208 of file Queue.hpp.

◆ enqueueHostFnDeferred()

template<typename T_Device>
void alpaka::onHost::cpu::Queue< T_Device >::enqueueHostFnDeferred ( auto const & task)
inlineprivate

Definition at line 214 of file Queue.hpp.

◆ enqueueNativeFn()

template<typename T_Device>
void alpaka::onHost::cpu::Queue< T_Device >::enqueueNativeFn ( auto const & fn)
inlineprivate

Definition at line 220 of file Queue.hpp.

◆ getDevice()

template<typename T_Device>
auto alpaka::onHost::cpu::Queue< T_Device >::getDevice ( ) const
inlineprivate

Definition at line 233 of file Queue.hpp.

◆ getDeviceKind()

template<typename T_Device>
auto alpaka::onHost::cpu::Queue< T_Device >::getDeviceKind ( ) const
inlineprivate

Definition at line 228 of file Queue.hpp.

◆ getName()

template<typename T_Device>
std::string alpaka::onHost::cpu::Queue< T_Device >::getName ( ) const
inlineprivate

Definition at line 136 of file Queue.hpp.

◆ getNativeHandle()

template<typename T_Device>
auto alpaka::onHost::cpu::Queue< T_Device >::getNativeHandle ( ) const
inlinenodiscardprivatenoexcept

Definition at line 143 of file Queue.hpp.

◆ getSharedPtr()

template<typename T_Device>
std::shared_ptr< Queue > alpaka::onHost::cpu::Queue< T_Device >::getSharedPtr ( )
inlineprivate

Definition at line 238 of file Queue.hpp.

◆ isQueueEmpty()

template<typename T_Device>
bool alpaka::onHost::cpu::Queue< T_Device >::isQueueEmpty ( ) const
inlineprivate

Checks if the queue is empty.

If m_isBlocking is true, only tasks will be taken into account, events will be ignored they could not influence the usage of isQueueEmpty. if m_isBlocking is false, events will be taken into account because they are handled as normal tasks.

Returns
true if no tasks is executed else false

Definition at line 253 of file Queue.hpp.

◆ operator!=()

template<typename T_Device>
bool alpaka::onHost::cpu::Queue< T_Device >::operator!= ( Queue< T_Device > const & other) const
inline

Definition at line 66 of file Queue.hpp.

◆ operator=() [1/2]

template<typename T_Device>
Queue & alpaka::onHost::cpu::Queue< T_Device >::operator= ( Queue< T_Device > && )
delete

◆ operator=() [2/2]

template<typename T_Device>
Queue & alpaka::onHost::cpu::Queue< T_Device >::operator= ( Queue< T_Device > const & )
delete

◆ operator==()

template<typename T_Device>
bool alpaka::onHost::cpu::Queue< T_Device >::operator== ( Queue< T_Device > const & other) const
inline

Definition at line 61 of file Queue.hpp.

◆ submit()

template<typename T_Device>
template<typename T_Fn>
auto alpaka::onHost::cpu::Queue< T_Device >::submit ( T_Fn && fn)
inlineprivate

Submit a task to the queue.

Centralizes blocking / non-blocking behavior within the method to keep other code as easy as possible. For a blocking queue this method is NOT giving the control back to the caller until the operation is processed. All internal calls should use this method and not enqueue tasks directly in m_workerThread

Definition at line 104 of file Queue.hpp.

◆ alpaka::internal::GetApi

template<typename T_Device>
friend struct alpaka::internal::GetApi
friend

Definition at line 274 of file Queue.hpp.

◆ alpaka::internal::GetDeviceType

template<typename T_Device>
friend struct alpaka::internal::GetDeviceType
friend

Definition at line 226 of file Queue.hpp.

◆ alpaka::internal::GetName

template<typename T_Device>
friend struct alpaka::internal::GetName
friend

Definition at line 134 of file Queue.hpp.

◆ internal::AllocDeferred

template<typename T_Device>
friend struct internal::AllocDeferred
friend

Definition at line 275 of file Queue.hpp.

◆ internal::Enqueue

template<typename T_Device>
friend struct internal::Enqueue
friend

Definition at line 148 of file Queue.hpp.

◆ internal::GetNativeHandle

template<typename T_Device>
friend struct internal::GetNativeHandle
friend

Definition at line 141 of file Queue.hpp.

◆ internal::IsQueueEmpty

template<typename T_Device>
friend struct internal::IsQueueEmpty
friend

Definition at line 243 of file Queue.hpp.

◆ internal::Memcpy

template<typename T_Device>
friend struct internal::Memcpy
friend

Definition at line 271 of file Queue.hpp.

◆ internal::MemcpyDeviceGlobal

template<typename T_Device>
friend struct internal::MemcpyDeviceGlobal
friend

Definition at line 272 of file Queue.hpp.

◆ internal::Memset

template<typename T_Device>
friend struct internal::Memset
friend

Definition at line 273 of file Queue.hpp.

◆ internal::Wait

template<typename T_Device>
friend struct internal::Wait
friend

Definition at line 269 of file Queue.hpp.

◆ internal::WaitFor

template<typename T_Device>
friend struct internal::WaitFor
friend

Definition at line 270 of file Queue.hpp.

◆ onHost::internal::GetDevice

template<typename T_Device>
friend struct onHost::internal::GetDevice
friend

Definition at line 267 of file Queue.hpp.

Member Data Documentation

◆ m_device

template<typename T_Device>
Handle<T_Device> alpaka::onHost::cpu::Queue< T_Device >::m_device
private

Definition at line 77 of file Queue.hpp.

◆ m_idx

template<typename T_Device>
uint32_t alpaka::onHost::cpu::Queue< T_Device >::m_idx = 0u
private

Definition at line 78 of file Queue.hpp.

◆ m_isBlocking

template<typename T_Device>
bool alpaka::onHost::cpu::Queue< T_Device >::m_isBlocking {false}
private

Definition at line 81 of file Queue.hpp.

◆ m_isBlockingTaskExecuted

template<typename T_Device>
std::atomic<bool> alpaka::onHost::cpu::Queue< T_Device >::m_isBlockingTaskExecuted {false}
private

Flag to show if a blocking tasks is executed.

This variable is only used if m_isBlocking == true.

state: If true a thread is executing a blocking tasks, else false.

Definition at line 88 of file Queue.hpp.

◆ m_mutex

template<typename T_Device>
std::mutex alpaka::onHost::cpu::Queue< T_Device >::m_mutex
private

Mutex to ensure sequential execution of tasks and operation if the queue is blocking.

For non-blocking queue m_workerThread is taking care of the execution order

Definition at line 94 of file Queue.hpp.

◆ m_numaIdx

template<typename T_Device>
uint32_t alpaka::onHost::cpu::Queue< T_Device >::m_numaIdx = 0u
private

Definition at line 79 of file Queue.hpp.

◆ m_workerThread

template<typename T_Device>
core::CallbackThread alpaka::onHost::cpu::Queue< T_Device >::m_workerThread
private

Definition at line 80 of file Queue.hpp.


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