From ceaface1a96364bdfd4532c178e42703c02ece07 Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Tue, 2 Jun 2020 12:33:30 +0200 Subject: [PATCH] Read MakeAllBuffersResident in release builds Resolves: NEO-4302 Change-Id: I0ed8ca197235fc31f1b4b02155a8f4684e0601be Signed-off-by: Lukasz Jobczyk --- opencl/source/mem_obj/buffer.cpp | 17 ++++++++++++++++- opencl/source/mem_obj/buffer.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/opencl/source/mem_obj/buffer.cpp b/opencl/source/mem_obj/buffer.cpp index 238d72a8f8..83cc166df9 100644 --- a/opencl/source/mem_obj/buffer.cpp +++ b/opencl/source/mem_obj/buffer.cpp @@ -23,6 +23,7 @@ #include "shared/source/memory_manager/memory_manager.h" #include "shared/source/memory_manager/memory_operations_handler.h" #include "shared/source/memory_manager/unified_memory_manager.h" +#include "shared/source/utilities/debug_settings_reader_creator.h" #include "opencl/source/cl_device/cl_device.h" #include "opencl/source/command_queue/command_queue.h" @@ -30,6 +31,7 @@ #include "opencl/source/helpers/memory_properties_helpers.h" #include "opencl/source/helpers/validators.h" #include "opencl/source/mem_obj/mem_obj_helper.h" +#include "opencl/source/os_interface/ocl_reg_path.h" namespace NEO { @@ -357,7 +359,7 @@ Buffer *Buffer::create(Context *context, return nullptr; } - if (DebugManager.flags.MakeAllBuffersResident.get()) { + if (isMakeAllBuffersResidentSet()) { auto graphicsAllocation = pBuffer->getGraphicsAllocation(); context->getDevice(0u)->getRootDeviceEnvironment().memoryOperationsInterface->makeResident(ArrayRef(&graphicsAllocation, 1)); } @@ -447,6 +449,19 @@ bool Buffer::isReadOnlyMemoryPermittedByFlags(const MemoryProperties &properties return (properties.flags.hostNoAccess || properties.flags.hostReadOnly) && properties.flags.readOnly; } +bool Buffer::isMakeAllBuffersResidentSet() { + static std::once_flag isMakeAllBufferResidentObtained; + + std::call_once(isMakeAllBufferResidentObtained, [&]() { + auto value = DebugManager.flags.MakeAllBuffersResident.get(); + auto settingsReader = SettingsReaderCreator::create(oclRegPath); + value |= settingsReader->getSetting("MakeAllBuffersResident", false); + DebugManager.flags.MakeAllBuffersResident.set(value); + }); + + return DebugManager.flags.MakeAllBuffersResident.get(); +} + Buffer *Buffer::createSubBuffer(cl_mem_flags flags, cl_mem_flags_intel flagsIntel, const cl_buffer_region *region, diff --git a/opencl/source/mem_obj/buffer.h b/opencl/source/mem_obj/buffer.h index 41655e2bee..289c34be96 100644 --- a/opencl/source/mem_obj/buffer.h +++ b/opencl/source/mem_obj/buffer.h @@ -182,6 +182,7 @@ class Buffer : public MemObj { bool renderCompressedBuffers, bool localMemoryEnabled, bool preferCompression); static bool isReadOnlyMemoryPermittedByFlags(const MemoryProperties &properties); + static bool isMakeAllBuffersResidentSet(); void transferData(void *dst, void *src, size_t copySize, size_t copyOffset); };