P4 to Git Change 2045900 by gandryey@gera-win10 on 2019/12/13 17:41:59
SWDEV-197836 - Drop the use of llvm header files in opencl runtime
- Eliminate LC driver path from runtime
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/device.cpp#248 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/device.hpp#345 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devkernel.cpp#31 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devkernel.hpp#20 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devprogram.cpp#74 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/devprogram.hpp#39 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.cpp#179 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palkernel.cpp#85 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palmemory.cpp#30 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprogram.cpp#101 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocdevice.cpp#146 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#54 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#109 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#93 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/program.cpp#107 edit
[ROCm/clr commit: b4d64363f6]
This commit is contained in:
@@ -426,174 +426,6 @@ char* Device::getExtensionString() {
|
||||
return result;
|
||||
}
|
||||
|
||||
#if defined(WITH_LIGHTNING_COMPILER) && !defined(USE_COMGR_LIBRARY)
|
||||
CacheCompilation::CacheCompilation(std::string targetStr, std::string postfix, bool enableCache,
|
||||
bool resetCache)
|
||||
: codeCache_(targetStr, 0, AMD_PLATFORM_BUILD_NUMBER, postfix),
|
||||
isCodeCacheEnabled_(enableCache) {
|
||||
if (resetCache) {
|
||||
// clean up the cached data of the target device
|
||||
StringCache emptyCache(targetStr, 0, 0, postfix);
|
||||
}
|
||||
}
|
||||
|
||||
bool CacheCompilation::linkLLVMBitcode(amd::opencl_driver::Compiler* C,
|
||||
std::vector<amd::opencl_driver::Data*>& inputs,
|
||||
amd::opencl_driver::Buffer* output,
|
||||
std::vector<std::string>& options, std::string& buildLog) {
|
||||
std::string cacheOpt;
|
||||
cacheOpt = std::accumulate(begin(options), end(options), cacheOpt);
|
||||
|
||||
bool ret = false;
|
||||
bool cachedCodeExist = false;
|
||||
std::vector<StringCache::CachedData> bcSet;
|
||||
if (isCodeCacheEnabled_) {
|
||||
using namespace amd::opencl_driver;
|
||||
|
||||
for (auto& input : inputs) {
|
||||
assert(input->Type() == DT_LLVM_BC);
|
||||
|
||||
BufferReference* bc = reinterpret_cast<BufferReference*>(input);
|
||||
StringCache::CachedData cachedData = {bc->Ptr(), bc->Size()};
|
||||
bcSet.push_back(cachedData);
|
||||
}
|
||||
|
||||
std::string dstData = "";
|
||||
if (codeCache_.getCacheEntry(isCodeCacheEnabled_, bcSet.data(), bcSet.size(), cacheOpt, dstData,
|
||||
"Link LLVM Bitcodes")) {
|
||||
std::copy(dstData.begin(), dstData.end(), std::back_inserter(output->Buf()));
|
||||
cachedCodeExist = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cachedCodeExist) {
|
||||
if (!C->LinkLLVMBitcode(inputs, output, options)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isCodeCacheEnabled_) {
|
||||
std::string dstData(output->Buf().data(), output->Buf().size());
|
||||
if (!codeCache_.makeCacheEntry(bcSet.data(), bcSet.size(), cacheOpt, dstData)) {
|
||||
buildLog += "Warning: Failed to caching codes.\n";
|
||||
LogWarning("Caching codes failed!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CacheCompilation::compileToLLVMBitcode(amd::opencl_driver::Compiler* C,
|
||||
std::vector<amd::opencl_driver::Data*>& inputs,
|
||||
amd::opencl_driver::Buffer* output,
|
||||
std::vector<std::string>& options,
|
||||
std::string& buildLog) {
|
||||
std::string cacheOpt;
|
||||
for (uint i = 0; i < options.size(); i++) {
|
||||
// skip the header file option, which is associated with the -cl-std=<CLstd> option
|
||||
if (options[i].compare("-include-pch") == 0) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
cacheOpt += options[i];
|
||||
}
|
||||
|
||||
bool ret = false;
|
||||
bool cachedCodeExist = false;
|
||||
std::vector<StringCache::CachedData> bcSet;
|
||||
if (isCodeCacheEnabled_) {
|
||||
using namespace amd::opencl_driver;
|
||||
|
||||
bool checkCache = true;
|
||||
for (auto& input : inputs) {
|
||||
if (input->Type() == DT_CL) {
|
||||
BufferReference* bc = reinterpret_cast<BufferReference*>(input);
|
||||
StringCache::CachedData cachedData = {bc->Ptr(), bc->Size()};
|
||||
bcSet.push_back(cachedData);
|
||||
} else if (input->Type() == DT_CL_HEADER) {
|
||||
FileReference* bcFile = reinterpret_cast<FileReference*>(input);
|
||||
std::string bc;
|
||||
bcFile->ReadToString(bc);
|
||||
StringCache::CachedData cachedData = {bc.c_str(), bc.size()};
|
||||
bcSet.push_back(cachedData);
|
||||
} else {
|
||||
buildLog += "Error: unsupported bitcode type for checking cache.\n";
|
||||
checkCache = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
std::string dstData = "";
|
||||
if (checkCache &&
|
||||
codeCache_.getCacheEntry(isCodeCacheEnabled_, bcSet.data(), bcSet.size(), cacheOpt, dstData,
|
||||
"Compile to LLVM Bitcodes")) {
|
||||
std::copy(dstData.begin(), dstData.end(), std::back_inserter(output->Buf()));
|
||||
cachedCodeExist = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cachedCodeExist) {
|
||||
if (!C->CompileToLLVMBitcode(inputs, output, options)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isCodeCacheEnabled_) {
|
||||
std::string dstData(output->Buf().data(), output->Buf().size());
|
||||
if (!codeCache_.makeCacheEntry(bcSet.data(), bcSet.size(), cacheOpt, dstData)) {
|
||||
buildLog += "Warning: Failed to caching codes.\n";
|
||||
LogWarning("Caching codes failed!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CacheCompilation::compileAndLinkExecutable(amd::opencl_driver::Compiler* C,
|
||||
std::vector<amd::opencl_driver::Data*>& inputs,
|
||||
amd::opencl_driver::Buffer* output,
|
||||
std::vector<std::string>& options,
|
||||
std::string& buildLog) {
|
||||
std::string cacheOpt;
|
||||
cacheOpt = std::accumulate(begin(options), end(options), cacheOpt);
|
||||
|
||||
bool ret = false;
|
||||
bool cachedCodeExist = false;
|
||||
std::vector<StringCache::CachedData> bcSet;
|
||||
if (isCodeCacheEnabled_) {
|
||||
for (auto& input : inputs) {
|
||||
assert(input->Type() == amd::opencl_driver::DT_LLVM_BC);
|
||||
|
||||
amd::opencl_driver::Buffer* bc = (amd::opencl_driver::Buffer*)input;
|
||||
StringCache::CachedData cachedData = {bc->Buf().data(), bc->Size()};
|
||||
bcSet.push_back(cachedData);
|
||||
}
|
||||
|
||||
std::string dstData = "";
|
||||
if (codeCache_.getCacheEntry(isCodeCacheEnabled_, bcSet.data(), bcSet.size(), cacheOpt, dstData,
|
||||
"Compile and Link Executable")) {
|
||||
std::copy(dstData.begin(), dstData.end(), std::back_inserter(output->Buf()));
|
||||
cachedCodeExist = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cachedCodeExist) {
|
||||
if (!C->CompileAndLinkExecutable(inputs, output, options)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isCodeCacheEnabled_) {
|
||||
std::string dstData(output->Buf().data(), output->Buf().size());
|
||||
if (!codeCache_.makeCacheEntry(bcSet.data(), bcSet.size(), cacheOpt, dstData)) {
|
||||
buildLog += "Warning: Failed to caching codes.\n";
|
||||
LogWarning("Caching codes failed!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif // defined(WITH_LIGHTNING_COMPILER) && ! defined(USE_COMGR_LIBRARY)
|
||||
|
||||
} // namespace amd
|
||||
|
||||
|
||||
Reference in New Issue
Block a user