2
0
Ficheiros
rocm-systems/rocclr/compiler/lib/include/v0_8/aclStructs.h
T
foreman 120b8fba7c P4 to Git Change 1195825 by yaxunl@yaxunl_stg_win50 on 2015/09/30 07:45:04
SWDEV-77682 - Wave Limiter: Add __attribute__((amd_hint_waves_per_simd(n))) to FE for setting waves/simd hint per kernel. 0 for adaptive wave limitting. 1~10 for fixed waves/simd.
	Add query of WavesPerSimdHint metadata to compiler lib. HSAI path shouls use aclQueryInfo RT_WAVES_PER_SIMD_HINT to get the waves/simd hint value.
	This should provide a flexible workaround for bug SWDEV-56552  [CQE OCL][PERF][LNX][QR][G] 19% Perf drop is observed with chunkBp kernel in Carrizo.

Affected files ...

... //depot/stg/opencl/drivers/opencl/compiler/clang/include/clang/Basic/Attr.td#9 edit
... //depot/stg/opencl/drivers/opencl/compiler/clang/lib/CodeGen/CodeGenFunction.cpp#16 edit
... //depot/stg/opencl/drivers/opencl/compiler/clang/lib/Sema/SemaDeclAttr.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/compiler/clc/src/e2lModule.cpp#95 edit
... //depot/stg/opencl/drivers/opencl/compiler/clc/src/e2lModule.h#44 edit
... //depot/stg/opencl/drivers/opencl/compiler/clc/src/oclEntry.cpp#49 edit
... //depot/stg/opencl/drivers/opencl/compiler/clc/src/oclMeta.cpp#32 edit
... //depot/stg/opencl/drivers/opencl/compiler/clc/src/oclMeta.h#32 edit
... //depot/stg/opencl/drivers/opencl/compiler/edg/src/amd_ocl_attribute.c#26 edit
... //depot/stg/opencl/drivers/opencl/compiler/edg/src/attribute.c#29 edit
... //depot/stg/opencl/drivers/opencl/compiler/edg/src/err_codes.h#42 edit
... //depot/stg/opencl/drivers/opencl/compiler/edg/src/err_data.h#56 edit
... //depot/stg/opencl/drivers/opencl/compiler/edg/src/il_def.h#57 edit
... //depot/stg/opencl/drivers/opencl/compiler/edg/src/il_display.c#25 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/v0_8/if_acl.cpp#77 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDInterface.h#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDParser.l#4 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDTypes.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/lex.yy.cpp#5 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/metadata.cpp#9 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/aclEnums.h#23 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/aclStructs.h#18 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/include/llvm/Transforms/IPO/AMDKernelPerfHint.h#4 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Target/HSAIL/HSAILKernelManager.cpp#37 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Transforms/IPO/AMDKernelPerfHint.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm32/include/llvm/Transforms/IPO/AMDKernelPerfHint.h#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm32/lib/Target/AMDIL/AMDILKernelManager.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm32/lib/Transforms/IPO/AMDKernelPerfHint.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/tests/hsa/src/llc/opt/wave_limiter/explicit.cl#1 add
... //depot/stg/opencl/drivers/opencl/tests/hsa/tlst/llc_opt.tlst#57 edit
... //depot/stg/opencl/drivers/opencl/tests/ocltst/module/complib/CLAssumptionCheck.cpp#44 edit
... //depot/stg/opencl/drivers/opencl/tests/ocltst/module/complib/CLEnumCheck.cpp#48 edit
2015-09-30 10:30:21 -04:00

347 linhas
11 KiB
C

//
// Copyright (c) 2012 Advanced Micro Devices, Inc. All rights reserved.
//
#ifndef _ACL_STRUCTS_0_8_H_
#define _ACL_STRUCTS_0_8_H_
#define ACL_STRUCT_HEADER \
size_t struct_size
//! A structure that holds information on the various types of arguments
// The format in memory of this structure is
// -------------
// | aclArgData |
// -------------
// |->argStr |
// -------------
// |->typeStr |
// -------------
typedef struct _acl_md_arg_type_0_8 {
ACL_STRUCT_HEADER;
size_t argNameSize;
size_t typeStrSize;
const char *argStr;
const char *typeStr;
union {
struct { // Struct for sampler arguments
unsigned ID;
unsigned isKernelDefined;
unsigned value;
} sampler;
struct { // Struct for image arguments
unsigned resID;
unsigned cbNum;
unsigned cbOffset;
aclAccessType type;
bool is2D;
bool is1D;
bool isArray;
bool isBuffer;
} image;
struct { // struct for atomic counter arguments
unsigned is32bit;
unsigned resID;
unsigned cbNum;
unsigned cbOffset;
} counter;
struct { // struct for semaphore arguments
unsigned resID;
unsigned cbNum;
unsigned cbOffset;
} sema;
struct { // struct for pass by value arguments
unsigned numElements;
unsigned cbNum;
unsigned cbOffset;
aclArgDataType data;
} value;
struct { // struct for pass by pointer arguments
unsigned numElements;
unsigned cbNum;
unsigned cbOffset;
unsigned bufNum;
unsigned align;
aclArgDataType data;
aclMemoryType memory;
aclAccessType type;
bool isVolatile;
bool isRestrict;
bool isPipe;
} pointer;
struct { // Struct for queue arguments
unsigned numElements;
unsigned cbNum;
unsigned cbOffset;
aclArgDataType data;
aclMemoryType memory;
} queue;
} arg;
aclArgType type;
bool isConst;
} aclArgData_0_8;
//! A structure that holds information for printf
// The format in memory of this structure is
// --------------
// | aclPrintfFmt|
// --------------
// |->argSizes |
// --------------
// |->fmrStr |
// --------------
typedef struct _acl_md_printf_fmt_0_8 {
ACL_STRUCT_HEADER;
unsigned ID;
size_t numSizes;
size_t fmtStrSize;
uint32_t *argSizes;
const char *fmtStr;
} aclPrintfFmt_0_8;
//! A structure that holds the metadata in the RODATA section.
typedef struct _acl_metadata_0_8 {
ACL_STRUCT_HEADER; // This holds the size of the structure itself for versioning.
size_t data_size; // This holds the size of all the memory allocated for this structure.
uint32_t major, minor, revision; // RT_ABI_VERSION
uint32_t gpuCaps; // RT_GPU_FUNC_CAPS
uint32_t funcID; // RT_GPU_FUNC_ID
uint32_t gpuRes[5]; // RT_GPU_DEFAULT_ID
size_t wgs[3]; // RT_WORK_GROUP_SIZE
uint32_t wrs[3]; // RT_WORK_REGION_SIZE
size_t kernelNameSize;
size_t deviceNameSize;
size_t mem[6]; // RT_MEM_SIZES
size_t numArgs;
size_t numPrintf;
aclArgData_0_8 *args; // RT_ARGUMENT_ARRAY
aclPrintfFmt_0_8 *printf; // RT_GPU_PRINTF_ARRAY
const char *kernelName; // RT_KERNEL_NAME
const char *deviceName; // RT_DEVICE_NAME
bool enqueue_kernel; // RT_DEVICE_ENQUEUE
uint32_t kernel_index; // RT_KERNEL_INDEX
uint32_t numHiddenKernelArgs; // RT_NUM_KERNEL_HIDDEN_ARGS
uint32_t wavesPerSimdHint; // RT_WAVES_PER_SIMD_HINT
} aclMetadata_0_8;
//! An structure that holds information on the capabilities of the bif device.
typedef struct _acl_device_caps_rec_0_8 {
ACL_STRUCT_HEADER;
uint32_t flags[4];
uint32_t encryptCode;
} aclDevCaps_0_8;
//! Structure that holds information on the target that the source is
// being compiled for.
typedef struct _acl_target_info_rec_0_8 {
ACL_STRUCT_HEADER;
aclDevType arch_id; // An identifier for the architecture.
uint32_t chip_id; // A identifier for the chip.
} aclTargetInfo_0_8;
// Structure for the version 0.8 of the structure.
typedef struct _acl_binary_opts_rec_0_8 {
ACL_STRUCT_HEADER;
uint32_t elfclass;
uint32_t bitness;
const char *temp_file;
uint32_t kernelArgAlign;
} aclBinaryOptions_0_8;
// Structure for the version 0.8.1 of the structure.
// This versions addes in alloc/dealloc functions.
typedef struct _acl_binary_opts_rec_0_8_1 {
ACL_STRUCT_HEADER;
uint32_t elfclass;
uint32_t bitness;
const char *temp_file;
uint32_t kernelArgAlign;
AllocFunc_0_8 alloc;
FreeFunc_0_8 dealloc;
} aclBinaryOptions_0_8_1;
//! Structure that holds the OpenCL binary information.
typedef struct _acl_bif_rec_0_8 {
ACL_STRUCT_HEADER;
aclTargetInfo_0_8 target; // Information about the target device.
aclBIF* bin; // Pointer to the acl.
aclOptions* options; // Pointer to acl options.
aclBinaryOptions_0_8 binOpts; // Pointer to the binary options.
aclDevCaps_0_8 caps; // Capabilities of the BIF.
} aclBinary_0_8;
//! Version of the aclBinary that uses the 0_8_1 version of the aclBinaryOptions.
typedef struct _acl_bif_rec_0_8_1 {
ACL_STRUCT_HEADER;
aclTargetInfo_0_8 target; // Information about the target device.
aclBIF* bin; // Pointer to the acl.
aclOptions* options; // Pointer to acl options.
aclBinaryOptions_0_8_1 binOpts; // Pointer to the binary options.
aclDevCaps_0_8 caps; // Capabilities of the BIF.
} aclBinary_0_8_1;
#define ACL_LOADER_COMMON\
ACL_STRUCT_HEADER; \
bool isBuiltin; \
const char *libName; \
void *handle; \
LoaderInit init; \
LoaderFini fini;
// Struct that maps to the common structure between all loaders.
typedef struct _acl_common_loader_rec_0_8 {
ACL_LOADER_COMMON;
} aclCommonLoader_0_8;
typedef struct _acl_cl_loader_rec_0_8 {
ACL_LOADER_COMMON;
Compile compile;
Link link;
CompLog getLog;
RetrieveType_0_8 retrieveType;
SetType_0_8 setType;
ConvertType_0_8 convertType;
Disassemble disassemble;
GetDevBinary_0_8 devBinary;
InsertSec insSec;
ExtractSec extSec;
RemoveSec remSec;
InsertSym insSym;
ExtractSym extSym;
RemoveSym remSym;
QueryInfo getInfo;
AddDbgArg addDbg;
RemoveDbgArg removeDbg;
SetupLoaderObject setupLoaderObject;
JITObjectImageCreate jitOICreate;
JITObjectImageCopy jitOICopy;
JITObjectImageDestroy jitOIDestroy;
JITObjectImageSize jitOISize;
JITObjectImageData jitOIData;
JITObjectImageFinalize jitOIFinalize;
JITObjectImageGetGlobalsSize jitOIGlobalSize;
JITObjectImageIterateSymbols jitOIIterateSymbols;
JITObjectImageDisassembleKernel jitOIDisassembleKernel;
} aclCLLoader_0_8;
//! Structure that holds the required functions
// that sc exports for the SCDLL infrastructure.
typedef struct _acl_sc_loader_rec_0_8 {
ACL_LOADER_COMMON;
uint32_t /*SC_UINT32*/ sc_interface_version;
void /**SC_EXPORT_FUNCTIONS**/ *scef;
// Any version specific fields go here.
} aclSCLoader_0_8;
typedef struct _acl_fe_loader_rec_0_8 {
ACL_LOADER_COMMON;
FEToIR toIR; // Used for Source to aclModule containing LLVMIR
FEToIR toModule; // Used to convert raw SPIR/LLVM-IR to aclModule
SourceToISA toISA; // Used for Source to ISA
} aclFELoader_0_8;
typedef struct _acl_opt_loader_rec_0_8 {
ACL_LOADER_COMMON;
IRPhase optimize; // Used for IR to IR transformation
} aclOptLoader_0_8;
typedef struct _acl_link_loader_rec_0_8 {
ACL_LOADER_COMMON;
LinkPhase link; // Used for Linking in IR modules
IRPhase toLLVMIR; // Used for converting SPIR to LLVMIR
IRPhase toSPIR; // Used for converting LLVMIR to SPIR
} aclLinkLoader_0_8;
typedef struct _acl_cg_loader_rec_0_8 {
ACL_LOADER_COMMON;
CGPhase codegen; // Used for converting from LLVMIR to target ASM.
} aclCGLoader_0_8;
typedef struct _acl_be_loader_rec_0_8 {
ACL_LOADER_COMMON;
SourceToISA finalize; // Used for converting from target source to target ISA.
SourceToISA assemble; // Used for converting from target text to target binary.
DisasmISA disassemble; // Used for converting from target binary to target ISA.
} aclBELoader_0_8;
typedef struct _acl_compiler_opts_rec_0_8 {
ACL_STRUCT_HEADER; // Size of the structure for version checking.
const char *clLib;
const char *feLib;
const char *optLib;
const char *linkLib;
const char *cgLib;
const char *beLib;
const char *scLib;
} aclCompilerOptions_0_8;
typedef struct _acl_compiler_opts_rec_0_8_1 {
ACL_STRUCT_HEADER; // Size of the structure for version checking.
const char* clLib;
const char *feLib;
const char *optLib;
const char *linkLib;
const char *cgLib;
const char *beLib;
const char *scLib; // Name or path to the shader compiler shared library
AllocFunc alloc;
FreeFunc dealloc;
} aclCompilerOptions_0_8_1;
//! Structure that holds the OpenCL compiler and various loaders.
typedef struct _acl_compiler_rec_0_8 {
ACL_STRUCT_HEADER; // Size of structure for version checking.
aclCLLoader clAPI; // Pointer to the compiler API.
aclFELoader feAPI; // Pointer to the FE Loader API.
aclOptLoader optAPI; // Pointer to the Opt Loader API.
aclLinkLoader linkAPI; // Pointer to the Link Loader API.
aclCGLoader cgAPI; // Pointer to the CG Loader API.
aclBELoader beAPI; // Pointer to the BE Loader API.
aclSCLoader scAPI; // Pointer to the SC Loader API.
aclCompilerOptions *opts; // The options structure for the compiler.
void *llvm_shutdown; // Pointer to the llvm shutdown object.
char *buildLog; // Pointer to the current build log.
unsigned logSize; // Size of the current build log.
aclLoaderData *apiData; // pointer to data store for the compiler API loader.
} aclCompilerHandle_0_8;
//! Structure that holds the OpenCL compiler and various loaders.
typedef struct _acl_compiler_rec_0_8_1 {
ACL_STRUCT_HEADER;
aclCLLoader clAPI; // Pointer to the compiler API.
aclFELoader feAPI; // Pointer to the FE Loader API.
aclOptLoader optAPI; // Pointer to the Opt Loader API.
aclLinkLoader linkAPI; // Pointer to the Link Loader API.
aclCGLoader cgAPI; // Pointer to the CG Loader API.
aclBELoader beAPI; // Pointer to the BE Loader API.
aclSCLoader scAPI; // Pointer to the SC Loader API.
AllocFunc alloc;
FreeFunc dealloc;
aclCompilerOptions *opts; // The options structure for the compiler.
void *llvm_shutdown; // Pointer to the llvm shutdown object.
char *buildLog; // Pointer to the current build log.
unsigned logSize; // Size of the current build log.
aclLoaderData *apiData; // pointer to data store for the compiler API loader.
} aclCompilerHandle_0_8_1;
//! Structure to hold kernel statistics obtained from kernel
typedef struct _acl_kernel_stats_0_8_1 {
unsigned int scratchRegs;
unsigned int scratchSize;
unsigned int availablevgprs;
unsigned int availablesgprs;
unsigned int usedvgprs;
unsigned int usedsgprs;
unsigned int availableldssize;
unsigned int usedldssize;
unsigned int availablestacksize;
unsigned int usedstacksize;
unsigned int wavefrontsize;
unsigned int wavefrontpersimd;
unsigned int threadsperworkgroup;
unsigned int reqdworkgroup_x;
unsigned int reqdworkgroup_y;
unsigned int reqdworkgroup_z;
} aclKernelStats;
#endif // _ACL_STRUCTS_0_8_H_