rocr: supported_isas map elements should persist
The supported_isas static unordered_map was adding stack allocated Isa objects. Instead, make the objects statically allocated, as supported_isas itself is. Change-Id: I23405e218290d48deea6f984f76c57e7b43e314e
Этот коммит содержится в:
@@ -226,7 +226,7 @@ class IsaRegistry final {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
/// @brief IsaRegistry's map type.
|
/// @brief IsaRegistry's map type.
|
||||||
typedef std::unordered_map<std::string, Isa> IsaMap;
|
typedef std::unordered_map<std::string, std::reference_wrapper<const Isa>> IsaMap;
|
||||||
|
|
||||||
/// @brief Default constructor
|
/// @brief Default constructor
|
||||||
IsaRegistry() = delete;
|
IsaRegistry() = delete;
|
||||||
|
|||||||
@@ -201,21 +201,21 @@ hsa_round_method_t Isa::GetRoundMethod(
|
|||||||
const Isa *IsaRegistry::GetIsa(const std::string &full_name) {
|
const Isa *IsaRegistry::GetIsa(const std::string &full_name) {
|
||||||
auto isareg_iter = GetSupportedIsas().find(full_name);
|
auto isareg_iter = GetSupportedIsas().find(full_name);
|
||||||
return isareg_iter == GetSupportedIsas().end() ?
|
return isareg_iter == GetSupportedIsas().end() ?
|
||||||
nullptr : &isareg_iter->second;
|
nullptr : &isareg_iter->second.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
const Isa *IsaRegistry::GetIsa(const Isa::Version &version, IsaFeature sramecc, IsaFeature xnack) {
|
const Isa *IsaRegistry::GetIsa(const Isa::Version &version, IsaFeature sramecc, IsaFeature xnack) {
|
||||||
auto isareg_iter = std::find_if(GetSupportedIsas().begin(),
|
auto isareg_iter = std::find_if(GetSupportedIsas().begin(),
|
||||||
GetSupportedIsas().end(),
|
GetSupportedIsas().end(),
|
||||||
[&](const IsaMap::value_type& isareg) {
|
[&](const IsaMap::value_type& isareg) {
|
||||||
return isareg.second.GetVersion() == version &&
|
return isareg.second.get().GetVersion() == version &&
|
||||||
(isareg.second.GetSramecc() == IsaFeature::Unsupported ||
|
(isareg.second.get().GetSramecc() == IsaFeature::Unsupported ||
|
||||||
isareg.second.GetSramecc() == sramecc) &&
|
isareg.second.get().GetSramecc() == sramecc) &&
|
||||||
(isareg.second.GetXnack() == IsaFeature::Unsupported ||
|
(isareg.second.get().GetXnack() == IsaFeature::Unsupported ||
|
||||||
isareg.second.GetXnack() == xnack);
|
isareg.second.get().GetXnack() == xnack);
|
||||||
});
|
});
|
||||||
return isareg_iter == GetSupportedIsas().end() ?
|
return isareg_iter == GetSupportedIsas().end() ?
|
||||||
nullptr : &isareg_iter->second;
|
nullptr : &isareg_iter->second.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -227,7 +227,7 @@ constexpr size_t hsa_name_size = 63;
|
|||||||
// FIXME: Use static_assert when C++17 used.
|
// FIXME: Use static_assert when C++17 used.
|
||||||
#define ISAREG_ENTRY_GEN(name, maj, min, stp, sramecc, xnack, wavefrontsize) \
|
#define ISAREG_ENTRY_GEN(name, maj, min, stp, sramecc, xnack, wavefrontsize) \
|
||||||
assert(std::char_traits<char>::length(name) <= hsa_name_size); \
|
assert(std::char_traits<char>::length(name) <= hsa_name_size); \
|
||||||
Isa amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize; \
|
static Isa amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize; \
|
||||||
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.targetid_ = name; \
|
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.targetid_ = name; \
|
||||||
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.version_ = Isa::Version(maj, min, stp); \
|
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.version_ = Isa::Version(maj, min, stp); \
|
||||||
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.sramecc_ = sramecc; \
|
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.sramecc_ = sramecc; \
|
||||||
@@ -235,7 +235,7 @@ constexpr size_t hsa_name_size = 63;
|
|||||||
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.wavefront_.num_threads_ = wavefrontsize; \
|
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.wavefront_.num_threads_ = wavefrontsize; \
|
||||||
supported_isas.insert(std::make_pair( \
|
supported_isas.insert(std::make_pair( \
|
||||||
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.GetIsaName(), \
|
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize.GetIsaName(), \
|
||||||
amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize)); \
|
std::ref(amd_amdgpu_##maj##min##stp##_SRAMECC_##sramecc##_XNACK_##xnack##_WAVEFRONTSIZE_##wavefrontsize))); \
|
||||||
|
|
||||||
static IsaMap supported_isas;
|
static IsaMap supported_isas;
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user