diff --git a/Jenkinsfile b/Jenkinsfile index e0e696ac6d..c81c052c25 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,5 +1,5 @@ #!groovy dependenciesRevision='c8de469c107af1ced325c9857239bb187d139d1d-1411' strategy='EQUAL' -allowedCD=257 +allowedCD=258 allowedF=20 diff --git a/shared/source/helpers/hw_helper.h b/shared/source/helpers/hw_helper.h index a453177c03..f845f22aca 100644 --- a/shared/source/helpers/hw_helper.h +++ b/shared/source/helpers/hw_helper.h @@ -86,6 +86,7 @@ class HwHelper { virtual bool is3DPipelineSelectWARequired(const HardwareInfo &hwInfo) const = 0; virtual bool isFusedEuDispatchEnabled(const HardwareInfo &hwInfo) const = 0; virtual bool isIndependentForwardProgressSupported() = 0; + virtual bool isSystemMemoryRequired(const HardwareInfo &hwInfo, GraphicsAllocation::AllocationType allocationType) const = 0; virtual uint64_t getGpuTimeStampInNS(uint64_t timeStamp, double frequency) const = 0; virtual uint32_t getBindlessSurfaceExtendedMessageDescriptorValue(uint32_t surfStateOffset) const = 0; @@ -237,6 +238,8 @@ class HwHelperHw : public HwHelper { bool isSpecialWorkgroupSizeRequired(const HardwareInfo &hwInfo) const override; + bool isSystemMemoryRequired(const HardwareInfo &hwInfo, GraphicsAllocation::AllocationType allocationType) const override; + protected: static const AuxTranslationMode defaultAuxTranslationMode; HwHelperHw() = default; diff --git a/shared/source/helpers/hw_helper_base.inl b/shared/source/helpers/hw_helper_base.inl index 61312b5d79..6786f53757 100644 --- a/shared/source/helpers/hw_helper_base.inl +++ b/shared/source/helpers/hw_helper_base.inl @@ -374,4 +374,9 @@ const StackVec HwHelperHw::getDeviceSubGroupSizes() const return {8, 16, 32}; } +template +bool HwHelperHw::isSystemMemoryRequired(const HardwareInfo &hwInfo, GraphicsAllocation::AllocationType allocationType) const { + return false; +} + } // namespace NEO diff --git a/shared/source/memory_manager/memory_manager.cpp b/shared/source/memory_manager/memory_manager.cpp index 835b705669..bfa0eac01e 100644 --- a/shared/source/memory_manager/memory_manager.cpp +++ b/shared/source/memory_manager/memory_manager.cpp @@ -353,6 +353,7 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo GraphicsAllocation *MemoryManager::allocateGraphicsMemoryInPreferredPool(const AllocationProperties &properties, const void *hostPtr) { AllocationData allocationData; getAllocationData(allocationData, properties, hostPtr, createStorageInfoFromProperties(properties)); + applyMemoryPlacementWorkarounds(allocationData, properties); overrideAllocationData(allocationData, properties); AllocationStatus status = AllocationStatus::Error; @@ -642,4 +643,10 @@ void MemoryManager::overrideAllocationData(AllocationData &allocationData, const } } } // namespace NEO +void MemoryManager::applyMemoryPlacementWorkarounds(AllocationData &allocationData, const AllocationProperties &properties) { + auto hwInfo = executionEnvironment.rootDeviceEnvironments[properties.rootDeviceIndex]->getHardwareInfo(); + if (HwHelper::get(hwInfo->platform.eRenderCoreFamily).isSystemMemoryRequired(*hwInfo, properties.allocationType)) { + allocationData.flags.useSystemMemory = true; + } +} } // namespace NEO diff --git a/shared/source/memory_manager/memory_manager.h b/shared/source/memory_manager/memory_manager.h index 6c3cd86e85..09ceb00724 100644 --- a/shared/source/memory_manager/memory_manager.h +++ b/shared/source/memory_manager/memory_manager.h @@ -199,6 +199,7 @@ class MemoryManager { static bool getAllocationData(AllocationData &allocationData, const AllocationProperties &properties, const void *hostPtr, const StorageInfo &storageInfo); static void overrideAllocationData(AllocationData &allocationData, const AllocationProperties &properties); + void applyMemoryPlacementWorkarounds(AllocationData &allocationData, const AllocationProperties &properties); static bool useInternal32BitAllocator(GraphicsAllocation::AllocationType allocationType) { return allocationType == GraphicsAllocation::AllocationType::KERNEL_ISA || allocationType == GraphicsAllocation::AllocationType::INTERNAL_HEAP;