P4 to Git Change 1312581 by lmoriche@lmoriche_opencl_dev on 2016/09/08 19:11:07

SWDEV-102033 - [OCL-LC-ROCm] Change runtime metadata KeyArgKind
	- Required runtime changes to use the new hidden argument metadata

Affected files ...

... //depot/stg/opencl/drivers/opencl/make/llvm.git/llvmlibs#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/amdgpu_metadata.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/amdgpu_metadata.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#15 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.hpp#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#28 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#14 edit
Αυτή η υποβολή περιλαμβάνεται σε:
foreman
2016-09-08 20:29:42 -04:00
γονέας 3a61b24dd5
υποβολή 8fadd2c115
6 αρχεία άλλαξαν με 189 προσθήκες και 159 διαγραφές
@@ -19,15 +19,30 @@ namespace roc {
static inline ROC_ARG_TYPE
GetKernelArgType(const amd::hsa::code::KernelArg::Metadata& lcArg)
{
switch (lcArg.TypeKind()) {
case AMDGPU::RuntimeMD::KernelArg::Pointer:
switch (lcArg.Kind()) {
case AMDGPU::RuntimeMD::KernelArg::GlobalBuffer:
case AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer:
return ROC_ARGTYPE_POINTER;
case AMDGPU::RuntimeMD::KernelArg::Value:
case AMDGPU::RuntimeMD::KernelArg::ByValue:
return ROC_ARGTYPE_VALUE;
case AMDGPU::RuntimeMD::KernelArg::Image:
return ROC_ARGTYPE_IMAGE;
case AMDGPU::RuntimeMD::KernelArg::Sampler:
return ROC_ARGTYPE_SAMPLER;
case AMDGPU::RuntimeMD::KernelArg::HiddenGlobalOffsetX:
return ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_X;
case AMDGPU::RuntimeMD::KernelArg::HiddenGlobalOffsetY:
return ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Y;
case AMDGPU::RuntimeMD::KernelArg::HiddenGlobalOffsetZ:
return ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Z;
case AMDGPU::RuntimeMD::KernelArg::HiddenPrintfBuffer:
return ROC_ARGTYPE_HIDDEN_PRINTF_BUFFER;
case AMDGPU::RuntimeMD::KernelArg::HiddenDefaultQueue:
return ROC_ARGTYPE_HIDDEN_DEFAULT_QUEUE;
case AMDGPU::RuntimeMD::KernelArg::HiddenCompletionAction:
return ROC_ARGTYPE_HIDDEN_COMPLETION_ACTION;
case AMDGPU::RuntimeMD::KernelArg::HiddenNone:
return ROC_ARGTYPE_HIDDEN_NONE;
default:
return ROC_ARGTYPE_ERROR;
}
@@ -63,7 +78,8 @@ GetKernelArgType(const aclArgData* argInfo)
case ARG_TYPE_POINTER:
return ROC_ARGTYPE_POINTER;
case ARG_TYPE_VALUE:
return ROC_ARGTYPE_VALUE;
return (argInfo->arg.value.data == DATATYPE_struct)
? ROC_ARGTYPE_REFERENCE : ROC_ARGTYPE_VALUE;
case ARG_TYPE_IMAGE:
return ROC_ARGTYPE_IMAGE;
case ARG_TYPE_SAMPLER:
@@ -121,8 +137,7 @@ GetKernelArgAlignment(const aclArgData* argInfo)
static inline size_t
GetKernelArgPointeeAlignment(const amd::hsa::code::KernelArg::Metadata& lcArg)
{
if (lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Pointer
&& lcArg.AddrQual() == AMDGPU::RuntimeMD::KernelArg::Local) {
if (lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer) {
uint32_t align = lcArg.PointeeAlign();
if (align == 0) {
LogWarning("Missing DynamicSharedPointer alignment");
@@ -147,8 +162,8 @@ GetKernelArgPointeeAlignment(const aclArgData* argInfo)
static inline ROC_ACCESS_TYPE
GetKernelArgAccessType(const amd::hsa::code::KernelArg::Metadata& lcArg)
{
if (lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Pointer
|| lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Image) {
if (lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::GlobalBuffer
|| lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::Image) {
switch (lcArg.AccQual()) {
case AMDGPU::RuntimeMD::KernelArg::ReadOnly:
return ROC_ACCESS_TYPE_RO;
@@ -191,21 +206,21 @@ GetKernelArgAccessType(const aclArgData* argInfo)
static inline ROC_ADDRESS_QUALIFIER
GetKernelAddrQual(const amd::hsa::code::KernelArg::Metadata& lcArg)
{
if (lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Pointer) {
switch (lcArg.AddrQual()) {
case AMDGPU::RuntimeMD::KernelArg::Global:
return ROC_ADDRESS_GLOBAL;
case AMDGPU::RuntimeMD::KernelArg::Constant:
return ROC_ADDRESS_CONSTANT;
case AMDGPU::RuntimeMD::KernelArg::Local:
return ROC_ADDRESS_LOCAL;
default:
LogError("Unsupported address type");
return ROC_ADDRESS_ERROR;
}
if (lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer) {
return ROC_ADDRESS_LOCAL;
}
else if ((lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Image) ||
(lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Sampler)) {
else if (lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::GlobalBuffer) {
if (lcArg.AddrQual() == AMDGPU::RuntimeMD::KernelArg::Global) {
return ROC_ADDRESS_GLOBAL;
}
else if (lcArg.AddrQual() == AMDGPU::RuntimeMD::KernelArg::Constant) {
return ROC_ADDRESS_CONSTANT;
}
LogError("Unsupported address type");
return ROC_ADDRESS_ERROR;
}
else if (lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::Image
|| lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::Sampler) {
return ROC_ADDRESS_GLOBAL;
}
return ROC_ADDRESS_ERROR;
@@ -246,9 +261,7 @@ GetKernelDataType(const amd::hsa::code::KernelArg::Metadata& lcArg)
{
aclArgDataType dataType;
if ((lcArg.TypeKind() != AMDGPU::RuntimeMD::KernelArg::Pointer) ||
(lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Value))
{
if (lcArg.Kind() != AMDGPU::RuntimeMD::KernelArg::ByValue) {
return ROC_DATATYPE_ERROR;
}
@@ -382,7 +395,8 @@ GetOclType(const Kernel::Argument* arg)
if (arg->type_ == ROC_ARGTYPE_POINTER || arg->type_ == ROC_ARGTYPE_IMAGE) {
return T_POINTER;
}
else if (arg->type_ == ROC_ARGTYPE_VALUE) {
else if (arg->type_ == ROC_ARGTYPE_VALUE
|| arg->type_ == ROC_ARGTYPE_REFERENCE) {
switch (arg->dataType_) {
case ROC_DATATYPE_S8:
case ROC_DATATYPE_U8:
@@ -483,7 +497,8 @@ static inline cl_kernel_arg_type_qualifier
GetOclTypeQual(const amd::hsa::code::KernelArg::Metadata& lcArg)
{
cl_kernel_arg_type_qualifier rv = CL_KERNEL_ARG_TYPE_NONE;
if (lcArg.TypeKind() == AMDGPU::RuntimeMD::KernelArg::Pointer) {
if (lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::GlobalBuffer
|| lcArg.Kind() == AMDGPU::RuntimeMD::KernelArg::DynamicSharedPointer) {
if (lcArg.IsVolatile()) {
rv |= CL_KERNEL_ARG_TYPE_VOLATILE;
}
@@ -607,7 +622,6 @@ Kernel::initArguments_LC(const amd::hsa::code::Kernel::Metadata& kernelMD)
// Initialize HSAIL kernel argument
Kernel::Argument* arg = new Kernel::Argument;
arg->index_ = /* lcArg.IsHidden() ? uint(-1) : */ params.size();
arg->name_ = lcArg.Name();
arg->typeName_ = lcArg.TypeName();
arg->size_ = lcArg.Size();
@@ -618,11 +632,20 @@ Kernel::initArguments_LC(const amd::hsa::code::Kernel::Metadata& kernelMD)
arg->access_ = GetKernelArgAccessType(lcArg);
arg->pointeeAlignment_ = GetKernelArgPointeeAlignment(lcArg);
bool isHidden = arg->type_ == ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_X
|| arg->type_ == ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Y
|| arg->type_ == ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Z
|| arg->type_ == ROC_ARGTYPE_HIDDEN_PRINTF_BUFFER
|| arg->type_ == ROC_ARGTYPE_HIDDEN_DEFAULT_QUEUE
|| arg->type_ == ROC_ARGTYPE_HIDDEN_COMPLETION_ACTION
|| arg->type_ == ROC_ARGTYPE_HIDDEN_NONE;
arg->index_ = isHidden ? uint(-1) : params.size();
hsailArgList_.push_back(arg);
/*if (lcArg.IsHidden()) {
if (isHidden) {
continue;
}*/
}
// Initialize Device kernel parameters
amd::KernelParameterDescriptor desc;
@@ -650,35 +673,13 @@ Kernel::initArguments_LC(const amd::hsa::code::Kernel::Metadata& kernelMD)
// Local memory for CPU
size = sizeof(cl_mem);
}
offset = (size_t) amd::alignUp(offset, std::min(size, size_t(16)));
offset = (size_t) amd::alignUp(offset, std::min(size, size_t(16)));
desc.offset_ = offset;
offset += amd::alignUp(size, sizeof(uint32_t));
params.push_back(desc);
}
// Push the hidden arguments. These will be generated by LC at some point
static ROC_ARG_TYPE hiddenArgs[] = {
ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_X,
ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Y,
ROC_ARGTYPE_HIDDEN_GLOBAL_OFFSET_Z,
};
for (auto type : hiddenArgs) {
Kernel::Argument* arg = new Kernel::Argument;
arg->index_ = uint(-1);
arg->name_ = "";
arg->typeName_ = "size_t";
arg->size_ = sizeof(size_t);
arg->type_ = type;
arg->addrQual_ = ROC_ADDRESS_ERROR;
arg->dataType_ = ROC_DATATYPE_U64;
arg->alignment_ = arg->size_;
arg->access_ = ROC_ACCESS_TYPE_NONE;
arg->pointeeAlignment_ = 0;
hsailArgList_.push_back(arg);
}
createSignature(params);
}
#endif // defined(WITH_LIGHTNING_COMPILER)