diff --git a/projects/clr/rocclr/device/pal/palsettings.cpp b/projects/clr/rocclr/device/pal/palsettings.cpp index 558de26575..edf5a3243c 100644 --- a/projects/clr/rocclr/device/pal/palsettings.cpp +++ b/projects/clr/rocclr/device/pal/palsettings.cpp @@ -170,6 +170,7 @@ Settings::Settings() { disableSdma_ = PAL_DISABLE_SDMA; mallPolicy_ = 0; alwaysResident_ = amd::IS_HIP ? true : false; + prepinnedMinSize_ = 0; } bool Settings::create(const Pal::DeviceProperties& palProp, @@ -532,6 +533,11 @@ bool Settings::create(const Pal::DeviceProperties& palProp, break; } } + // If is Rebar, override prepinned memory size. + if ((heaps[Pal::GpuHeapInvisible].heapSize == 0) && + (heaps[Pal::GpuHeapLocal].heapSize > 256 * Mi)) { + prepinnedMinSize_ = PAL_PREPINNED_MEMORY_SIZE * Ki; + } // Override current device settings override(); diff --git a/projects/clr/rocclr/device/pal/palsettings.hpp b/projects/clr/rocclr/device/pal/palsettings.hpp index b546dcf2db..1c7efb0543 100644 --- a/projects/clr/rocclr/device/pal/palsettings.hpp +++ b/projects/clr/rocclr/device/pal/palsettings.hpp @@ -120,6 +120,8 @@ class Settings : public device::Settings { amd::LibrarySelector libSelector_; //!< Select linking libraries for compiler + size_t prepinnedMinSize_; //!< minimal memory size for prepinned transfer + //! Default constructor Settings(); diff --git a/projects/clr/rocclr/device/pal/palvirtual.cpp b/projects/clr/rocclr/device/pal/palvirtual.cpp index 733766418c..c9229c40f9 100644 --- a/projects/clr/rocclr/device/pal/palvirtual.cpp +++ b/projects/clr/rocclr/device/pal/palvirtual.cpp @@ -1327,7 +1327,7 @@ void VirtualGPU::submitWriteMemory(amd::WriteMemoryCommand& vcmd) { origin.c[0] *= elemSize; size.c[0] *= elemSize; } - if (hostMemory != nullptr) { + if ((hostMemory != nullptr) && (vcmd.size()[0] > dev().settings().prepinnedMinSize_)){ // Accelerated transfer without pinning amd::Coord3D srcOrigin(offset); result = blitMgr().copyBuffer(*hostMemory, *memory, srcOrigin, origin, size, diff --git a/projects/clr/rocclr/utils/flags.hpp b/projects/clr/rocclr/utils/flags.hpp index a576301c64..f6f897e262 100644 --- a/projects/clr/rocclr/utils/flags.hpp +++ b/projects/clr/rocclr/utils/flags.hpp @@ -257,7 +257,9 @@ release(cstring, ROC_GLOBAL_CU_MASK, "", \ "Sets a global CU mask (entered as hex value) for all queues," \ "Each active bit represents using one CU (e.g., 0xf enables only 4 CUs)") \ release(cstring, AMD_LOG_LEVEL_FILE, "", \ - "Set output file for AMD_LOG_LEVEL, Default is stderr") + "Set output file for AMD_LOG_LEVEL, Default is stderr") \ +release(size_t, PAL_PREPINNED_MEMORY_SIZE, 64, \ + "Size in KBytes of prepinned memory") namespace amd {