P4 to Git Change 1390019 by kzhuravl@kzhuravl-fiji-cl-on-lc-git-overlay on 2017/03/23 18:19:56
SWDEV-102699 - Update runtime for upcoming metadata changes:
- https://reviews.llvm.org/D29948
- https://reviews.llvm.org/D29949
- https://reviews.llvm.org/D30969
- https://reviews.llvm.org/D30970
ReviewBoardURL: http://ocltc.amd.com/reviews/r/12486/
Testing: lightning ocl conformance locally + windows build
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/build/Makefile.pal#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palkernel.cpp#32 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palkernel.hpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprogram.cpp#37 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprogram.hpp#16 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/build/Makefile.oclrocm#13 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#21 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.hpp#15 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#60 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.hpp#21 edit
[ROCm/clr commit: d1e1688c89]
This commit is contained in:
@@ -1275,6 +1275,11 @@ HSAILKernel::loadArguments(
|
||||
|
||||
#if defined(WITH_LIGHTNING_COMPILER)
|
||||
|
||||
using llvm::AMDGPU::CodeObject::AccessQualifier;
|
||||
using llvm::AMDGPU::CodeObject::AddressSpaceQualifier;
|
||||
using llvm::AMDGPU::CodeObject::ValueKind;
|
||||
using llvm::AMDGPU::CodeObject::ValueType;
|
||||
|
||||
const LightningProgram&
|
||||
LightningKernel::prog() const
|
||||
{
|
||||
@@ -1374,31 +1379,31 @@ LightningKernel::initPrintf(const std::vector<std::string>& printfInfoStrings)
|
||||
}
|
||||
|
||||
static inline HSAIL_ARG_TYPE
|
||||
GetKernelArgType(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
GetKernelArgType(const KernelArgMD& lcArg)
|
||||
{
|
||||
switch (lcArg.Kind) {
|
||||
case AMDGPU::RuntimeMD::KernelArg::GlobalBuffer:
|
||||
case AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer:
|
||||
switch (lcArg.mValueKind) {
|
||||
case ValueKind::GlobalBuffer:
|
||||
case ValueKind::DynamicSharedPointer:
|
||||
return HSAIL_ARGTYPE_POINTER;
|
||||
case AMDGPU::RuntimeMD::KernelArg::ByValue:
|
||||
case ValueKind::ByValue:
|
||||
return HSAIL_ARGTYPE_VALUE;
|
||||
case AMDGPU::RuntimeMD::KernelArg::Image:
|
||||
case ValueKind::Image:
|
||||
return HSAIL_ARGTYPE_IMAGE;
|
||||
case AMDGPU::RuntimeMD::KernelArg::Sampler:
|
||||
case ValueKind::Sampler:
|
||||
return HSAIL_ARGTYPE_SAMPLER;
|
||||
case AMDGPU::RuntimeMD::KernelArg::HiddenGlobalOffsetX:
|
||||
case ValueKind::HiddenGlobalOffsetX:
|
||||
return HSAIL_ARGTYPE_HIDDEN_GLOBAL_OFFSET_X;
|
||||
case AMDGPU::RuntimeMD::KernelArg::HiddenGlobalOffsetY:
|
||||
case ValueKind::HiddenGlobalOffsetY:
|
||||
return HSAIL_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Y;
|
||||
case AMDGPU::RuntimeMD::KernelArg::HiddenGlobalOffsetZ:
|
||||
case ValueKind::HiddenGlobalOffsetZ:
|
||||
return HSAIL_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Z;
|
||||
case AMDGPU::RuntimeMD::KernelArg::HiddenPrintfBuffer:
|
||||
case ValueKind::HiddenPrintfBuffer:
|
||||
return HSAIL_ARGTYPE_HIDDEN_PRINTF_BUFFER;
|
||||
case AMDGPU::RuntimeMD::KernelArg::HiddenDefaultQueue:
|
||||
case ValueKind::HiddenDefaultQueue:
|
||||
return HSAIL_ARGTYPE_HIDDEN_DEFAULT_QUEUE;
|
||||
case AMDGPU::RuntimeMD::KernelArg::HiddenCompletionAction:
|
||||
case ValueKind::HiddenCompletionAction:
|
||||
return HSAIL_ARGTYPE_HIDDEN_COMPLETION_ACTION;
|
||||
case AMDGPU::RuntimeMD::KernelArg::HiddenNone:
|
||||
case ValueKind::HiddenNone:
|
||||
return HSAIL_ARGTYPE_HIDDEN_NONE;
|
||||
default:
|
||||
return HSAIL_ARGTYPE_ERROR;
|
||||
@@ -1406,16 +1411,16 @@ GetKernelArgType(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
GetKernelArgAlignment(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
GetKernelArgAlignment(const KernelArgMD& lcArg)
|
||||
{
|
||||
return lcArg.Align;
|
||||
return lcArg.mAlign;
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
GetKernelArgPointeeAlignment(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
GetKernelArgPointeeAlignment(const KernelArgMD& lcArg)
|
||||
{
|
||||
if (lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer) {
|
||||
uint32_t align = lcArg.PointeeAlign;
|
||||
if (lcArg.mValueKind == ValueKind::DynamicSharedPointer) {
|
||||
uint32_t align = lcArg.mPointeeAlign;
|
||||
if (align == 0) {
|
||||
LogWarning("Missing DynamicSharedPointer alignment");
|
||||
align = 128; /* worst case alignment */;
|
||||
@@ -1426,16 +1431,16 @@ GetKernelArgPointeeAlignment(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg
|
||||
}
|
||||
|
||||
static inline HSAIL_ACCESS_TYPE
|
||||
GetKernelArgAccessType(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
GetKernelArgAccessType(const KernelArgMD& lcArg)
|
||||
{
|
||||
if (lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::GlobalBuffer
|
||||
|| lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::Image) {
|
||||
switch (lcArg.AccQual) {
|
||||
case AMDGPU::RuntimeMD::KernelArg::ReadOnly:
|
||||
if (lcArg.mValueKind == ValueKind::GlobalBuffer
|
||||
|| lcArg.mValueKind == ValueKind::Image) {
|
||||
switch (lcArg.mAccQual) {
|
||||
case AccessQualifier::ReadOnly:
|
||||
return HSAIL_ACCESS_TYPE_RO;
|
||||
case AMDGPU::RuntimeMD::KernelArg::WriteOnly:
|
||||
case AccessQualifier::WriteOnly:
|
||||
return HSAIL_ACCESS_TYPE_WO;
|
||||
case AMDGPU::RuntimeMD::KernelArg::ReadWrite:
|
||||
case AccessQualifier::ReadWrite:
|
||||
default:
|
||||
return HSAIL_ACCESS_TYPE_RW;
|
||||
}
|
||||
@@ -1444,59 +1449,59 @@ GetKernelArgAccessType(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
}
|
||||
|
||||
static inline HSAIL_ADDRESS_QUALIFIER
|
||||
GetKernelAddrQual(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
GetKernelAddrQual(const KernelArgMD& lcArg)
|
||||
{
|
||||
if (lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer) {
|
||||
if (lcArg.mValueKind == ValueKind::DynamicSharedPointer) {
|
||||
return HSAIL_ADDRESS_LOCAL;
|
||||
}
|
||||
else if (lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::GlobalBuffer) {
|
||||
if (lcArg.AddrQual == AMDGPU::RuntimeMD::KernelArg::Global) {
|
||||
else if (lcArg.mValueKind == ValueKind::GlobalBuffer) {
|
||||
if (lcArg.mAddrSpaceQual == AddressSpaceQualifier::Global) {
|
||||
return HSAIL_ADDRESS_GLOBAL;
|
||||
}
|
||||
else if (lcArg.AddrQual == AMDGPU::RuntimeMD::KernelArg::Constant) {
|
||||
else if (lcArg.mAddrSpaceQual == AddressSpaceQualifier::Constant) {
|
||||
return HSAIL_ADDRESS_CONSTANT;
|
||||
}
|
||||
LogError("Unsupported address type");
|
||||
return HSAIL_ADDRESS_ERROR;
|
||||
}
|
||||
else if (lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::Image
|
||||
|| lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::Sampler) {
|
||||
else if (lcArg.mValueKind == ValueKind::Image
|
||||
|| lcArg.mValueKind == ValueKind::Sampler) {
|
||||
return HSAIL_ADDRESS_GLOBAL;
|
||||
}
|
||||
return HSAIL_ADDRESS_ERROR;
|
||||
}
|
||||
|
||||
static inline HSAIL_DATA_TYPE
|
||||
GetKernelDataType(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
GetKernelDataType(const KernelArgMD& lcArg)
|
||||
{
|
||||
if (lcArg.Kind != AMDGPU::RuntimeMD::KernelArg::ByValue) {
|
||||
if (lcArg.mValueKind != ValueKind::ByValue) {
|
||||
return HSAIL_DATATYPE_ERROR;
|
||||
}
|
||||
|
||||
switch (lcArg.ValueType) {
|
||||
case AMDGPU::RuntimeMD::KernelArg::I8:
|
||||
switch (lcArg.mValueType) {
|
||||
case ValueType::I8:
|
||||
return HSAIL_DATATYPE_S8;
|
||||
case AMDGPU::RuntimeMD::KernelArg::I16:
|
||||
case ValueType::I16:
|
||||
return HSAIL_DATATYPE_S16;
|
||||
case AMDGPU::RuntimeMD::KernelArg::I32:
|
||||
case ValueType::I32:
|
||||
return HSAIL_DATATYPE_S32;
|
||||
case AMDGPU::RuntimeMD::KernelArg::I64:
|
||||
case ValueType::I64:
|
||||
return HSAIL_DATATYPE_S64;
|
||||
case AMDGPU::RuntimeMD::KernelArg::U8:
|
||||
case ValueType::U8:
|
||||
return HSAIL_DATATYPE_U8;
|
||||
case AMDGPU::RuntimeMD::KernelArg::U16:
|
||||
case ValueType::U16:
|
||||
return HSAIL_DATATYPE_U16;
|
||||
case AMDGPU::RuntimeMD::KernelArg::U32:
|
||||
case ValueType::U32:
|
||||
return HSAIL_DATATYPE_U32;
|
||||
case AMDGPU::RuntimeMD::KernelArg::U64:
|
||||
case ValueType::U64:
|
||||
return HSAIL_DATATYPE_U64;
|
||||
case AMDGPU::RuntimeMD::KernelArg::F16:
|
||||
case ValueType::F16:
|
||||
return HSAIL_DATATYPE_F16;
|
||||
case AMDGPU::RuntimeMD::KernelArg::F32:
|
||||
case ValueType::F32:
|
||||
return HSAIL_DATATYPE_F32;
|
||||
case AMDGPU::RuntimeMD::KernelArg::F64:
|
||||
case ValueType::F64:
|
||||
return HSAIL_DATATYPE_F64;
|
||||
case AMDGPU::RuntimeMD::KernelArg::Struct:
|
||||
case ValueType::Struct:
|
||||
return HSAIL_DATATYPE_STRUCT;
|
||||
default:
|
||||
return HSAIL_DATATYPE_ERROR;
|
||||
@@ -1504,18 +1509,18 @@ GetKernelDataType(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
}
|
||||
|
||||
static inline cl_kernel_arg_type_qualifier
|
||||
GetOclTypeQual(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
GetOclTypeQual(const KernelArgMD& lcArg)
|
||||
{
|
||||
cl_kernel_arg_type_qualifier rv = CL_KERNEL_ARG_TYPE_NONE;
|
||||
if (lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::GlobalBuffer
|
||||
|| lcArg.Kind == AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer) {
|
||||
if (lcArg.IsVolatile) {
|
||||
if (lcArg.mValueKind == ValueKind::GlobalBuffer ||
|
||||
lcArg.mValueKind == ValueKind::DynamicSharedPointer) {
|
||||
if (lcArg.mIsVolatile) {
|
||||
rv |= CL_KERNEL_ARG_TYPE_VOLATILE;
|
||||
}
|
||||
if (lcArg.IsRestrict) {
|
||||
if (lcArg.mIsRestrict) {
|
||||
rv |= CL_KERNEL_ARG_TYPE_RESTRICT;
|
||||
}
|
||||
if (lcArg.IsConst) {
|
||||
if (lcArg.mIsConst) {
|
||||
rv |= CL_KERNEL_ARG_TYPE_CONST;
|
||||
}
|
||||
}
|
||||
@@ -1523,21 +1528,20 @@ GetOclTypeQual(const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg)
|
||||
}
|
||||
|
||||
void
|
||||
LightningKernel::initArgList(const AMDGPU::RuntimeMD::Kernel::Metadata& kernelMD)
|
||||
LightningKernel::initArgList(const KernelMD& kernelMD)
|
||||
{
|
||||
device::Kernel::parameters_t params;
|
||||
|
||||
size_t offset = 0;
|
||||
|
||||
for (size_t i = 0; i < kernelMD.Args.size(); ++i) {
|
||||
const AMDGPU::RuntimeMD::KernelArg::Metadata& lcArg =
|
||||
kernelMD.Args[i];
|
||||
for (size_t i = 0; i < kernelMD.mArgs.size(); ++i) {
|
||||
const KernelArgMD& lcArg = kernelMD.mArgs[i];
|
||||
|
||||
// Initialize HSAIL kernel argument
|
||||
auto arg = new HSAILKernel::Argument;
|
||||
arg->name_ = lcArg.Name;
|
||||
arg->typeName_ = lcArg.TypeName;
|
||||
arg->size_ = lcArg.Size;
|
||||
arg->name_ = lcArg.mName;
|
||||
arg->typeName_ = lcArg.mTypeName;
|
||||
arg->size_ = lcArg.mSize;
|
||||
arg->type_ = GetKernelArgType(lcArg);
|
||||
arg->addrQual_ = GetKernelAddrQual(lcArg);
|
||||
arg->dataType_ = GetKernelDataType(lcArg);
|
||||
@@ -1563,12 +1567,12 @@ LightningKernel::initArgList(const AMDGPU::RuntimeMD::Kernel::Metadata& kernelMD
|
||||
// Initialize Device kernel parameters
|
||||
amd::KernelParameterDescriptor desc;
|
||||
|
||||
desc.name_ = lcArg.Name.c_str();
|
||||
desc.name_ = lcArg.mName.c_str();
|
||||
desc.type_ = GetOclType(arg);
|
||||
desc.addressQualifier_ = GetOclAddrQual(arg);
|
||||
desc.accessQualifier_ = GetOclAccessQual(arg);
|
||||
desc.typeQualifier_ = GetOclTypeQual(lcArg);
|
||||
desc.typeName_ = lcArg.TypeName.c_str();
|
||||
desc.typeName_ = lcArg.mTypeName.c_str();
|
||||
|
||||
// Make a check if it is local or global
|
||||
if (desc.addressQualifier_ == CL_KERNEL_ARG_ADDRESS_LOCAL) {
|
||||
@@ -1596,9 +1600,10 @@ LightningKernel::initArgList(const AMDGPU::RuntimeMD::Kernel::Metadata& kernelMD
|
||||
createSignature(params);
|
||||
}
|
||||
|
||||
static const AMDGPU::RuntimeMD::Kernel::Metadata* FindKernelMetadata(const AMDGPU::RuntimeMD::Program::Metadata* programMD, const std::string& name) {
|
||||
for (const AMDGPU::RuntimeMD::Kernel::Metadata& kernelMD : programMD->Kernels) {
|
||||
if (kernelMD.Name == name) { return &kernelMD; }
|
||||
static const KernelMD* FindKernelMetadata(const CodeObjectMD* programMD,
|
||||
const std::string& name) {
|
||||
for (const KernelMD& kernelMD : programMD->mKernels) {
|
||||
if (kernelMD.mName == name) { return &kernelMD; }
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
@@ -1611,11 +1616,10 @@ LightningKernel::init(amd::hsa::loader::Symbol* symbol)
|
||||
|
||||
aqlCreateHWInfo(symbol);
|
||||
|
||||
const AMDGPU::RuntimeMD::Program::Metadata* programMD = prog().metadata();
|
||||
const CodeObjectMD* programMD = prog().metadata();
|
||||
assert(programMD != nullptr);
|
||||
|
||||
const AMDGPU::RuntimeMD::Kernel::Metadata* kernelMD =
|
||||
FindKernelMetadata(programMD, name());
|
||||
const KernelMD* kernelMD = FindKernelMetadata(programMD, name());
|
||||
|
||||
if (kernelMD == nullptr) {
|
||||
return false;
|
||||
@@ -1624,22 +1628,23 @@ LightningKernel::init(amd::hsa::loader::Symbol* symbol)
|
||||
// Set the argList
|
||||
initArgList(*kernelMD);
|
||||
|
||||
if (!kernelMD->ReqdWorkGroupSize.empty()) {
|
||||
const auto& requiredWorkgroupSize = kernelMD->ReqdWorkGroupSize;
|
||||
if (!kernelMD->mAttrs.mReqdWorkGroupSize.empty()) {
|
||||
const auto& requiredWorkgroupSize = kernelMD->mAttrs.mReqdWorkGroupSize;
|
||||
workGroupInfo_.compileSize_[0] = requiredWorkgroupSize[0];
|
||||
workGroupInfo_.compileSize_[1] = requiredWorkgroupSize[1];
|
||||
workGroupInfo_.compileSize_[2] = requiredWorkgroupSize[2];
|
||||
}
|
||||
|
||||
if (!kernelMD->WorkGroupSizeHint.empty()) {
|
||||
const auto& workgroupSizeHint = kernelMD->WorkGroupSizeHint;
|
||||
if (!kernelMD->mAttrs.mWorkGroupSizeHint.empty()) {
|
||||
const auto& workgroupSizeHint = kernelMD->mAttrs.mWorkGroupSizeHint;
|
||||
workGroupInfo_.compileSizeHint_[0] = workgroupSizeHint[0];
|
||||
workGroupInfo_.compileSizeHint_[1] = workgroupSizeHint[1];
|
||||
workGroupInfo_.compileSizeHint_[2] = workgroupSizeHint[2];
|
||||
}
|
||||
|
||||
if (!kernelMD->VecTypeHint.empty()) {
|
||||
workGroupInfo_.compileVecTypeHint_ = kernelMD->VecTypeHint.c_str();
|
||||
if (!kernelMD->mAttrs.mVecTypeHint.empty()) {
|
||||
workGroupInfo_.compileVecTypeHint_ =
|
||||
kernelMD->mAttrs.mVecTypeHint.c_str();
|
||||
}
|
||||
|
||||
// Copy wavefront size
|
||||
@@ -1656,7 +1661,7 @@ LightningKernel::init(amd::hsa::loader::Symbol* symbol)
|
||||
workGroupInfo_.size_ = dev().info().maxWorkGroupSize_;
|
||||
}
|
||||
|
||||
initPrintf(programMD->PrintfInfo);
|
||||
initPrintf(programMD->mPrintf);
|
||||
|
||||
/*FIXME_lmoriche:
|
||||
size_t sizeOfWavesPerSimdHint = sizeof(workGroupInfo_.wavesPerSimdHint_);
|
||||
|
||||
مرجع در شماره جدید
Block a user