mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-10 12:53:42 +08:00
Add debug flag to bind at creation time
Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
596fe02dd3
commit
538e0aea87
@ -369,6 +369,7 @@ Force2dImageAsArray = -1
|
||||
ForceExtendedBufferSize = -1
|
||||
ForceExtendedUSMBufferSize = -1
|
||||
MakeIndirectAllocationsResidentAsPack = -1
|
||||
MakeEachAllocationResident = -1
|
||||
EnableChipsetUniqueUUID = -1
|
||||
ForceSimdMessageSizeInWalker = -1
|
||||
UseNewQueryTopoIoctl = 1
|
||||
|
@ -115,7 +115,16 @@ void CommandStreamReceiver::makeResident(MultiGraphicsAllocation &gfxAllocation)
|
||||
void CommandStreamReceiver::makeResident(GraphicsAllocation &gfxAllocation) {
|
||||
auto submissionTaskCount = this->taskCount + 1;
|
||||
if (gfxAllocation.isResidencyTaskCountBelow(submissionTaskCount, osContext->getContextId())) {
|
||||
this->getResidencyAllocations().push_back(&gfxAllocation);
|
||||
auto pushAllocations = true;
|
||||
|
||||
if (DebugManager.flags.MakeEachAllocationResident.get() != -1) {
|
||||
pushAllocations = !DebugManager.flags.MakeEachAllocationResident.get();
|
||||
}
|
||||
|
||||
if (pushAllocations) {
|
||||
this->getResidencyAllocations().push_back(&gfxAllocation);
|
||||
}
|
||||
|
||||
checkForNewResources(submissionTaskCount, gfxAllocation.getTaskCount(osContext->getContextId()), gfxAllocation);
|
||||
gfxAllocation.updateTaskCount(submissionTaskCount, osContext->getContextId());
|
||||
if (!gfxAllocation.isResident(osContext->getContextId())) {
|
||||
|
@ -242,6 +242,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, OverrideKernelSizeLimitForSmallDispatch, -1, "-1
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, OverrideUseKmdWaitFunction, -1, "-1: default (L0: disabled), 0: disabled, 1: enabled. It uses only busy loop to wait or busy loop with KMD wait function, when KMD fallback is enabled")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, ResolveDependenciesViaPipeControls, -1, "-1: default , 0: disabled, 1: enabled. If enabled, instead of programming semaphores, dependencies are resolved using task levels")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, MakeIndirectAllocationsResidentAsPack, -1, "-1: default, 0:disabled, 1: enabled. If enabled, driver handles all indirect allocations as one pack instead of making them resident individually.")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, MakeEachAllocationResident, -1, "-1: default, 0: disabled, 1: bind every allocation at creation time, 2: bind all created allocations in flush")
|
||||
|
||||
/*DIRECT SUBMISSION FLAGS*/
|
||||
DECLARE_DEBUG_VARIABLE(bool, DirectSubmissionPrintBuffers, false, "Print address of submitted command buffers")
|
||||
|
@ -1046,15 +1046,28 @@ std::vector<GraphicsAllocation *> &DrmMemoryManager::getLocalMemAllocs(uint32_t
|
||||
return this->localMemAllocs[rootDeviceIndex];
|
||||
}
|
||||
|
||||
void DrmMemoryManager::makeAllocationResident(GraphicsAllocation *allocation) {
|
||||
if (DebugManager.flags.MakeEachAllocationResident.get() == 1) {
|
||||
auto drmAllocation = static_cast<DrmAllocation *>(allocation);
|
||||
for (uint32_t i = 0; getDrm(allocation->getRootDeviceIndex()).getVirtualMemoryAddressSpace(i) > 0u; i++) {
|
||||
drmAllocation->makeBOsResident(registeredEngines[defaultEngineIndex[allocation->getRootDeviceIndex()]].osContext, i, nullptr, true);
|
||||
getDrm(allocation->getRootDeviceIndex()).waitForBind(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DrmMemoryManager::registerSysMemAlloc(GraphicsAllocation *allocation) {
|
||||
makeAllocationResident(allocation);
|
||||
std::lock_guard<std::mutex> lock(this->allocMutex);
|
||||
this->sysMemAllocs.push_back(allocation);
|
||||
}
|
||||
|
||||
void DrmMemoryManager::registerLocalMemAlloc(GraphicsAllocation *allocation, uint32_t rootDeviceIndex) {
|
||||
makeAllocationResident(allocation);
|
||||
std::lock_guard<std::mutex> lock(this->allocMutex);
|
||||
this->localMemAllocs[rootDeviceIndex].push_back(allocation);
|
||||
}
|
||||
|
||||
void DrmMemoryManager::unregisterAllocation(GraphicsAllocation *allocation) {
|
||||
std::lock_guard<std::mutex> lock(this->allocMutex);
|
||||
sysMemAllocs.erase(std::remove(sysMemAllocs.begin(), sysMemAllocs.end(), allocation),
|
||||
|
@ -123,6 +123,7 @@ class DrmMemoryManager : public MemoryManager {
|
||||
void registerAllocationInOs(GraphicsAllocation *allocation) override;
|
||||
void waitOnCompletionFence(GraphicsAllocation *allocation);
|
||||
bool allocationTypeForCompletionFence(AllocationType allocationType);
|
||||
void makeAllocationResident(GraphicsAllocation *allocation);
|
||||
|
||||
Drm &getDrm(uint32_t rootDeviceIndex) const;
|
||||
uint32_t getRootDeviceIndex(const Drm *drm);
|
||||
|
@ -104,7 +104,15 @@ MemoryOperationsStatus DrmMemoryOperationsHandlerBind::isResident(Device *device
|
||||
}
|
||||
|
||||
MemoryOperationsStatus DrmMemoryOperationsHandlerBind::mergeWithResidencyContainer(OsContext *osContext, ResidencyContainer &residencyContainer) {
|
||||
MemoryOperationsStatus retVal = this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(residencyContainer), true);
|
||||
if (DebugManager.flags.MakeEachAllocationResident.get() == 2) {
|
||||
auto memoryManager = static_cast<DrmMemoryManager *>(this->rootDeviceEnvironment.executionEnvironment.memoryManager.get());
|
||||
|
||||
auto allocLock = memoryManager->acquireAllocLock();
|
||||
this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(memoryManager->getSysMemAllocs()), true);
|
||||
this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(memoryManager->getLocalMemAllocs(this->rootDeviceIndex)), true);
|
||||
}
|
||||
|
||||
auto retVal = this->makeResidentWithinOsContext(osContext, ArrayRef<GraphicsAllocation *>(residencyContainer), true);
|
||||
if (retVal != MemoryOperationsStatus::SUCCESS) {
|
||||
return retVal;
|
||||
}
|
||||
|
Reference in New Issue
Block a user