The KernelFusionCommand is placed in the execution graph together with the individual kernels of the fusion list to control kernel fusion. More...
#include <detail/scheduler/commands.hpp>
Public Types | |
enum class | FusionStatus { ACTIVE , CANCELLED , COMPLETE , DELETED } |
![]() | |
enum | CommandType { RUN_CG , COPY_MEMORY , ALLOCA , ALLOCA_SUB_BUF , RELEASE , MAP_MEM_OBJ , UNMAP_MEM_OBJ , UPDATE_REQUIREMENT , EMPTY_TASK , HOST_TASK , FUSION , EXEC_CMD_BUFFER , UPDATE_CMD_BUFFER } |
enum class | BlockReason : int { HostAccessor = 0 , HostTask } |
Public Member Functions | |
KernelFusionCommand (QueueImplPtr Queue) | |
void | printDot (std::ostream &Stream) const final |
void | emitInstrumentationData () final |
Instrumentation method which emits telemetry data. More... | |
bool | producesPiEvent () const final |
Returns true iff the command produces a UR event on non-host devices. More... | |
std::vector< Command * > & | auxiliaryCommands () |
void | addToFusionList (ExecCGCommand *Kernel) |
std::vector< ExecCGCommand * > & | getFusionList () |
void | setFusionStatus (FusionStatus Status) |
Set the status of this fusion command to Status . More... | |
void | resetQueue () |
Reset the queue. More... | |
bool | isActive () const |
bool | readyForDeletion () const |
![]() | |
Command (CommandType Type, QueueImplPtr Queue, ur_exp_command_buffer_handle_t CommandBuffer=nullptr, const std::vector< ur_exp_command_buffer_sync_point_t > &SyncPoints={}) | |
It is safe to bind MPreparedDepsEvents and MPreparedHostDepsEvents references to event_impl class members because Command should not outlive the event connected to it. More... | |
Command * | addDep (DepDesc NewDep, std::vector< Command * > &ToCleanUp) |
Command * | addDep (EventImplPtr Event, std::vector< Command * > &ToCleanUp) |
void | addUser (Command *NewUser) |
CommandType | getType () const |
virtual bool | enqueue (EnqueueResultT &EnqueueResult, BlockingT Blocking, std::vector< Command * > &ToCleanUp) |
Checks if the command is enqueued, and calls enqueueImp. More... | |
bool | isFinished () |
bool | isSuccessfullyEnqueued () const |
bool | isEnqueueBlocked () const |
bool | isBlocking () const |
void | addBlockedUserUnique (const EventImplPtr &NewUser) |
const QueueImplPtr & | getQueue () const |
const EventImplPtr & | getEvent () const |
void | emitInstrumentationDataProxy () |
Proxy method which calls emitInstrumentationData. More... | |
void | resolveReleaseDependencies (std::set< Command * > &list) |
Looks at all the dependencies for the release command and enables instrumentation to report these dependencies as edges. More... | |
void | emitEdgeEventForCommandDependence (Command *Cmd, void *ObjAddr, bool IsCommand, std::optional< access::mode > AccMode=std::nullopt) |
Creates an edge event when the dependency is a command. More... | |
void | emitEdgeEventForEventDependence (Command *Cmd, ur_event_handle_t &EventAddr) |
Creates an edge event when the dependency is an event. More... | |
void | emitEnqueuedEventSignal (ur_event_handle_t &UrEventAddr) |
Creates a signal event with the enqueued kernel event handle. More... | |
uint64_t | makeTraceEventProlog (void *MAddress) |
Create a trace event of node_create type; this must be guarded by a check for xptiTraceEnabled(). More... | |
void | makeTraceEventEpilog () |
If prolog has been run, run epilog; this must be guarded by a check for xptiTraceEnabled(). More... | |
void | emitInstrumentation (uint16_t Type, const char *Txt=nullptr) |
Emits an event of Type. More... | |
virtual const Requirement * | getRequirement () const |
virtual | ~Command () |
const char * | getBlockReason () const |
virtual ContextImplPtr | getWorkerContext () const |
Get the context of the queue this command will be submitted to. More... | |
virtual bool | supportsPostEnqueueCleanup () const |
Returns true iff this command can be freed by post enqueue cleanup. More... | |
virtual bool | readyForCleanup () const |
Returns true iff this command is ready to be submitted for cleanup. More... | |
std::vector< ur_event_handle_t > | getUrEvents (const std::vector< EventImplPtr > &EventImpls) const |
Collect UR events from EventImpls and filter out some of them in case of in order queue. More... | |
std::vector< ur_event_handle_t > | getUrEventsBlocking (const std::vector< EventImplPtr > &EventImpls) const |
Collect UR events from EventImpls and filter out some of them in case of in order queue. More... | |
bool | isHostTask () const |
bool | isFusable () const |
const std::vector< EventImplPtr > & | getPreparedHostDepsEvents () const |
const std::vector< EventImplPtr > & | getPreparedDepsEvents () const |
void | copySubmissionCodeLocation () |
void | clearAllDependencies () |
Clear all dependency events This should only be used if a command is about to be deleted without being executed before that. More... | |
Additional Inherited Members | |
![]() | |
std::vector< DepDesc > | MDeps |
Contains list of dependencies(edges) More... | |
std::unordered_set< Command * > | MUsers |
Contains list of commands that depend on the command. More... | |
bool | MIsBlockable = false |
Indicates whether the command can be blocked from enqueueing. More... | |
unsigned | MLeafCounter = 0 |
Counts the number of memory objects this command is a leaf for. More... | |
Marks | MMarks |
Used for marking the node during graph traversal. More... | |
BlockReason | MBlockReason |
std::atomic< EnqueueResultT::ResultT > | MEnqueueStatus |
Describes the status of the command. More... | |
void * | MTraceEvent = nullptr |
The event for node_create and task_begin. More... | |
int32_t | MStreamID = -1 |
The stream under which the traces are emitted. More... | |
void * | MAddress = nullptr |
Reserved for storing the object address such as SPIR-V or memory object address. More... | |
std::string | MAddressString |
Buffer to build the address string. More... | |
std::string | MCommandNodeType |
Buffer to build the command node type. More... | |
std::string | MCommandName |
Buffer to build the command end-user understandable name. More... | |
bool | MTraceEventPrologComplete = false |
Flag to indicate if makeTraceEventProlog() has been run. More... | |
bool | MFirstInstance = false |
Flag to indicate if this is the first time we are seeing this payload. More... | |
uint64_t | MInstanceID = 0 |
Instance ID tracked for the command. More... | |
code_location | MSubmissionCodeLocation |
Represents code location of command submission to SYCL API, assigned with the valid value only if command execution is async (host task) or delayed (blocked by host task). More... | |
std::string | MSubmissionFileName |
Introduces string to handle memory management since code_location struct works with raw char arrays. More... | |
std::string | MSubmissionFunctionName |
bool | MShouldCompleteEventIfPossible = true |
bool | MMarkedForCleanup = false |
Indicates that the node will be freed by graph cleanup. More... | |
std::vector< EventImplPtr > | MBlockedUsers |
Contains list of commands that depends on the host command explicitly (by depends_on). More... | |
std::mutex | MBlockedUsersMutex |
![]() | |
void | waitForEvents (QueueImplPtr Queue, std::vector< EventImplPtr > &RawEvents, ur_event_handle_t &Event) |
void | waitForPreparedHostEvents () const |
Command * | processDepEvent (EventImplPtr DepEvent, const DepDesc &Dep, std::vector< Command * > &ToCleanUp) |
Perform glueing of events from different contexts. More... | |
ur_exp_command_buffer_handle_t | getCommandBuffer () const |
Gets the command buffer (if any) associated with this command. More... | |
![]() | |
QueueImplPtr | MQueue |
EventImplPtr | MEvent |
QueueImplPtr | MWorkerQueue |
std::vector< EventImplPtr > & | MPreparedDepsEvents |
Dependency events prepared for waiting by backend. More... | |
std::vector< EventImplPtr > & | MPreparedHostDepsEvents |
CommandType | MType |
The type of the command. More... | |
std::mutex | MEnqueueMtx |
Mutex used to protect enqueueing from race conditions. More... | |
ur_exp_command_buffer_handle_t | MCommandBuffer |
CommandBuffer which will be used to submit to instead of the queue, if set. More... | |
std::vector< ur_exp_command_buffer_sync_point_t > | MSyncPointDeps |
List of sync points for submissions to a command buffer. More... | |
The KernelFusionCommand is placed in the execution graph together with the individual kernels of the fusion list to control kernel fusion.
Definition at line 729 of file commands.hpp.
Enumerator | |
---|---|
ACTIVE | |
CANCELLED | |
COMPLETE | |
DELETED |
Definition at line 731 of file commands.hpp.
|
explicit |
Definition at line 3359 of file commands.cpp.
References sycl::_V1::detail::Command::emitInstrumentationDataProxy().
void sycl::_V1::detail::KernelFusionCommand::addToFusionList | ( | ExecCGCommand * | Kernel | ) |
Definition at line 3369 of file commands.cpp.
References sycl::_V1::detail::Kernel.
std::vector< Command * > & sycl::_V1::detail::KernelFusionCommand::auxiliaryCommands | ( | ) |
Definition at line 3365 of file commands.cpp.
|
finalvirtual |
Instrumentation method which emits telemetry data.
Implements sycl::_V1::detail::Command.
Definition at line 3401 of file commands.cpp.
References sycl::_V1::detail::Command::MCommandName, sycl::_V1::detail::Command::MCommandNodeType, sycl::_V1::detail::Command::MFirstInstance, sycl::_V1::detail::Command::MInstanceID, sycl::_V1::detail::Command::MQueue, sycl::_V1::detail::Command::MStreamID, sycl::_V1::detail::Command::MTraceEvent, and sycl::_V1::detail::Command::MType.
std::vector< ExecCGCommand * > & sycl::_V1::detail::KernelFusionCommand::getFusionList | ( | ) |
Definition at line 3373 of file commands.cpp.
|
inline |
Definition at line 755 of file commands.hpp.
|
finalvirtual |
Implements sycl::_V1::detail::Command.
Definition at line 3455 of file commands.cpp.
References sycl::_V1::detail::accessModeToString(), sycl::_V1::detail::demangleKernelName(), sycl::_V1::detail::Command::MDeps, sycl::_V1::detail::Command::MQueue, and sycl::_V1::detail::queueDeviceToString().
|
finalvirtual |
Returns true iff the command produces a UR event on non-host devices.
Reimplemented from sycl::_V1::detail::Command.
Definition at line 3377 of file commands.cpp.
|
inline |
Definition at line 757 of file commands.hpp.
Referenced by sycl::_V1::detail::handleVisitedNodes().
void sycl::_V1::detail::KernelFusionCommand::resetQueue | ( | ) |
Reset the queue.
This can be required as the command is held in order to maintain events alive, however this prevent the normal destruction of the queue.
Definition at line 3393 of file commands.cpp.
References ACTIVE, sycl::_V1::detail::Command::MQueue, and sycl::_V1::detail::Command::MWorkerQueue.
void sycl::_V1::detail::KernelFusionCommand::setFusionStatus | ( | FusionStatus | Status | ) |
Set the status of this fusion command to Status
.
This function should only be called under the protection of the scheduler write-lock.
Definition at line 3389 of file commands.cpp.