mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-10 15:12:56 +08:00
Enable task count update from wait
Signed-off-by: Jobczyk, Lukasz <lukasz.jobczyk@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
022eb054e6
commit
d77a6cbe4b
@@ -43,10 +43,7 @@ namespace NEO {
|
||||
|
||||
template <typename GfxFamily>
|
||||
CommandStreamReceiverHw<GfxFamily>::~CommandStreamReceiverHw() {
|
||||
auto directSubmissionController = executionEnvironment.directSubmissionController.get();
|
||||
if (directSubmissionController) {
|
||||
directSubmissionController->unregisterDirectSubmission(this);
|
||||
}
|
||||
this->unregisterDirectSubmissionFromController();
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
@@ -197,7 +194,6 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
|
||||
const auto &hwInfo = peekHwInfo();
|
||||
auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily);
|
||||
|
||||
bool updateTag = false;
|
||||
if (dispatchFlags.blocking || dispatchFlags.dcFlush || dispatchFlags.guardCommandBufferWithPipeControl) {
|
||||
if (this->dispatchMode == DispatchMode::ImmediateDispatch) {
|
||||
//for ImmediateDispatch we will send this right away, therefore this pipe control will close the level
|
||||
@@ -221,29 +217,20 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
|
||||
|
||||
auto address = getTagAllocation()->getGpuAddress();
|
||||
|
||||
updateTag = !isUpdateTagFromWaitEnabled();
|
||||
updateTag |= dispatchFlags.blocking;
|
||||
updateTag |= dispatchFlags.dcFlush;
|
||||
PipeControlArgs args;
|
||||
args.dcFlushEnable = MemorySynchronizationCommands<GfxFamily>::getDcFlushEnable(dispatchFlags.dcFlush, hwInfo);
|
||||
args.notifyEnable = isUsedNotifyEnableForPostSync();
|
||||
args.tlbInvalidation |= dispatchFlags.memoryMigrationRequired;
|
||||
args.textureCacheInvalidationEnable |= dispatchFlags.textureCacheFlush;
|
||||
args.workloadPartitionOffset = isMultiTileOperationEnabled();
|
||||
MemorySynchronizationCommands<GfxFamily>::addPipeControlAndProgramPostSyncOperation(
|
||||
commandStreamTask,
|
||||
PIPE_CONTROL::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA,
|
||||
address,
|
||||
taskCount + 1,
|
||||
hwInfo,
|
||||
args);
|
||||
|
||||
if (updateTag) {
|
||||
PipeControlArgs args;
|
||||
args.dcFlushEnable = MemorySynchronizationCommands<GfxFamily>::getDcFlushEnable(dispatchFlags.dcFlush, hwInfo);
|
||||
args.notifyEnable = isUsedNotifyEnableForPostSync();
|
||||
args.tlbInvalidation |= dispatchFlags.memoryMigrationRequired;
|
||||
args.textureCacheInvalidationEnable |= dispatchFlags.textureCacheFlush;
|
||||
args.workloadPartitionOffset = isMultiTileOperationEnabled();
|
||||
MemorySynchronizationCommands<GfxFamily>::addPipeControlAndProgramPostSyncOperation(
|
||||
commandStreamTask,
|
||||
PIPE_CONTROL::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA,
|
||||
address,
|
||||
taskCount + 1,
|
||||
hwInfo,
|
||||
args);
|
||||
} else {
|
||||
currentPipeControlForNooping = nullptr;
|
||||
}
|
||||
|
||||
this->latestSentTaskCount = taskCount + 1;
|
||||
DBG_LOG(LogTaskCounts, __FUNCTION__, "Line: ", __LINE__, "taskCount", peekTaskCount());
|
||||
if (DebugManager.flags.AddPatchInfoCommentsForAUBDump.get()) {
|
||||
flatBatchBufferHelper->setPatchInfoData(PatchInfoData(address, 0u,
|
||||
@@ -258,6 +245,7 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
|
||||
PatchInfoAllocationType::Default));
|
||||
}
|
||||
}
|
||||
this->latestSentTaskCount = taskCount + 1;
|
||||
|
||||
if (DebugManager.flags.ForceSLML3Config.get()) {
|
||||
dispatchFlags.useSLM = true;
|
||||
@@ -585,7 +573,7 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
|
||||
if (submitCSR | submitTask) {
|
||||
if (this->dispatchMode == DispatchMode::ImmediateDispatch) {
|
||||
flushHandler(batchBuffer, this->getResidencyAllocations());
|
||||
if (updateTag) {
|
||||
if (dispatchFlags.blocking || dispatchFlags.dcFlush || dispatchFlags.guardCommandBufferWithPipeControl) {
|
||||
this->latestFlushedTaskCount = this->taskCount + 1;
|
||||
}
|
||||
} else {
|
||||
@@ -1004,6 +992,14 @@ bool CommandStreamReceiverHw<GfxFamily>::detectInitProgrammingFlagsRequired(cons
|
||||
return DebugManager.flags.ForceCsrReprogramming.get();
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
inline void CommandStreamReceiverHw<GfxFamily>::unregisterDirectSubmissionFromController() {
|
||||
auto directSubmissionController = executionEnvironment.directSubmissionController.get();
|
||||
if (directSubmissionController) {
|
||||
directSubmissionController->unregisterDirectSubmission(this);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t CommandStreamReceiverHw<GfxFamily>::flushBcsTask(const BlitPropertiesContainer &blitPropertiesContainer, bool blocking, bool profilingEnabled, Device &device) {
|
||||
using MI_BATCH_BUFFER_END = typename GfxFamily::MI_BATCH_BUFFER_END;
|
||||
@@ -1324,7 +1320,9 @@ inline void CommandStreamReceiverHw<GfxFamily>::flushHandler(BatchBuffer &batchB
|
||||
|
||||
template <typename GfxFamily>
|
||||
inline bool CommandStreamReceiverHw<GfxFamily>::isUpdateTagFromWaitEnabled() {
|
||||
bool enabled = false;
|
||||
auto &hwHelper = HwHelper::get(peekHwInfo().platform.eRenderCoreFamily);
|
||||
auto enabled = hwHelper.isUpdateTaskCountFromWaitSupported();
|
||||
enabled &= this->isAnyDirectSubmissionEnabled();
|
||||
|
||||
switch (DebugManager.flags.UpdateTaskCountFromWait.get()) {
|
||||
case 0:
|
||||
@@ -1430,6 +1428,9 @@ inline bool CommandStreamReceiverHw<GfxFamily>::initDirectSubmission(Device &dev
|
||||
if (directSubmissionController) {
|
||||
directSubmissionController->registerDirectSubmission(this);
|
||||
}
|
||||
if (this->isUpdateTagFromWaitEnabled()) {
|
||||
this->overrideDispatchPolicy(DispatchMode::ImmediateDispatch);
|
||||
}
|
||||
}
|
||||
osContext.setDirectSubmissionActive();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user