diff --git a/rocclr/runtime/device/pal/palsettings.cpp b/rocclr/runtime/device/pal/palsettings.cpp index 1bf6e31112..5acdb5dc32 100644 --- a/rocclr/runtime/device/pal/palsettings.cpp +++ b/rocclr/runtime/device/pal/palsettings.cpp @@ -142,8 +142,7 @@ Settings::Settings() { subAllocationMaxSize_ = std::min(static_cast(GPU_MAX_SUBALLOC_SIZE) * Ki, subAllocationChunkSize_); - // Note: More command buffers may cause a HW hang with HWSC on VI family in OCLPerfKernelArguments - maxCmdBuffers_ = 8; + maxCmdBuffers_ = 12; } bool Settings::create(const Pal::DeviceProperties& palProp, @@ -293,6 +292,12 @@ bool Settings::create(const Pal::DeviceProperties& palProp, maxAllocSize_ = 3ULL * Gi; } + // Note: More than 4 command buffers may cause a HW hang + // with HWSC on pre-gfx9 devices in OCLPerfKernelArguments + if (!aiPlus_) { + maxCmdBuffers_ = 4; + } + supportRA_ = false; partialDispatch_ = GPU_PARTIAL_DISPATCH; numMemDependencies_ = GPU_NUM_MEM_DEPENDENCY; diff --git a/rocclr/runtime/device/pal/palvirtual.cpp b/rocclr/runtime/device/pal/palvirtual.cpp index 1463b81cad..e6a81d9ad4 100644 --- a/rocclr/runtime/device/pal/palvirtual.cpp +++ b/rocclr/runtime/device/pal/palvirtual.cpp @@ -784,7 +784,7 @@ bool VirtualGPU::create(bool profiling, uint deviceQueueSize, uint rtCUs, uint idx = index() % (dev().numComputeEngines() - firstQueue); uint64_t residency_limit = dev().properties().gpuMemoryProperties.flags.supportPerSubmitMemRefs ? 0 : (dev().properties().gpuMemoryProperties.maxLocalMemSize >> 2); - uint max_cmd_buffers = dev().settings().maxCmdBuffers_; + uint max_cmd_buffers = (idx == 0) ? 2 : dev().settings().maxCmdBuffers_; if (dev().numComputeEngines()) { //! @todo There is a hang with a mix of user and non user queues.