DPC++ Runtime
Runtime libraries for oneAPI DPC++
sycl::_V1::detail::event_impl Class Reference

#include <detail/event_impl.hpp>

Collaboration diagram for sycl::_V1::detail::event_impl:

Public Types

enum  HostEventState : int { HES_NotComplete = 0, HES_Complete, HES_Discarded }
 

Public Member Functions

 event_impl (std::optional< HostEventState > State=HES_Complete)
 Constructs a ready SYCL event. More...
 
 event_impl (RT::PiEvent Event, const context &SyclContext)
 Constructs an event instance from a plug-in event handle. More...
 
 event_impl (const QueueImplPtr &Queue)
 
bool is_host ()
 Checks if this event is a SYCL host event. More...
 
void wait (std::shared_ptr< sycl::detail::event_impl > Self)
 Waits for the event. More...
 
void wait_and_throw (std::shared_ptr< sycl::detail::event_impl > Self)
 Waits for the event. More...
 
template<typename Param >
Param::return_type get_profiling_info ()
 Queries this event for profiling information. More...
 
template<typename Param >
Param::return_type get_info ()
 Queries this SYCL event for information. More...
 
 ~event_impl ()
 
void waitInternal ()
 Waits for the event with respect to device type. More...
 
void setComplete ()
 Marks this event as completed. More...
 
RT::PiEvent & getHandleRef ()
 Returns raw interoperability event handle. More...
 
const RT::PiEvent & getHandleRef () const
 Returns raw interoperability event handle. More...
 
const ContextImplPtrgetContextImpl ()
 Returns context that is associated with this event. More...
 
const plugingetPlugin ()
 
void setContextImpl (const ContextImplPtr &Context)
 Associate event with the context. More...
 
void setStateIncomplete ()
 Clear the event state. More...
 
void * getCommand ()
 Returns command that is associated with the event. More...
 
void setCommand (void *Command)
 Associates this event with the command. More...
 
HostProfilingInfogetHostProfilingInfo ()
 Returns host profiling information. More...
 
pi_native_handle getNative ()
 Gets the native handle of the SYCL event. More...
 
std::vector< std::shared_ptr< event_impl > > & getPreparedDepsEvents ()
 Returns vector of event dependencies. More...
 
std::vector< std::shared_ptr< event_impl > > & getPreparedHostDepsEvents ()
 Returns vector of host event dependencies. More...
 
std::vector< EventImplPtrgetWaitList ()
 Returns vector of event_impl that this event_impl depends on. More...
 
void flushIfNeeded (const QueueImplPtr &UserQueue)
 Performs a flush on the queue associated with this event if the user queue is different and the task associated with this event hasn't been submitted to the device yet. More...
 
void cleanupDependencyEvents ()
 Cleans dependencies of this event_impl. More...
 
void cleanDepEventsThroughOneLevel ()
 Cleans dependencies of this event's dependencies. More...
 
bool isDiscarded () const
 Checks if this event is discarded by SYCL implementation. More...
 
QueueImplPtr getWorkerQueue ()
 Returns worker queue for command. More...
 
void setWorkerQueue (const QueueImplPtr &WorkerQueue)
 Sets worker queue for command. More...
 
void setSubmittedQueue (const QueueImplPtr &SubmittedQueue)
 Sets original queue used for submission. More...
 
void setSubmissionTime ()
 Calling this function queries the current device timestamp and sets it as submission time for the command associated with this event. More...
 
uint64_t getSubmissionTime ()
 
QueueImplPtr getSubmittedQueue () const
 
bool isInitialized () const noexcept
 Checks if an event is in a fully intialized state. More...
 
bool isCompleted ()
 Checks if this event is complete. More...
 
void attachEventToComplete (const EventImplPtr &Event)
 
bool isContextInitialized () const noexcept
 

Protected Member Functions

void * instrumentationProlog (std::string &Name, int32_t StreamID, uint64_t &instance_id) const
 
void instrumentationEpilog (void *TelementryEvent, const std::string &Name, int32_t StreamID, uint64_t IId) const
 
void checkProfilingPreconditions () const
 
void ensureContextInitialized ()
 

Protected Attributes

bool MIsInitialized = true
 
bool MIsContextInitialized = false
 
RT::PiEvent MEvent = nullptr
 
uint64_t MSubmitTime = 0
 
ContextImplPtr MContext
 
bool MHostEvent = true
 
std::unique_ptr< HostProfilingInfoMHostProfilingInfo
 
void * MCommand = nullptr
 
std::weak_ptr< queue_implMQueue
 
const bool MIsProfilingEnabled = false
 
std::weak_ptr< queue_implMWorkerQueue
 
std::weak_ptr< queue_implMSubmittedQueue
 
std::vector< EventImplPtrMPreparedDepsEvents
 Dependency events prepared for waiting by backend. More...
 
std::vector< EventImplPtrMPreparedHostDepsEvents
 
std::vector< EventImplPtrMPostCompleteEvents
 
std::atomic< bool > MIsFlushed = false
 Indicates that the task associated with this event has been submitted by the queue to the device. More...
 
std::atomic< int > MState
 
std::mutex MMutex
 
std::condition_variable cv
 

Friends

std::vector< RT::PiEvent > getOrWaitEvents (std::vector< sycl::event > DepEvents, std::shared_ptr< sycl::detail::context_impl > Context)
 

Detailed Description

Definition at line 36 of file event_impl.hpp.

Member Enumeration Documentation

◆ HostEventState

Enumerator
HES_NotComplete 
HES_Complete 
HES_Discarded 

Definition at line 38 of file event_impl.hpp.

Constructor & Destructor Documentation

◆ event_impl() [1/3]

sycl::_V1::detail::event_impl::event_impl ( std::optional< HostEventState State = HES_Complete)
inline

Constructs a ready SYCL event.

If the constructed SYCL event is waited on it will complete immediately. Normally constructs a host event, use std::nullopt to instead instantiate a device event.

Definition at line 49 of file event_impl.hpp.

◆ event_impl() [2/3]

sycl::_V1::detail::event_impl::event_impl ( RT::PiEvent  Event,
const context SyclContext 
)

Constructs an event instance from a plug-in event handle.

The SyclContext must match the plug-in context associated with the ClEvent.

Parameters
Eventis a valid instance of plug-in event.
SyclContextis an instance of SYCL context.

Definition at line 124 of file event_impl.cpp.

References sycl::_V1::detail::plugin::call(), getPlugin(), MContext, MEvent, PI_EVENT_INFO_CONTEXT, and piEventGetInfo().

◆ event_impl() [3/3]

sycl::_V1::detail::event_impl::event_impl ( const QueueImplPtr Queue)

Definition at line 148 of file event_impl.cpp.

◆ ~event_impl()

sycl::_V1::detail::event_impl::~event_impl ( )

Member Function Documentation

◆ attachEventToComplete()

void sycl::_V1::detail::event_impl::attachEventToComplete ( const EventImplPtr Event)
inline

Definition at line 247 of file event_impl.hpp.

◆ checkProfilingPreconditions()

void sycl::_V1::detail::event_impl::checkProfilingPreconditions ( ) const
protected

Definition at line 248 of file event_impl.cpp.

References sycl::_V1::make_error_code(), MIsProfilingEnabled, and MQueue.

◆ cleanDepEventsThroughOneLevel()

void sycl::_V1::detail::event_impl::cleanDepEventsThroughOneLevel ( )

Cleans dependencies of this event's dependencies.

Definition at line 408 of file event_impl.cpp.

References MMutex, MPreparedDepsEvents, and MPreparedHostDepsEvents.

◆ cleanupDependencyEvents()

void sycl::_V1::detail::event_impl::cleanupDependencyEvents ( )

Cleans dependencies of this event_impl.

Definition at line 402 of file event_impl.cpp.

References MMutex, MPreparedDepsEvents, and MPreparedHostDepsEvents.

◆ ensureContextInitialized()

void sycl::_V1::detail::event_impl::ensureContextInitialized ( )
protected

Definition at line 36 of file event_impl.cpp.

References sycl::_V1::detail::getSyclObjImpl().

Referenced by getNative().

◆ flushIfNeeded()

void sycl::_V1::detail::event_impl::flushIfNeeded ( const QueueImplPtr UserQueue)

Performs a flush on the queue associated with this event if the user queue is different and the task associated with this event hasn't been submitted to the device yet.

Definition at line 375 of file event_impl.cpp.

References sycl::_V1::detail::plugin::call(), getPlugin(), MEvent, MIsFlushed, MQueue, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS, PI_EVENT_QUEUED, piEventGetInfo(), and piQueueFlush().

◆ get_info()

template<typename Param >
Param::return_type sycl::_V1::detail::event_impl::get_info ( )

Queries this SYCL event for information.

Returns
depends on the information being requested.

◆ get_profiling_info()

template<typename Param >
Param::return_type sycl::_V1::detail::event_impl::get_profiling_info ( )

Queries this event for profiling information.

If the requested info is not available when this member function is called due to incompletion of command groups associated with the event, then the call to this member function will block until the requested info is available. If the queue which submitted the command group this event is associated with was not constructed with the property::queue::enable_profiling property, an invalid_object_error SYCL exception is thrown.

Returns
depends on template parameter.

◆ getCommand()

void* sycl::_V1::detail::event_impl::getCommand ( )
inline

Returns command that is associated with the event.

Scheduler mutex must be locked in read mode when this is called.

Returns
a generic pointer to Command object instance.

Definition at line 150 of file event_impl.hpp.

◆ getContextImpl()

const ContextImplPtr & sycl::_V1::detail::event_impl::getContextImpl ( )

Returns context that is associated with this event.

Returns
a shared pointer to a valid context_impl.

Definition at line 106 of file event_impl.cpp.

◆ getHandleRef() [1/2]

RT::PiEvent & sycl::_V1::detail::event_impl::getHandleRef ( )

Returns raw interoperability event handle.

Returned reference will be] invalid if event_impl was destroyed.

Returns
a reference to an instance of plug-in event handle.

Definition at line 103 of file event_impl.cpp.

Referenced by getNative().

◆ getHandleRef() [2/2]

const RT::PiEvent& sycl::_V1::detail::event_impl::getHandleRef ( ) const

Returns raw interoperability event handle.

Returned reference will be] invalid if event_impl was destroyed.

Returns
a const reference to an instance of plug-in event handle.

◆ getHostProfilingInfo()

HostProfilingInfo* sycl::_V1::detail::event_impl::getHostProfilingInfo ( )
inline

Returns host profiling information.

Returns
a pointer to HostProfilingInfo instance.

Definition at line 162 of file event_impl.hpp.

◆ getNative()

pi_native_handle sycl::_V1::detail::event_impl::getNative ( )

Gets the native handle of the SYCL event.

Returns
a native handle.

Definition at line 341 of file event_impl.cpp.

References ensureContextInitialized(), getHandleRef(), getPlugin(), MContext, MEvent, MIsInitialized, sycl::_V1::opencl, piEventCreate, piEventRetain(), and piextEventGetNativeHandle().

◆ getPlugin()

const plugin & sycl::_V1::detail::event_impl::getPlugin ( )
Returns
the Plugin associated with the context of this event. Should be called when this is not a Host Event.

Definition at line 111 of file event_impl.cpp.

Referenced by event_impl(), flushIfNeeded(), and getNative().

◆ getPreparedDepsEvents()

std::vector<std::shared_ptr<event_impl> >& sycl::_V1::detail::event_impl::getPreparedDepsEvents ( )
inline

Returns vector of event dependencies.

Returns
a reference to MPreparedDepsEvents.

Definition at line 172 of file event_impl.hpp.

◆ getPreparedHostDepsEvents()

std::vector<std::shared_ptr<event_impl> >& sycl::_V1::detail::event_impl::getPreparedHostDepsEvents ( )
inline

Returns vector of host event dependencies.

Returns
a reference to MPreparedHostDepsEvents.

Definition at line 179 of file event_impl.hpp.

◆ getSubmissionTime()

uint64_t sycl::_V1::detail::event_impl::getSubmissionTime ( )
Returns
Submission time for command associated with this event

Definition at line 432 of file event_impl.cpp.

References MSubmitTime.

◆ getSubmittedQueue()

QueueImplPtr sycl::_V1::detail::event_impl::getSubmittedQueue ( ) const
inline

Definition at line 231 of file event_impl.hpp.

◆ getWaitList()

std::vector< EventImplPtr > sycl::_V1::detail::event_impl::getWaitList ( )

Returns vector of event_impl that this event_impl depends on.

Returns
a vector of "immediate" dependencies for this event_impl.

Definition at line 357 of file event_impl.cpp.

References HES_Discarded, sycl::_V1::invalid, sycl::_V1::make_error_code(), MMutex, MPreparedDepsEvents, MPreparedHostDepsEvents, and MState.

◆ getWorkerQueue()

QueueImplPtr sycl::_V1::detail::event_impl::getWorkerQueue ( )
inline

Returns worker queue for command.

Returns
shared_ptr to MWorkerQueue, please be aware it can be empty pointer

Definition at line 208 of file event_impl.hpp.

◆ instrumentationEpilog()

void sycl::_V1::detail::event_impl::instrumentationEpilog ( void *  TelementryEvent,
const std::string &  Name,
int32_t  StreamID,
uint64_t  IId 
) const
protected

Definition at line 201 of file event_impl.cpp.

Referenced by wait().

◆ instrumentationProlog()

void * sycl::_V1::detail::event_impl::instrumentationProlog ( std::string &  Name,
int32_t  StreamID,
uint64_t &  instance_id 
) const
protected

Definition at line 166 of file event_impl.cpp.

References MCommand, MEvent, and sycl::_V1::detail::Command::MTraceEvent.

Referenced by wait().

◆ is_host()

bool sycl::_V1::detail::event_impl::is_host ( )

Checks if this event is a SYCL host event.

All devices that do not support OpenCL interoperability are treated as host device to avoid attempts to call method get on such events.

Returns
true if this event is a SYCL host event.

Definition at line 50 of file event_impl.cpp.

◆ isCompleted()

bool sycl::_V1::detail::event_impl::isCompleted ( )

Checks if this event is complete.

Returns
true if this event is complete.

Definition at line 434 of file event_impl.cpp.

References sycl::_V1::info::complete.

◆ isContextInitialized()

bool sycl::_V1::detail::event_impl::isContextInitialized ( ) const
inlinenoexcept

Definition at line 252 of file event_impl.hpp.

◆ isDiscarded()

bool sycl::_V1::detail::event_impl::isDiscarded ( ) const
inline

Checks if this event is discarded by SYCL implementation.

Returns
true if this event is discarded.

Definition at line 202 of file event_impl.hpp.

◆ isInitialized()

bool sycl::_V1::detail::event_impl::isInitialized ( ) const
inlinenoexcept

Checks if an event is in a fully intialized state.

Default-constructed events will return true only after having initialized its native event, while other events will assume that they are fully initialized at construction, relying on external sources to supply member data.

Returns
true if the event is considered to be in a fully initialized state.

Definition at line 240 of file event_impl.hpp.

◆ setCommand()

void sycl::_V1::detail::event_impl::setCommand ( void *  Command)
inline

Associates this event with the command.

Scheduler mutex must be locked in write mode when this is called.

Parameters
Commandis a generic pointer to Command object instance.

Definition at line 157 of file event_impl.hpp.

◆ setComplete()

void sycl::_V1::detail::event_impl::setComplete ( )

Marks this event as completed.

Definition at line 81 of file event_impl.cpp.

◆ setContextImpl()

void sycl::_V1::detail::event_impl::setContextImpl ( const ContextImplPtr Context)

Associate event with the context.

Provided PiContext inside ContextImplPtr must be associated with the PiEvent object stored in this class

Parameters
Contextis a shared pointer to an instance of valid context_impl.

Definition at line 118 of file event_impl.cpp.

◆ setStateIncomplete()

void sycl::_V1::detail::event_impl::setStateIncomplete ( )

Clear the event state.

Definition at line 116 of file event_impl.cpp.

◆ setSubmissionTime()

void sycl::_V1::detail::event_impl::setSubmissionTime ( )

Calling this function queries the current device timestamp and sets it as submission time for the command associated with this event.

Definition at line 418 of file event_impl.cpp.

References sycl::_V1::feature_not_supported, sycl::_V1::make_error_code(), MIsProfilingEnabled, MQueue, MSubmitTime, and sycl::_V1::profiling.

◆ setSubmittedQueue()

void sycl::_V1::detail::event_impl::setSubmittedQueue ( const QueueImplPtr SubmittedQueue)
inline

Sets original queue used for submission.

Returns

Definition at line 220 of file event_impl.hpp.

◆ setWorkerQueue()

void sycl::_V1::detail::event_impl::setWorkerQueue ( const QueueImplPtr WorkerQueue)
inline

Sets worker queue for command.

Returns

Definition at line 213 of file event_impl.hpp.

◆ wait()

void sycl::_V1::detail::event_impl::wait ( std::shared_ptr< sycl::detail::event_impl >  Self)

◆ wait_and_throw()

void sycl::_V1::detail::event_impl::wait_and_throw ( std::shared_ptr< sycl::detail::event_impl >  Self)

Waits for the event.

If any uncaught asynchronous errors occurred on the context that the event is waiting on executions from, then call that context's asynchronous error handler with those errors. Self is needed in order to pass shared_ptr to Scheduler.

Parameters
Selfis a pointer to this event.

Definition at line 240 of file event_impl.cpp.

References MSubmittedQueue, and wait().

◆ waitInternal()

void sycl::_V1::detail::event_impl::waitInternal ( )

Waits for the event with respect to device type.

Definition at line 61 of file event_impl.cpp.

References sycl::_V1::detail::plugin::call(), sycl::_V1::detail::pi::getPlugin(), sycl::_V1::make_error_code(), and piEventsWait().

Referenced by wait().

Friends And Related Function Documentation

◆ getOrWaitEvents

std::vector<RT::PiEvent> getOrWaitEvents ( std::vector< sycl::event >  DepEvents,
std::shared_ptr< sycl::detail::context_impl >  Context 
)
friend

Member Data Documentation

◆ cv

std::condition_variable sycl::_V1::detail::event_impl::cv
protected

Definition at line 297 of file event_impl.hpp.

◆ MCommand

void* sycl::_V1::detail::event_impl::MCommand = nullptr
protected

Definition at line 274 of file event_impl.hpp.

Referenced by instrumentationProlog(), and wait().

◆ MContext

ContextImplPtr sycl::_V1::detail::event_impl::MContext
protected

Definition at line 271 of file event_impl.hpp.

Referenced by event_impl(), and getNative().

◆ MEvent

RT::PiEvent sycl::_V1::detail::event_impl::MEvent = nullptr
protected

Definition at line 268 of file event_impl.hpp.

Referenced by event_impl(), flushIfNeeded(), getNative(), instrumentationProlog(), and wait().

◆ MHostEvent

bool sycl::_V1::detail::event_impl::MHostEvent = true
protected

Definition at line 272 of file event_impl.hpp.

◆ MHostProfilingInfo

std::unique_ptr<HostProfilingInfo> sycl::_V1::detail::event_impl::MHostProfilingInfo
protected

Definition at line 273 of file event_impl.hpp.

◆ MIsContextInitialized

bool sycl::_V1::detail::event_impl::MIsContextInitialized = false
protected

Definition at line 267 of file event_impl.hpp.

◆ MIsFlushed

std::atomic<bool> sycl::_V1::detail::event_impl::MIsFlushed = false
protected

Indicates that the task associated with this event has been submitted by the queue to the device.

Definition at line 289 of file event_impl.hpp.

Referenced by flushIfNeeded().

◆ MIsInitialized

bool sycl::_V1::detail::event_impl::MIsInitialized = true
protected

Definition at line 266 of file event_impl.hpp.

Referenced by getNative().

◆ MIsProfilingEnabled

const bool sycl::_V1::detail::event_impl::MIsProfilingEnabled = false
protected

Definition at line 276 of file event_impl.hpp.

Referenced by checkProfilingPreconditions(), and setSubmissionTime().

◆ MMutex

std::mutex sycl::_V1::detail::event_impl::MMutex
protected

◆ MPostCompleteEvents

std::vector<EventImplPtr> sycl::_V1::detail::event_impl::MPostCompleteEvents
protected

Definition at line 285 of file event_impl.hpp.

◆ MPreparedDepsEvents

std::vector<EventImplPtr> sycl::_V1::detail::event_impl::MPreparedDepsEvents
protected

Dependency events prepared for waiting by backend.

Definition at line 282 of file event_impl.hpp.

Referenced by cleanDepEventsThroughOneLevel(), cleanupDependencyEvents(), and getWaitList().

◆ MPreparedHostDepsEvents

std::vector<EventImplPtr> sycl::_V1::detail::event_impl::MPreparedHostDepsEvents
protected

◆ MQueue

std::weak_ptr<queue_impl> sycl::_V1::detail::event_impl::MQueue
protected

Definition at line 275 of file event_impl.hpp.

Referenced by checkProfilingPreconditions(), flushIfNeeded(), and setSubmissionTime().

◆ MState

std::atomic<int> sycl::_V1::detail::event_impl::MState
protected

Definition at line 294 of file event_impl.hpp.

Referenced by getWaitList(), and wait().

◆ MSubmittedQueue

std::weak_ptr<queue_impl> sycl::_V1::detail::event_impl::MSubmittedQueue
protected

Definition at line 279 of file event_impl.hpp.

Referenced by wait_and_throw().

◆ MSubmitTime

uint64_t sycl::_V1::detail::event_impl::MSubmitTime = 0
protected

Definition at line 270 of file event_impl.hpp.

Referenced by getSubmissionTime(), and setSubmissionTime().

◆ MWorkerQueue

std::weak_ptr<queue_impl> sycl::_V1::detail::event_impl::MWorkerQueue
protected

Definition at line 278 of file event_impl.hpp.


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