SWDEV-263435 - Get code object version the correct way
Change-Id: I18877c116e2f013ec9d04411258c0df8cc0159b3
[ROCm/clr commit: b9520ce4cd]
Этот коммит содержится в:
@@ -1136,7 +1136,8 @@ bool Kernel::GetAttrCodePropMetadata() {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3: {
|
||||
case 3:
|
||||
case 4: {
|
||||
status = amd::Comgr::iterate_map_metadata(kernelMetaNode, populateKernelMetaV3,
|
||||
static_cast<void*>(this));
|
||||
}
|
||||
@@ -1284,7 +1285,7 @@ void Kernel::InitParameters(const amd_comgr_metadata_node_t kernelMD) {
|
||||
if (codeObjectVer() == 2) {
|
||||
status = amd::Comgr::iterate_map_metadata(argsNode, populateArgs, data);
|
||||
}
|
||||
else if (codeObjectVer() == 3) {
|
||||
else if ((codeObjectVer() == 3) || (codeObjectVer() == 4)) {
|
||||
status = amd::Comgr::iterate_map_metadata(argsNode, populateArgsV3, data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2340,12 +2340,72 @@ bool Program::createKernelMetadataMap() {
|
||||
codeObjectVer_ = 2;
|
||||
}
|
||||
else {
|
||||
amd_comgr_metadata_node_t versionMD, versionNode;
|
||||
char major_version, minor_version;
|
||||
|
||||
status = amd::Comgr::metadata_lookup(metadata_, "amdhsa.version", &versionMD);
|
||||
|
||||
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "No amdhsa.version metadata found.");
|
||||
return false;
|
||||
}
|
||||
|
||||
status = amd::Comgr::index_list_metadata(versionMD, 0, &versionNode);
|
||||
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "Cannot get code object metadata major version node.");
|
||||
amd::Comgr::destroy_metadata(versionMD);
|
||||
return false;
|
||||
}
|
||||
|
||||
size = 1;
|
||||
status = amd::Comgr::get_metadata_string(versionNode, &size, &major_version);
|
||||
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "Cannot get code object metadata major version.");
|
||||
amd::Comgr::destroy_metadata(versionNode);
|
||||
amd::Comgr::destroy_metadata(versionMD);
|
||||
return false;
|
||||
}
|
||||
amd::Comgr::destroy_metadata(versionNode);
|
||||
|
||||
status = amd::Comgr::index_list_metadata(versionMD, 1, &versionNode);
|
||||
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "Cannot get code object metadata minor version node.");
|
||||
amd::Comgr::destroy_metadata(versionMD);
|
||||
return false;
|
||||
}
|
||||
|
||||
size = 1;
|
||||
status = amd::Comgr::get_metadata_string(versionNode, &size, &minor_version);
|
||||
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "Cannot get code object metadata minor version.");
|
||||
amd::Comgr::destroy_metadata(versionNode);
|
||||
amd::Comgr::destroy_metadata(versionMD);
|
||||
return false;
|
||||
}
|
||||
amd::Comgr::destroy_metadata(versionNode);
|
||||
|
||||
amd::Comgr::destroy_metadata(versionMD);
|
||||
|
||||
if (major_version == '1') {
|
||||
if (minor_version == '0') {
|
||||
ClPrint(amd::LOG_INFO, amd::LOG_CODE, "Using Code Object V3.");
|
||||
codeObjectVer_ = 3;
|
||||
} else if (minor_version == '1') {
|
||||
ClPrint(amd::LOG_INFO, amd::LOG_CODE, "Using Code Object V4.");
|
||||
codeObjectVer_ = 4;
|
||||
} else {
|
||||
ClPrint(amd::LOG_ERROR, amd::LOG_CODE,
|
||||
"Unknown code object metadata minor version [%s.%s].", major_version, minor_version);
|
||||
}
|
||||
} else {
|
||||
ClPrint(amd::LOG_ERROR, amd::LOG_CODE,
|
||||
"Unknown code object metadata major version [%s.%s].", major_version, minor_version);
|
||||
}
|
||||
|
||||
status = amd::Comgr::metadata_lookup(metadata_, "amdhsa.kernels", &kernelsMD);
|
||||
|
||||
if (status == AMD_COMGR_STATUS_SUCCESS) {
|
||||
ClPrint(amd::LOG_INFO, amd::LOG_CODE, "Using Code Object V3.");
|
||||
hasKernelMD = true;
|
||||
codeObjectVer_ = 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user