From 28e79a42c221e858afb4ebf67ba72a3ccf36dd9f Mon Sep 17 00:00:00 2001 From: Hari Thangirala Date: Sat, 7 Apr 2018 17:33:20 -0500 Subject: [PATCH] Allow HSA_ENABLE_SDMA to override runtime defaults. Change-Id: I2305304228010157bfb589c365f4a998577231cd [ROCm/ROCR-Runtime commit: 3e0cd85d6978625e3a06fc62da618d9f9029574a] --- .../hsa-runtime/core/runtime/amd_gpu_agent.cpp | 14 ++++++++------ .../runtime/hsa-runtime/core/util/flag.h | 10 +++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp index 6421eb06e7..cceda10c6f 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp @@ -558,14 +558,16 @@ void GpuAgent::InitDma() { // Share utility queue with device-to-host blits. queues_[QueueUtility].reset(queue_lambda); - // Blits, try create SDMA blit first. - // Disable SDMA on specific ISA targets until they are fully qualified. + // Decide which engine to use for blits. auto blit_lambda = [this](bool h2d, lazy_ptr& queue) { - if ((isa_->GetMajorVersion() != 8) && core::Runtime::runtime_singleton_->flag().enable_sdma() && - (HSA_PROFILE_BASE == profile_)) { - auto ret = CreateBlitSdma(h2d); - if (ret != nullptr) return ret; + std::string sdma_override = core::Runtime::runtime_singleton_->flag().enable_sdma(); + bool use_sdma = (sdma_override.size() == 0) ? (isa_->GetMajorVersion() != 8) : (sdma_override == "1"); + + if (use_sdma && (HSA_PROFILE_BASE == profile_)) { + auto ret = CreateBlitSdma(h2d); + if (ret != nullptr) return ret; } + auto ret = CreateBlitKernel((*queue).get()); if (ret == nullptr) throw AMD::hsa_exception(HSA_STATUS_ERROR_OUT_OF_RESOURCES, "Blit creation failed."); diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/util/flag.h b/projects/rocr-runtime/runtime/hsa-runtime/core/util/flag.h index e9049f36b0..7593bf36e2 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/util/flag.h +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/util/flag.h @@ -69,8 +69,7 @@ class Flag { var = os::GetEnvVar("HSA_ENABLE_INTERRUPT"); enable_interrupt_ = (var == "0") ? false : true; - var = os::GetEnvVar("HSA_ENABLE_SDMA"); - enable_sdma_ = (var == "0") ? false : true; + enable_sdma_ = os::GetEnvVar("HSA_ENABLE_SDMA"); var = os::GetEnvVar("HSA_RUNNING_UNDER_VALGRIND"); running_valgrind_ = (var == "1") ? true : false; @@ -104,8 +103,6 @@ class Flag { bool enable_interrupt() const { return enable_interrupt_; } - bool enable_sdma() const { return enable_sdma_; } - bool enable_sdma_hdp_flush() const { return enable_sdma_hdp_flush_; } bool running_valgrind() const { return running_valgrind_; } @@ -116,6 +113,8 @@ class Flag { bool disable_fragment_alloc() const { return disable_fragment_alloc_; } + std::string enable_sdma() const { return enable_sdma_; } + uint32_t max_queues() const { return max_queues_; } size_t scratch_mem_size() const { return scratch_mem_size_; } @@ -126,7 +125,6 @@ class Flag { bool check_flat_scratch_; bool enable_vm_fault_message_; bool enable_interrupt_; - bool enable_sdma_; bool enable_sdma_hdp_flush_; bool running_valgrind_; bool sdma_wait_idle_; @@ -134,6 +132,8 @@ class Flag { bool report_tool_load_failures_; bool disable_fragment_alloc_; + std::string enable_sdma_; + uint32_t max_queues_; size_t scratch_mem_size_;