P4 to Git Change 1972494 by kjayapra@0_HIPWS_P2P1_ROCM on 2019/07/23 20:01:13
SWDEV-144570 - Handling variable register during hipModuleLoad.
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/hip/hip_internal.hpp#31 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_module.cpp#30 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_platform.cpp#34 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devprogram.cpp#51 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devprogram.hpp#30 edit
[ROCm/clr commit: 36f69cbf76]
This commit is contained in:
@@ -3097,4 +3097,67 @@ bool Program::FindGlobalVarSize(void* binary, size_t binSize) {
|
|||||||
#endif // defined(WITH_LIGHTNING_COMPILER) || defined(USE_COMGR_LIBRARY)
|
#endif // defined(WITH_LIGHTNING_COMPILER) || defined(USE_COMGR_LIBRARY)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
amd_comgr_status_t getSymbolFromModule(amd_comgr_symbol_t symbol, void* userData) {
|
||||||
|
size_t nlen;
|
||||||
|
amd_comgr_status_t status;
|
||||||
|
amd_comgr_symbol_type_t type;
|
||||||
|
std::vector<std::string>* var_names = reinterpret_cast<std::vector<std::string>*>(userData);
|
||||||
|
|
||||||
|
/* Retrieve the symbol info */
|
||||||
|
status = amd::Comgr::symbol_get_info(symbol, AMD_COMGR_SYMBOL_INFO_NAME_LENGTH, &nlen);
|
||||||
|
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Retrieve the symbol name */
|
||||||
|
char* name = new char[nlen + 1];
|
||||||
|
status = amd::Comgr::symbol_get_info(symbol, AMD_COMGR_SYMBOL_INFO_NAME, name);
|
||||||
|
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Retrieve the symbol type*/
|
||||||
|
status = amd::Comgr::symbol_get_info(symbol, AMD_COMGR_SYMBOL_INFO_TYPE, &type);
|
||||||
|
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If symbol type is object(Variable) add it to vector */
|
||||||
|
if (type == AMD_COMGR_SYMBOL_TYPE_OBJECT) {
|
||||||
|
var_names->push_back(std::string(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[] name;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Program::getGlobalSymbolsFromCodeObj(std::vector<std::string>* var_names) const {
|
||||||
|
amd_comgr_status_t status = AMD_COMGR_STATUS_SUCCESS;
|
||||||
|
amd_comgr_data_t dataObject;
|
||||||
|
|
||||||
|
/* Create comgr data */
|
||||||
|
status = amd::Comgr::create_data(AMD_COMGR_DATA_KIND_EXECUTABLE, &dataObject);
|
||||||
|
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||||
|
buildLog_ += "COMGR: Cannot create comgr data \n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the binary as a dataObject */
|
||||||
|
status = amd::Comgr::set_data(dataObject,static_cast<size_t>(clBinary_->data().second),
|
||||||
|
reinterpret_cast<const char*>(clBinary_->data().first));
|
||||||
|
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||||
|
buildLog_ += "COMGR: Cannot set comgr data \n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Iterate through list of symbols */
|
||||||
|
status = amd::Comgr::iterate_symbols(dataObject, getSymbolFromModule, var_names);
|
||||||
|
if (status != AMD_COMGR_STATUS_SUCCESS) {
|
||||||
|
buildLog_ += "COMGR: Cannot iterate comgr symbols \n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -228,6 +228,8 @@ class Program : public amd::HeapObject {
|
|||||||
//! Check if SRAM ECC is enable
|
//! Check if SRAM ECC is enable
|
||||||
const bool sramEccEnable() const { return (sramEccEnabled_ == 1); }
|
const bool sramEccEnable() const { return (sramEccEnabled_ == 1); }
|
||||||
|
|
||||||
|
virtual bool getGlobalSymbolsFromCodeObj(std::vector<std::string>* var_names) const;
|
||||||
|
|
||||||
virtual bool createGlobalVarObj(amd::Memory** amd_mem_obj, void** dptr,
|
virtual bool createGlobalVarObj(amd::Memory** amd_mem_obj, void** dptr,
|
||||||
size_t* bytes, const char* globalName) const {
|
size_t* bytes, const char* globalName) const {
|
||||||
ShouldNotReachHere();
|
ShouldNotReachHere();
|
||||||
|
|||||||
Reference in New Issue
Block a user