89 namespace taskfusion {
139 struct FusableTasksQueue;
189 std::set<TaskNumber> inDependencies,
296 std::set<TaskNumber> inDependencies,
322 std::set<TaskNumber> inDependencies,
337 std::set<TaskNumber> inDependencies,
Abstract super class for a job.
Represents a queue of fusable tasks.
void processAllReadyTasks()
Run over all known queues and invoke drainReadyTasks() on each one.
void handleFusableTask_ProducerConsumerTaskSequence(Task *task, FusableTasksQueue &taskQueue, std::set< TaskNumber > inDependencies, const TaskNumber &taskNumber, const tarch::multicore::orchestration::Strategy::FuseInstruction &fuseInstruction)
Realisation for handleFusableTask() for ProducerConsumerTaskSequence.
void handleFusableTask_LazyEvaluation(Task *task, FusableTasksQueue &taskQueue, std::set< TaskNumber > inDependencies, const TaskNumber &taskNumber, const tarch::multicore::orchestration::Strategy::FuseInstruction &fuseInstruction)
Implementation of handleFusableTask() if we use LazyEvaluation.
bool ensureHeldBackTasksAreMappedOntoNativeTasks_EagerConsumerTasks(const std::set< TaskNumber > &inDependencies)
Preamble of waitForTasks() if we use EagerEvaluation.
bool ensureHeldBackTasksAreMappedOntoNativeTasks_LazyEvaluation(const std::set< TaskNumber > &inDependencies)
Preamble of waitForTasks() and task spawns if we use LazyEvaluation.
void processAndFuseAllReadyTasks()
Drain the queues but use task fusion where possible.
const std::string DirectlyInsertFusedTaskIntoReadyQueueStatisticsIdentifier
Track how many tasks are directly inserted into ready queue.
const std::string ProcessFusedTaskDirectlyStatisticsIdentifier
Track number of tasks that are executed directly.
const std::string MapFusedTaskOntoNativeTaskStatisticsIdentifier
Track number of fused tasks that are mapped directly onto native tasks.
bool ensureHeldBackTasksAreMappedOntoNativeTasks(const std::set< TaskNumber > &taskNumbers)
Ensure that a certain set of tasks is mapped onto native tasks already.
void handleFusableTask(Task *task, std::set< TaskNumber > inDependencies, const TaskNumber &taskNumber)
Handle one fusable task.
void handleFusableTask_EagerConsumerTasks(Task *task, FusableTasksQueue &taskQueue, std::set< TaskNumber > inDependencies, const TaskNumber &taskNumber, const tarch::multicore::orchestration::Strategy::FuseInstruction &fuseInstruction)
Handle a task in the eager consumer pattern.
Have to include this header, as I need access to the SYCL_EXTERNAL keyword.