P4 to Git Change 1987529 by kjayapra@4_HIPWS_RCCM_ROCM on 2019/08/22 12:32:42
SWDEV-200625 - Reverting back CL#1986255. Affected files ... ... //depot/stg/opencl/drivers/opencl/api/hip/hip_internal.hpp#38 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_module.cpp#35 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_platform.cpp#39 edit
This commit is contained in:
+37
-65
@@ -70,38 +70,27 @@ hipError_t hipModuleLoad(hipModule_t* module, const char* fname)
|
||||
HIP_RETURN(ihipModuleLoadData(module, tmp.data()));
|
||||
}
|
||||
|
||||
bool ihipModuleUnload(std::vector< std::pair<hipModule_t, bool> >* modules) {
|
||||
|
||||
if (modules == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PlatformState::instance().unregisterVar(modules);
|
||||
|
||||
std::for_each(modules->begin(), modules->end(), [](std::pair<hipModule_t, bool> module) {
|
||||
if (module.first != nullptr) {
|
||||
as_amd(reinterpret_cast<cl_program>(module.first))->release();
|
||||
}
|
||||
});
|
||||
|
||||
PlatformState::instance().unregisterMod((*modules)[0].first);
|
||||
delete modules;
|
||||
bool ihipModuleUnregisterGlobal(hipModule_t hmod) {
|
||||
PlatformState::instance().unregisterVar(hmod);
|
||||
return true;
|
||||
}
|
||||
|
||||
hipError_t hipModuleUnload(hipModule_t hmod) {
|
||||
hipError_t hipModuleUnload(hipModule_t hmod)
|
||||
{
|
||||
HIP_INIT_API(hmod);
|
||||
|
||||
std::vector< std::pair<hipModule_t, bool> >* modules
|
||||
= PlatformState::instance().findModules(hmod);
|
||||
if (modules == nullptr) {
|
||||
if (hmod == nullptr) {
|
||||
HIP_RETURN(hipErrorUnknown);
|
||||
}
|
||||
|
||||
if (!ihipModuleUnload(modules)) {
|
||||
amd::Program* program = as_amd(reinterpret_cast<cl_program>(hmod));
|
||||
|
||||
if(!ihipModuleUnregisterGlobal(hmod)) {
|
||||
HIP_RETURN(hipErrorUnknown);
|
||||
}
|
||||
|
||||
program->release();
|
||||
|
||||
HIP_RETURN(hipSuccess);
|
||||
}
|
||||
|
||||
@@ -116,19 +105,25 @@ extern bool __hipExtractCodeObjectFromFatBinary(const void* data,
|
||||
const std::vector<const char*>& devices,
|
||||
std::vector<std::pair<const void*, size_t>>& code_objs);
|
||||
|
||||
bool ihipModuleRegisterGlobal(amd::Program* program, int device_id,
|
||||
std::vector< std::pair<hipModule_t, bool> >* modules) {
|
||||
bool ihipModuleRegisterGlobal(amd::Program* program, hipModule_t* module) {
|
||||
|
||||
size_t var_size = 0;
|
||||
hipDeviceptr_t device_ptr = nullptr;
|
||||
std::vector<std::string> var_names;
|
||||
|
||||
device::Program* dev_program
|
||||
= program->getDeviceProgram(*(g_devices[device_id]->devices()[0]));
|
||||
= program->getDeviceProgram(*hip::getCurrentContext()->devices()[0]);
|
||||
|
||||
if (!dev_program->getGlobalVarFromCodeObj(&var_names)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (auto it = var_names.begin(); it != var_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, false);
|
||||
}
|
||||
|
||||
PlatformState::DeviceVar dvar{nullptr, it->c_str(), 0, modules,
|
||||
std::vector<PlatformState::RegisteredVar>{ g_devices.size()} };
|
||||
PlatformState::instance().registerVar(it->c_str(), dvar);
|
||||
@@ -137,53 +132,30 @@ bool ihipModuleRegisterGlobal(amd::Program* program, int device_id,
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector< std::pair<hipModule_t, bool> >* ihipModuleLoadModule(const void* image) {
|
||||
std::vector<const char*> devices;
|
||||
hipError_t ihipModuleLoadData(hipModule_t *module, const void *image)
|
||||
{
|
||||
std::vector<std::pair<const void*, size_t>> code_objs;
|
||||
for (size_t dev = 0; dev < g_devices.size(); ++dev) {
|
||||
amd::Context* ctx = g_devices[dev];
|
||||
devices.push_back(ctx->devices()[0]->info().name_);
|
||||
if (__hipExtractCodeObjectFromFatBinary(image, {hip::getCurrentContext()->devices()[0]->info().name_}, code_objs))
|
||||
image = code_objs[0].first;
|
||||
|
||||
amd::Program* program = new amd::Program(*hip::getCurrentContext());
|
||||
if (program == NULL) {
|
||||
return hipErrorOutOfMemory;
|
||||
}
|
||||
|
||||
if (!__hipExtractCodeObjectFromFatBinary(image, devices, code_objs)) {
|
||||
return nullptr;
|
||||
}
|
||||
program->setVarInfoCallBack(&getSvarInfo);
|
||||
|
||||
auto programs = new std::vector< std::pair<hipModule_t, bool> >{g_devices.size()};
|
||||
for (size_t dev = 0; dev < g_devices.size(); ++dev) {
|
||||
amd::Context* ctx = g_devices[dev];
|
||||
amd::Program* program = new amd::Program(*ctx);
|
||||
if (program == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
if (CL_SUCCESS == program->addDeviceProgram(*ctx->devices()[0], code_objs[dev].first, code_objs[dev].second)) {
|
||||
programs->at(dev) = std::make_pair(reinterpret_cast<hipModule_t>(as_cl(program)), false);
|
||||
}
|
||||
}
|
||||
|
||||
PlatformState::DeviceModules dmod { programs };
|
||||
PlatformState::instance().registerMod((*dmod.modules)[0].first, dmod);
|
||||
|
||||
return programs;
|
||||
}
|
||||
|
||||
hipError_t ihipModuleLoadData(hipModule_t* module, const void* image) {
|
||||
std::vector< std::pair<hipModule_t, bool> >* modules = ihipModuleLoadModule(image);
|
||||
|
||||
for (size_t deviceId = 0; deviceId < modules->size(); ++deviceId) {
|
||||
amd::Program* program = as_amd(reinterpret_cast<cl_program>((*modules)[deviceId].first));
|
||||
program->setVarInfoCallBack(&getSvarInfo);
|
||||
program->build(g_devices[deviceId]->devices(), nullptr, nullptr, nullptr);
|
||||
(*modules)[deviceId].second = true;
|
||||
|
||||
if (static_cast<size_t>(ihipGetDevice()) == deviceId) {
|
||||
*module = reinterpret_cast<hipModule_t>(as_cl(program));
|
||||
}
|
||||
|
||||
if (!ihipModuleRegisterGlobal(program, deviceId, modules)) {
|
||||
if (CL_SUCCESS != program->addDeviceProgram(*hip::getCurrentContext()->devices()[0], image, ElfSize(image)) ||
|
||||
CL_SUCCESS != program->build(hip::getCurrentContext()->devices(), nullptr, nullptr, nullptr)) {
|
||||
return hipErrorUnknown;
|
||||
}
|
||||
}
|
||||
|
||||
*module = reinterpret_cast<hipModule_t>(as_cl(program));
|
||||
|
||||
if (!ihipModuleRegisterGlobal(program, module)) {
|
||||
return hipErrorUnknown;
|
||||
}
|
||||
|
||||
return hipSuccess;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user