P4 to Git Change 1204512 by ashi1@ashi1_win50 on 2015/10/27 17:04:33

SWDEV-79695 -  Checkin again after fixed build issue with ocltst changes. Merged all changes in compiler lib to legacy-lib.

	HSAIL Metadata Workgroup Size Hint and Vec Type Hint added to HSAIL
	HSAIL does not handle kernel attributes for work_group_size_hint or vec_type_hint.

	Adding these two kernel attributes to metadata requires multiple changes:
	  HSAIL: Added parsing functions to HSAILParseMetadata.cpp, and similar files
	    Properly translates to .hsail files as 'wsh' and 'vth'
	  MDParser: Flex scanner now reads new hsail metadata, 'wsh' and 'vth'
	  Acl_metadata: added the two new metadata
	    Uint32_t wsh[3]; // Added case: RT_WORK_GROUP_SIZE_HINT
	    Char *vth; // Added case: RT_VEC_TYPE_HINT
	  Since vth is std::string, it was required to serialize, and then de-serialize for aclMetadata

Affected files ...

... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/backends/common/v0_8/if_acl.cpp#5 edit
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/backends/gpu/MDParser/AMDILMDInterface.h#3 integrate
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/backends/gpu/MDParser/AMDILMDParser.l#4 integrate
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/backends/gpu/MDParser/AMDILMDTypes.cpp#3 integrate
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/backends/gpu/MDParser/lex.yy.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/backends/gpu/metadata.cpp#4 integrate
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/include/v0_8/aclEnums.h#4 integrate
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/include/v0_8/aclStructs.h#4 integrate
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/v0_8/if_acl.cpp#81 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDInterface.h#6 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDParser.l#7 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDTypes.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/lex.yy.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/metadata.cpp#12 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/aclEnums.h#26 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/aclStructs.h#21 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Target/HSAIL/HSAILKernel.h#15 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Target/HSAIL/HSAILKernelManager.cpp#40 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Target/HSAIL/HSAILModuleInfo.cpp#18 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Target/HSAIL/HSAILParseMetadata.cpp#16 edit
... //depot/stg/opencl/drivers/opencl/tests/ocltst/module/complib/CLAssumptionCheck.cpp#47 edit
... //depot/stg/opencl/drivers/opencl/tests/ocltst/module/complib/CLEnumCheck.cpp#51 edit


[ROCm/clr commit: d75d0654d4]
Cette révision appartient à :
foreman
2015-10-27 18:14:07 -04:00
Parent 4bb770501f
révision 9f06abc1ed
3 fichiers modifiés avec 47 ajouts et 4 suppressions
+41 -3
Voir le fichier
@@ -2356,6 +2356,10 @@ void deserializeCLMetadata(const char* ptr, aclMetadata * const md, const size_t
md->deviceName = tmp_ptr;
tmp_ptr += md->deviceNameSize + 1;
// de-serialize the vec type hint
md->vth = tmp_ptr;
tmp_ptr += md->vecTypeHintSize + 1;
// de-serailize the arguments
md->args = reinterpret_cast<aclArgData*>(tmp_ptr);
tmp_ptr += (md->numArgs + 1) * sizeof(aclArgData);
@@ -2825,7 +2829,34 @@ if_aclQueryInfo(aclCompiler *cl,
}
break;
}
}
case RT_WORK_GROUP_SIZE_HINT: {
size_t work_group_size_hint_size = sizeof(md->wsh);
if (!ptr) {
*size = work_group_size_hint_size;
success = true;
} else if (*size >= work_group_size_hint_size) {
memcpy(ptr, md->wsh, work_group_size_hint_size);
success = true;
}
break;
}
case RT_VEC_TYPE_HINT: {
if (!ptr) {
*size = md->vecTypeHintSize;
success = true;
} else if (*size >= md->vecTypeHintSize) {
// vecTypeHint is a pointer, which is serialized by serializeMetadata() to NULL
// in binary; to get the data deserializeCLMetadata() is needed
aclMetadata *deserializedMd = static_cast<aclMetadata*>(alloca(roSize));
deserializeCLMetadata(reinterpret_cast<const char*>(roSec), deserializedMd, roSize);
if (deserializedMd->vth && deserializedMd->vecTypeHintSize == md->vecTypeHintSize) {
strncpy(reinterpret_cast<char*>(ptr), deserializedMd->vth, deserializedMd->vecTypeHintSize);
success = true;
}
}
break;
}
}
return (success) ? ACL_SUCCESS : ACL_ERROR;
}
static unsigned getSize(aclArgDataType data)
@@ -2878,12 +2909,15 @@ if_aclDbgAddArgument(aclCompiler *cl,
aclMetadata *newMD = reinterpret_cast<aclMetadata*>(newMDptr);
memcpy(tmp_ptr, md, md->struct_size
+ (md->kernelNameSize + 1)
+ (md->deviceNameSize + 1));
+ (md->deviceNameSize + 1)
+ (md->vecTypeHintSize + 1));
tmp_ptr += md->struct_size;
tmp_ptr += md->kernelNameSize + 1;
tmp_ptr[-1] = '\0';
tmp_ptr += md->deviceNameSize + 1;
tmp_ptr[-1] = '\0';
tmp_ptr += md->vecTypeHintSize + 1;
tmp_ptr[-1] = '\0';
newMD->args = reinterpret_cast<aclArgData*>(tmp_ptr);
unsigned cb_offset = 0;
const aclArgData *c_argPtr = reinterpret_cast<const aclArgData*>(
@@ -3018,6 +3052,7 @@ if_aclDbgRemoveArgument(aclCompiler *cl,
ro_ptr += md->struct_size;
ro_ptr += md->kernelNameSize + 1;
ro_ptr += md->deviceNameSize + 1;
ro_ptr += md->vecTypeHintSize + 1;
const aclArgData *argPtr = reinterpret_cast<const aclArgData*>(ro_ptr);
const aclArgData *delArg = 0;
for (unsigned x = 0; x < md->numArgs; ++x) {
@@ -3038,12 +3073,15 @@ if_aclDbgRemoveArgument(aclCompiler *cl,
char *tmp_ptr = newMDptr;
memcpy(tmp_ptr, reinterpret_cast<const char*>(md), md->struct_size
+ (md->kernelNameSize + 1)
+ (md->deviceNameSize + 1));
+ (md->deviceNameSize + 1)
+ (md->vecTypeHintSize +1));
tmp_ptr += md->struct_size;
tmp_ptr += md->kernelNameSize + 1;
tmp_ptr[-1] = '\0';
tmp_ptr += md->deviceNameSize + 1;
tmp_ptr[-1] = '\0';
tmp_ptr += md->vecTypeHintSize + 1;
tmp_ptr[-1] = '\0';
unsigned cb_offset = ((delArg->type == ARG_TYPE_VALUE)
? delArg->arg.value.cbOffset : delArg->arg.pointer.cbOffset);
size_t printf_offset = reinterpret_cast<const char*>(md->printf)
+3 -1
Voir le fichier
@@ -218,7 +218,9 @@ typedef enum _rt_query_types_enum_0_8 {
RT_NUM_KERNEL_HIDDEN_ARGS = 22,
RT_CONTAINS_SPIRV = 23,
RT_WAVES_PER_SIMD_HINT = 24,
RT_LAST_TYPE = 25
RT_WORK_GROUP_SIZE_HINT = 25,
RT_VEC_TYPE_HINT = 26,
RT_LAST_TYPE = 27
} aclQueryType_0_8;
//! An enumeration for the various GPU capabilities
+3
Voir le fichier
@@ -121,6 +121,9 @@ typedef struct _acl_metadata_0_8 {
uint32_t kernel_index; // RT_KERNEL_INDEX
uint32_t numHiddenKernelArgs; // RT_NUM_KERNEL_HIDDEN_ARGS
uint32_t wavesPerSimdHint; // RT_WAVES_PER_SIMD_HINT
uint32_t wsh[3]; // RT_WORK_GROUP_SIZE_HINT
size_t vecTypeHintSize;
const char *vth; // RT_VEC_TYPE_HINT
} aclMetadata_0_8;
//! An structure that holds information on the capabilities of the bif device.