mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-18 22:08:53 +08:00
Optimize flushTask.
Move Batching code under batching if to not call not required functions. Update task level only if level is closed. 70ns gain. Signed-off-by: Michal Mrozek <michal.mrozek@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
8132503b87
commit
809abb005f
@@ -627,27 +627,29 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
|
|||||||
|
|
||||||
this->wasSubmittedToSingleSubdevice = dispatchFlags.useSingleSubdevice;
|
this->wasSubmittedToSingleSubdevice = dispatchFlags.useSingleSubdevice;
|
||||||
|
|
||||||
// check if we are not over the budget, if we are do implicit flush
|
if (this->dispatchMode == DispatchMode::BatchedDispatch) {
|
||||||
if (getMemoryManager()->isMemoryBudgetExhausted()) {
|
// check if we are not over the budget, if we are do implicit flush
|
||||||
if (this->totalMemoryUsed >= device.getDeviceInfo().globalMemSize / 4) {
|
if (getMemoryManager()->isMemoryBudgetExhausted()) {
|
||||||
implicitFlush = true;
|
if (this->totalMemoryUsed >= device.getDeviceInfo().globalMemSize / 4) {
|
||||||
|
implicitFlush = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (DebugManager.flags.PerformImplicitFlushEveryEnqueueCount.get() != -1) {
|
if (DebugManager.flags.PerformImplicitFlushEveryEnqueueCount.get() != -1) {
|
||||||
if ((taskCount + 1) % DebugManager.flags.PerformImplicitFlushEveryEnqueueCount.get() == 0) {
|
if ((taskCount + 1) % DebugManager.flags.PerformImplicitFlushEveryEnqueueCount.get() == 0) {
|
||||||
implicitFlush = true;
|
implicitFlush = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (this->newResources) {
|
if (this->newResources) {
|
||||||
implicitFlush = true;
|
implicitFlush = true;
|
||||||
this->newResources = false;
|
this->newResources = false;
|
||||||
}
|
}
|
||||||
implicitFlush |= checkImplicitFlushForGpuIdle();
|
implicitFlush |= checkImplicitFlushForGpuIdle();
|
||||||
|
|
||||||
if (this->dispatchMode == DispatchMode::BatchedDispatch && implicitFlush) {
|
if (implicitFlush) {
|
||||||
this->flushBatchedSubmissions();
|
this->flushBatchedSubmissions();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
++taskCount;
|
++taskCount;
|
||||||
@@ -659,7 +661,9 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
|
|||||||
this->taskLevel,
|
this->taskLevel,
|
||||||
flushStamp->peekStamp()};
|
flushStamp->peekStamp()};
|
||||||
|
|
||||||
this->taskLevel += levelClosed ? 1 : 0;
|
if (levelClosed) {
|
||||||
|
this->taskLevel++;
|
||||||
|
}
|
||||||
|
|
||||||
return completionStamp;
|
return completionStamp;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,3 +32,9 @@ TEST(MemoryManagerTest, givenAllocationWithNullCpuPtrThenMemoryCopyToAllocationR
|
|||||||
|
|
||||||
EXPECT_FALSE(memoryManager.copyMemoryToAllocation(&allocation, offset, nullptr, 0));
|
EXPECT_FALSE(memoryManager.copyMemoryToAllocation(&allocation, offset, nullptr, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(MemoryManagerTest, givenDefaultMemoryManagerWhenItIsAskedForBudgetExhaustionThenFalseIsReturned) {
|
||||||
|
MockExecutionEnvironment executionEnvironment(defaultHwInfo.get());
|
||||||
|
MockMemoryManager memoryManager(false, false, executionEnvironment);
|
||||||
|
EXPECT_FALSE(memoryManager.isMemoryBudgetExhausted());
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user