From 5e8d261352a3a35d765b850c50d9c80532c52ea0 Mon Sep 17 00:00:00 2001 From: Sean Keely Date: Tue, 12 Oct 2021 19:42:51 -0500 Subject: [PATCH] Skip inital CU mask setup unless HSA_CU_MASK is defined for the GPU. Limits CU masking application to cases where it is explicitly requested. Change-Id: Ib65ad0ac98f86d840c0328fa15ce40c05cd4bfae --- runtime/hsa-runtime/core/runtime/amd_aql_queue.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/runtime/hsa-runtime/core/runtime/amd_aql_queue.cpp b/runtime/hsa-runtime/core/runtime/amd_aql_queue.cpp index 90123fce31..486b63cd00 100644 --- a/runtime/hsa-runtime/core/runtime/amd_aql_queue.cpp +++ b/runtime/hsa-runtime/core/runtime/amd_aql_queue.cpp @@ -1078,11 +1078,15 @@ hsa_status_t AqlQueue::SetCUMasking(uint32_t num_cu_mask_count, const uint32_t* // Clip last dword to physical CU limit if necessary if ((mask.size() == mask_dwords) && (tail_mask != 0)) mask[mask_dwords - 1] &= tail_mask; - // Apply mask and update current cu masking tracking. + // Apply mask if non-default or not queue initialization. ScopedAcquire lock(&mask_lock_); - HSAKMT_STATUS ret = - hsaKmtSetQueueCUMask(queue_id_, mask.size() * 32, reinterpret_cast(&mask[0])); - if (ret != HSAKMT_STATUS_SUCCESS) return HSA_STATUS_ERROR; + if ((!cu_mask_.empty()) || (num_cu_mask_count != 0) || (!global_mask.empty())) { + HSAKMT_STATUS ret = + hsaKmtSetQueueCUMask(queue_id_, mask.size() * 32, reinterpret_cast(&mask[0])); + if (ret != HSAKMT_STATUS_SUCCESS) return HSA_STATUS_ERROR; + } + + // update current cu masking tracking. cu_mask_ = std::move(mask); return clipped ? (hsa_status_t)HSA_STATUS_CU_MASK_REDUCED : HSA_STATUS_SUCCESS; }