From 9c361faab3a1a3ee8a06dffa24abe560261dedc8 Mon Sep 17 00:00:00 2001 From: Michael LIAO Date: Mon, 30 Mar 2020 09:10:16 -0400 Subject: [PATCH] [vdi] Fix calculation of MaxWaves - Consider the case where `usedVGPRs` is zero. - This fixes [SWDEV-228537](http://ontrack-internal.amd.com/browse/SWDEV-228537) Change-Id: I8675311f5fe24fb59c5d45bada122afefb55b128 [ROCm/clr commit: 55d869df99e613673b518820213132f442af7501] --- projects/clr/hipamd/vdi/hip_platform.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/projects/clr/hipamd/vdi/hip_platform.cpp b/projects/clr/hipamd/vdi/hip_platform.cpp index 688181870c..747f7457a0 100755 --- a/projects/clr/hipamd/vdi/hip_platform.cpp +++ b/projects/clr/hipamd/vdi/hip_platform.cpp @@ -700,17 +700,16 @@ hipError_t ihipOccupancyMaxActiveBlocksPerMultiprocessor(int* numBlocks, int* nu } // Find threads accupancy per CU => simd_per_cu * GPR usage constexpr size_t MaxWavesPerSimd = 8; // Limited by SPI 32 per CU, hence 8 per SIMD - size_t VgprWaves = wrkGrpInfo->availableVGPRs_ / amd::alignUp(wrkGrpInfo->usedVGPRs_, 4); - - size_t GprWaves; + size_t VgprWaves = MaxWavesPerSimd; + if (wrkGrpInfo->usedVGPRs_ > 0) { + VgprWaves = wrkGrpInfo->availableVGPRs_ / amd::alignUp(wrkGrpInfo->usedVGPRs_, 4); + } + size_t GprWaves = VgprWaves; if (wrkGrpInfo->usedSGPRs_ > 0) { const size_t maxSGPRs = (device->info().gfxipVersion_ < 800) ? 512 : 800; size_t SgprWaves = maxSGPRs / amd::alignUp(wrkGrpInfo->usedSGPRs_, 16); GprWaves = std::min(VgprWaves, SgprWaves); } - else { - GprWaves = VgprWaves; - } size_t alu_accupancy = device->info().simdPerCU_ * std::min(MaxWavesPerSimd, GprWaves); alu_accupancy *= wrkGrpInfo->wavefrontSize_;