diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/inc/isa.h b/projects/rocr-runtime/runtime/hsa-runtime/core/inc/isa.h index aed14aa757..3c869febfe 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/inc/isa.h +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/inc/isa.h @@ -65,6 +65,7 @@ public: hsa_wavefront_t handle = { reinterpret_cast(object) }; return handle; } + /// @returns Object equivalent of @p handle. static Wavefront *Object(const hsa_wavefront_t &handle) { Wavefront *object = amd::hsa::common::ObjectAt(handle.handle); @@ -104,6 +105,7 @@ class Isa final: public amd::hsa::common::Signed<0xB13594F2BD8F212D> { hsa_isa_t isa_handle = { reinterpret_cast(isa_object) }; return isa_handle; } + /// @returns Object equivalent of @p isa_handle. static Isa *Object(const hsa_isa_t &isa_handle) { Isa *isa_object = amd::hsa::common::ObjectAt(isa_handle.handle); @@ -115,19 +117,22 @@ class Isa final: public amd::hsa::common::Signed<0xB13594F2BD8F212D> { static bool IsCompatible(const Isa &code_object_isa, const Isa &agent_isa); /// @returns This Isa's version. - const Version &version() const { + const Version &GetVersion() const { return version_; } + /// @returns SRAM ECC feature status. - const IsaFeature &sramecc() const { + IsaFeature GetSramecc() const { return sramecc_; } + /// @returns XNACK feature status. - const IsaFeature &xnack() const { + IsaFeature GetXnack() const { return xnack_; } + /// @returns This Isa's supported wavefront. - const Wavefront &wavefront() const { + const Wavefront &GetWavefront() const { return wavefront_; } @@ -135,43 +140,26 @@ class Isa final: public amd::hsa::common::Signed<0xB13594F2BD8F212D> { bool IsSrameccSupported() const { return sramecc_ != IsaFeature::Unsupported; } + /// @returns True if XNACK feature is supported, false otherwise. bool IsXnackSupported() const { return xnack_ != IsaFeature::Unsupported; } - /// @returns This Isa's architecture. - std::string GetArchitecture() const { - return "amdgcn"; - } - /// @returns This Isa's vendor. - std::string GetVendor() const { - return "amd"; - } - /// @returns This Isa's OS. - std::string GetOS() const { - return "amdhsa"; - } - /// @returns This Isa's environment. - std::string GetEnvironment() const { - return ""; - } /// @returns This Isa's major version. int32_t GetMajorVersion() const { return std::get<0>(version_); } + /// @returns This Isa's minor version. int32_t GetMinorVersion() const { return std::get<1>(version_); } + /// @returns This Isa's stepping. int32_t GetStepping() const { return std::get<2>(version_); } - /// @returns Pointer to this Isa's supported wavefront. - const Wavefront *GetWavefront() const { - return &wavefront_; - } /// @brief Isa is always in valid state. bool IsValid() const { @@ -179,10 +167,10 @@ class Isa final: public amd::hsa::common::Signed<0xB13594F2BD8F212D> { } /// @returns This Isa's processor name. - std::string GetName() const; + std::string GetProcessorName() const; - /// @returns This Isa's full target triple and target ID name. - std::string GetFullName() const; + /// @returns This Isa's name consisting of the target triple and target ID. + std::string GetIsaName() const; /// @brief Query value of requested @p attribute and record it in @p value. bool GetInfo(const hsa_isa_info_t &attribute, void *value) const; @@ -227,6 +215,7 @@ class IsaRegistry final { public: /// @returns Isa for requested @p full_name, null pointer if not supported. static const Isa *GetIsa(const std::string &full_name); + /// @returns Isa for requested @p version, null pointer if not supported. static const Isa *GetIsa(const Isa::Version &version, IsaFeature sramecc = IsaFeature::Any, @@ -241,6 +230,7 @@ class IsaRegistry final { /// @brief Default constructor - not available. IsaRegistry(); + /// @brief Default destructor - not available. ~IsaRegistry(); diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp index be390bed52..7dd6900eb0 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp @@ -146,7 +146,7 @@ hsa_status_t BlitSdma: return HSA_STATUS_ERROR; } - if (agent_->isa()->version() == core::Isa::Version(7, 0, 1)) { + if (agent_->isa()->GetVersion() == core::Isa::Version(7, 0, 1)) { platform_atomic_support_ = false; } else { const core::Runtime::LinkInfo& link = core::Runtime::runtime_singleton_->GetLinkInfo( 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 add3302f34..d322fb6cfc 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 @@ -731,7 +731,7 @@ hsa_status_t GpuAgent::GetInfo(hsa_agent_info_t attribute, void* value) const { switch (attribute_u) { case HSA_AGENT_INFO_NAME: { - std::string name = isa_->GetName(); + std::string name = isa_->GetProcessorName(); assert(name.size() <= hsa_name_size); std::memset(value, 0, hsa_name_size); char* temp = reinterpret_cast(value); diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/hsa.cpp b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/hsa.cpp index a3515ea8e6..e9f72adb31 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/hsa.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/hsa.cpp @@ -1659,10 +1659,9 @@ hsa_status_t hsa_isa_iterate_wavefronts( const Isa *isa_object = Isa::Object(isa); IS_VALID(isa_object); - const Wavefront *wavefront_object = isa_object->GetWavefront(); - assert(wavefront_object); + const Wavefront &wavefront_object = isa_object->GetWavefront(); - return callback(Wavefront::Handle(wavefront_object), data); + return callback(Wavefront::Handle(&wavefront_object), data); CATCH; } diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/isa.cpp b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/isa.cpp index b1fd4335d0..9769055a16 100755 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/isa.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/isa.cpp @@ -72,32 +72,32 @@ bool Wavefront::GetInfo( /* static */ bool Isa::IsCompatible(const Isa &code_object_isa, const Isa &agent_isa) { - if (code_object_isa.version() != agent_isa.version()) + if (code_object_isa.GetVersion() != agent_isa.GetVersion()) return false; - assert(code_object_isa.IsSrameccSupported() == agent_isa.IsSrameccSupported() && agent_isa.sramecc() != IsaFeature::Any); - if ((code_object_isa.sramecc() == IsaFeature::Enabled || - code_object_isa.sramecc() == IsaFeature::Disabled) && - code_object_isa.sramecc() != agent_isa.sramecc()) + assert(code_object_isa.IsSrameccSupported() == agent_isa.IsSrameccSupported() && agent_isa.GetSramecc() != IsaFeature::Any); + if ((code_object_isa.GetSramecc() == IsaFeature::Enabled || + code_object_isa.GetSramecc() == IsaFeature::Disabled) && + code_object_isa.GetSramecc() != agent_isa.GetSramecc()) return false; - assert(code_object_isa.IsXnackSupported() == agent_isa.IsXnackSupported() && agent_isa.xnack() != IsaFeature::Any); - if ((code_object_isa.xnack() == IsaFeature::Enabled || - code_object_isa.xnack() == IsaFeature::Disabled) && - code_object_isa.xnack() != agent_isa.xnack()) + assert(code_object_isa.IsXnackSupported() == agent_isa.IsXnackSupported() && agent_isa.GetXnack() != IsaFeature::Any); + if ((code_object_isa.GetXnack() == IsaFeature::Enabled || + code_object_isa.GetXnack() == IsaFeature::Disabled) && + code_object_isa.GetXnack() != agent_isa.GetXnack()) return false; return true; } -std::string Isa::GetName() const { +std::string Isa::GetProcessorName() const { std::string processor(targetid_); return processor.substr(0, processor.find(':')); } -std::string Isa::GetFullName() const { - return GetArchitecture() + '-' + GetVendor() + '-' + GetOS() + '-' + GetEnvironment() + '-' + - targetid_; +std::string Isa::GetIsaName() const { + constexpr char hsa_isa_name_prefix[] = "amdgcn-amd-amdhsa--"; + return std::string(hsa_isa_name_prefix) + targetid_; } bool Isa::GetInfo(const hsa_isa_info_t &attribute, void *value) const { @@ -107,14 +107,14 @@ bool Isa::GetInfo(const hsa_isa_info_t &attribute, void *value) const { switch (attribute) { case HSA_ISA_INFO_NAME_LENGTH: { - std::string full_name = GetFullName(); - *((uint32_t*)value) = static_cast(full_name.size() + 1); + std::string isa_name = GetIsaName(); + *((uint32_t*)value) = static_cast(isa_name.size() + 1); return true; } case HSA_ISA_INFO_NAME: { - std::string full_name = GetFullName(); - memset(value, 0x0, full_name.size() + 1); - memcpy(value, full_name.c_str(), full_name.size()); + std::string isa_name = GetIsaName(); + memset(value, 0x0, isa_name.size() + 1); + memcpy(value, isa_name.c_str(), isa_name.size()); return true; } // deprecated. @@ -139,8 +139,8 @@ bool Isa::GetInfo(const hsa_isa_info_t &attribute, void *value) const { } case HSA_ISA_INFO_PROFILES: { bool profiles[2] = {true, false}; - if (this->version() == Version(7, 0, 0) || - this->version() == Version(8, 0, 1)) { + if (this->GetVersion() == Version(7, 0, 0) || + this->GetVersion() == Version(8, 0, 1)) { profiles[1] = true; } memcpy(value, profiles, sizeof(profiles)); @@ -206,8 +206,8 @@ const Isa *IsaRegistry::GetIsa(const std::string &full_name) { const Isa *IsaRegistry::GetIsa(const Isa::Version &version, IsaFeature sramecc, IsaFeature xnack) { auto isareg_iter = std::find_if( supported_isas_.begin(), supported_isas_.end(), [&](const IsaMap::value_type& isareg) { - return isareg.second.version() == version && isareg.second.sramecc() == sramecc && - isareg.second.xnack() == xnack; + return isareg.second.GetVersion() == version && isareg.second.GetSramecc() == sramecc && + isareg.second.GetXnack() == xnack; }); return isareg_iter == supported_isas_.end() ? nullptr : &isareg_iter->second; } @@ -229,7 +229,7 @@ constexpr size_t hsa_name_size = 63; amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack.sramecc_ = sramecc; \ amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack.xnack_ = xnack; \ supported_isas.insert(std::make_pair( \ - amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack.GetFullName(), \ + amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack.GetIsaName(), \ amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack)); \ IsaMap supported_isas;