mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
fix: remove doubled operations when executing regular on immediate
- immediate flush does not need to perform below for command list execution - handling indirect allocations - performing page fault migration - making residency of unified shared memory - perform prefetching when required Related-To: NEO-10356 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
18f752ee2f
commit
b31c3bb3ca
@@ -451,6 +451,8 @@ inline ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::executeCommand
|
||||
auto csr = cmdQImp->getCsr();
|
||||
auto lockCSR = outerLock != nullptr ? std::move(*outerLock) : csr->obtainUniqueOwnership();
|
||||
|
||||
std::unique_lock<std::mutex> lockForIndirect;
|
||||
|
||||
if (appendOperation != NEO::AppendOperations::cmdList) {
|
||||
if (NEO::ApiSpecificConfig::isSharedAllocPrefetchEnabled()) {
|
||||
auto svmAllocMgr = this->device->getDriverHandle()->getSvmAllocsManager();
|
||||
@@ -458,35 +460,34 @@ inline ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::executeCommand
|
||||
}
|
||||
|
||||
cmdQ->registerCsrClient();
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> lockForIndirect;
|
||||
if (this->hasIndirectAllocationsAllowed()) {
|
||||
cmdQ->handleIndirectAllocationResidency(this->getUnifiedMemoryControls(), lockForIndirect, performMigration);
|
||||
}
|
||||
|
||||
if (performMigration) {
|
||||
auto deviceImp = static_cast<DeviceImp *>(this->device);
|
||||
auto pageFaultManager = deviceImp->getDriverHandle()->getMemoryManager()->getPageFaultManager();
|
||||
if (pageFaultManager == nullptr) {
|
||||
performMigration = false;
|
||||
if (this->hasIndirectAllocationsAllowed()) {
|
||||
cmdQ->handleIndirectAllocationResidency(this->getUnifiedMemoryControls(), lockForIndirect, performMigration);
|
||||
}
|
||||
}
|
||||
|
||||
cmdQ->makeResidentAndMigrate(performMigration, this->commandContainer.getResidencyContainer());
|
||||
if (performMigration) {
|
||||
auto deviceImp = static_cast<DeviceImp *>(this->device);
|
||||
auto pageFaultManager = deviceImp->getDriverHandle()->getMemoryManager()->getPageFaultManager();
|
||||
if (pageFaultManager == nullptr) {
|
||||
performMigration = false;
|
||||
}
|
||||
}
|
||||
|
||||
static_cast<CommandQueueHw<gfxCoreFamily> *>(this->cmdQImmediate)->patchCommands(*this, 0u, false);
|
||||
cmdQ->makeResidentAndMigrate(performMigration, this->commandContainer.getResidencyContainer());
|
||||
|
||||
if (performMigration) {
|
||||
this->migrateSharedAllocations();
|
||||
}
|
||||
if (performMigration) {
|
||||
this->migrateSharedAllocations();
|
||||
}
|
||||
|
||||
if (this->performMemoryPrefetch) {
|
||||
auto prefetchManager = this->device->getDriverHandle()->getMemoryManager()->getPrefetchManager();
|
||||
prefetchManager->migrateAllocationsToGpu(this->getPrefetchContext(),
|
||||
*this->device->getDriverHandle()->getSvmAllocsManager(),
|
||||
*this->device->getNEODevice(),
|
||||
*csr);
|
||||
if (this->performMemoryPrefetch) {
|
||||
auto prefetchManager = this->device->getDriverHandle()->getMemoryManager()->getPrefetchManager();
|
||||
prefetchManager->migrateAllocationsToGpu(this->getPrefetchContext(),
|
||||
*this->device->getDriverHandle()->getSvmAllocsManager(),
|
||||
*this->device->getNEODevice(),
|
||||
*csr);
|
||||
}
|
||||
|
||||
static_cast<CommandQueueHw<gfxCoreFamily> *>(this->cmdQImmediate)->patchCommands(*this, 0u, false);
|
||||
}
|
||||
|
||||
NEO::CompletionStamp completionStamp;
|
||||
|
||||
Reference in New Issue
Block a user