P4 to Git Change 2033779 by kjayapra@0_HIPWS_LNX1_ROCM on 2019/11/20 07:17:56

SWDEV-144570 - Update function global during hipModuleLoad.

Affected files ...

... //depot/stg/opencl/drivers/opencl/api/hip/hip_internal.hpp#47 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_module.cpp#48 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_platform.cpp#50 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devprogram.cpp#69 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devprogram.hpp#35 edit
This commit is contained in:
foreman
2019-11-20 07:24:20 -05:00
parent 02f8c57eb5
commit 3705a045f0
3 changed files with 36 additions and 9 deletions
+28 -2
View File
@@ -114,6 +114,28 @@ extern bool __hipExtractCodeObjectFromFatBinary(const void* data,
const std::vector<const char*>& devices,
std::vector<std::pair<const void*, size_t>>& code_objs);
bool ihipModuleRegisterFunc(amd::Program* program, hipModule_t* module) {
std::vector<std::string> func_names;
device::Program* dev_program
= program->getDeviceProgram(*hip::getCurrentContext()->devices()[0]);
if (!dev_program->getFuncsFromCodeObj(&func_names)) {
return false;
}
for (auto it = func_names.begin(); it != func_names.end(); ++it) {
auto modules = new std::vector<std::pair<hipModule_t, bool>>(g_devices.size());
for (size_t dev = 0; dev < g_devices.size(); ++dev) {
modules->at(dev) = std::make_pair(*module, true);
}
PlatformState::DeviceFunction dfunc{std::string{it->c_str()}, modules,
std::vector<hipFunction_t>(g_devices.size())};
PlatformState::instance().registerFunction(it->c_str(), dfunc);
}
return true;
}
bool ihipModuleRegisterUndefined(amd::Program* program, hipModule_t* module) {
std::vector<std::string> undef_vars;
@@ -125,7 +147,7 @@ bool ihipModuleRegisterUndefined(amd::Program* program, hipModule_t* module) {
}
for (auto it = undef_vars.begin(); it != undef_vars.end(); ++it) {
auto modules = new std::vector<std::pair<hipModule_t, bool> >{g_devices.size()};
auto modules = new std::vector<std::pair<hipModule_t, bool> >(g_devices.size());
for (size_t dev = 0; dev < g_devices.size(); ++dev) {
modules->at(dev) = std::make_pair(*module, true);
}
@@ -156,7 +178,7 @@ bool ihipModuleRegisterGlobal(amd::Program* program, hipModule_t* module) {
}
for (auto it = var_names.begin(); it != var_names.end(); ++it) {
auto modules = new std::vector<std::pair<hipModule_t, bool> >{g_devices.size()};
auto modules = new std::vector<std::pair<hipModule_t, bool> >(g_devices.size());
for (size_t dev = 0; dev < g_devices.size(); ++dev) {
modules->at(dev) = std::make_pair(*module, true);
}
@@ -196,6 +218,10 @@ hipError_t ihipModuleLoadData(hipModule_t *module, const void *image)
return hipErrorSharedObjectSymbolNotFound;
}
if (!ihipModuleRegisterFunc(program, module)) {
return hipErrorSharedObjectSymbolNotFound;
}
if(CL_SUCCESS != program->build(hip::getCurrentContext()->devices(), nullptr, nullptr, nullptr)) {
return hipErrorSharedObjectInitFailed;
}