23 #ifndef __CLRX_ROCMBINARIES_H__ 24 #define __CLRX_ROCMBINARIES_H__ 86 HIDDEN_MULTIGRID_SYNC_ARG,
87 MAX_VALUE = HIDDEN_MULTIGRID_SYNC_ARG
128 MAX_VALUE = READ_WRITE
172 uint64_t maxFlatWorkGroupSize;
173 cxuint fixedWorkGroupSize[3];
199 void parse(
size_t metadataSize,
const char* metadata);
201 void parseMsgPack(
size_t metadataSize,
const cxbyte* metadata);
206 uint32_t groupSegmentFixedSize;
207 uint32_t privateSegmentFixedSize;
209 uint64_t kernelCodeEntryOffset;
215 uint16_t initialKernelExecState;
220 SLEV(groupSegmentFixedSize, groupSegmentFixedSize);
221 SLEV(privateSegmentFixedSize, privateSegmentFixedSize);
222 SLEV(kernelCodeEntryOffset, kernelCodeEntryOffset);
223 SLEV(pgmRsrc3, pgmRsrc3);
224 SLEV(pgmRsrc1, pgmRsrc1);
225 SLEV(pgmRsrc2, pgmRsrc2);
226 SLEV(initialKernelExecState, initialKernelExecState);
241 std::unique_ptr<ROCmRegion[]> regions;
242 RegionMap regionsMap;
245 size_t globalDataSize;
250 std::unique_ptr<ROCmMetadata> metadataInfo;
251 RegionMap kernelInfosMap;
255 bool llvm10BinFormat;
256 bool metadataV3Format;
266 uint32_t& archStepping)
const;
270 {
return regionsNum; }
274 {
return regions[index]; }
277 const ROCmRegion& getRegion(
const char* name)
const;
291 {
return globalDataSize; }
295 {
return globalData; }
298 {
return globalData; }
302 {
return metadataSize; }
312 {
return metadataInfo!=
nullptr; }
316 {
return *metadataInfo; }
320 {
return metadataInfo->kernels.size(); }
324 {
return metadataInfo->kernels[index]; }
331 {
return kernelDescs[index]; }
341 {
return newBinFormat; }
345 {
return llvm10BinFormat; }
349 {
return metadataV3Format; }
353 {
return gotSymbols.
size(); }
357 {
return gotSymbols; }
361 {
return gotSymbols[index]; }
373 ROCMFLAG_USE_DISPATCH_PTR = AMDHSAFLAG_USE_DISPATCH_PTR,
376 ROCMFLAG_USE_DISPATCH_ID = AMDHSAFLAG_USE_DISPATCH_ID,
377 ROCMFLAG_USE_FLAT_SCRATCH_INIT = AMDHSAFLAG_USE_FLAT_SCRATCH_INIT,
379 ROCMFLAG_USE_GRID_WORKGROUP_COUNT_BIT = AMDHSAFLAG_USE_GRID_WORKGROUP_COUNT_BIT,
383 ROCMFLAG_USE_WAVE32 = AMDHSAFLAG_USE_WAVE32,
385 ROCMFLAG_USE_ORDERED_APPEND_GDS = AMDHSAFLAG_USE_ORDERED_APPEND_GDS,
388 ROCMFLAG_USE_DYNAMIC_CALL_STACK = AMDHSAFLAG_USE_DYNAMIC_CALL_STACK,
404 ROCMSECTID_HASH = ELFSECTID_OTHER_BUILTIN,
407 ROCMSECTID_GPUCONFIG,
410 ROCMSECTID_MAX = ROCMSECTID_GOT
430 bool llvm10BinFormat;
431 bool metadataV3Format;
456 void addEmptyKernel(
const char* kernelName);
466 std::unique_ptr<ElfBinaryGen64> elfBinGen64;
471 std::unique_ptr<cxbyte[]> noteBuf;
472 std::string metadataStr;
473 std::vector<cxbyte> metadataBytes;
475 const char* metadata;
477 uint16_t mainBuiltinSectTable[ROCMSECTID_MAX-ELFSECTID_START+1];
479 void* rocmRelaDynGen;
480 void* rocmLLVMGDataGen;
483 void generateInternal(std::ostream* osPtr, std::vector<char>* vPtr,
503 size_t codeSize,
const cxbyte* code,
504 size_t globalDataSize,
const cxbyte* globalData,
505 const std::vector<ROCmSymbolInput>& symbols);
508 size_t codeSize,
const cxbyte* code,
509 size_t globalDataSize,
const cxbyte* globalData,
510 std::vector<ROCmSymbolInput>&& symbols);
521 void prepareBinaryGen();
524 {
return elfBinGen64->getRegionOffset(
525 mainBuiltinSectTable[sectionId - ELFSECTID_START]); }
527 void updateSymbols();
533 void generate(std::ostream& os);
536 void generate(std::vector<char>& vector);
540 const ROCmKernelConfig** kconfigs, std::string& output);
542 void generateROCmMetadataMsgPack(
const ROCmMetadata& mdInfo,
545 void parseROCmMetadata(
size_t metadataSize,
const char* metadata,
548 void parseROCmMetadataMsgPack(
size_t metadataSize,
const cxbyte* metadata,
565 uint64_t parseInteger(
cxbyte signess);
567 std::string parseString();
573 bool haveElements()
const 578 MSGPACK_WS_UNSIGNED = 0,
579 MSGPACK_WS_SIGNED = 1,
590 void handleErrors(
bool key);
596 uint64_t parseKeyInteger(
cxbyte signess);
597 double parseKeyFloat();
598 std::string parseKeyString();
602 void parseValueNil();
603 bool parseValueBool();
604 uint64_t parseValueInteger(
cxbyte signess);
605 double parseValueFloat();
606 std::string parseValueString();
613 bool haveElements()
const 622 std::vector<cxbyte>& output;
628 void putBool(
bool b);
629 void putString(
const char* str);
630 void putUInt(uint64_t v);
638 std::vector<cxbyte>& output;
644 void putKeyString(
const char* str);
645 void putValueBool(
bool b);
646 void putValueString(
const char* str);
647 void putValueUInt(uint64_t v);
650 std::vector<cxbyte>& putValueElement();
ROCmAccessQual
ROCm access qualifier.
Definition: ROCmBinaries.h:122
CString format
printf format
Definition: ROCmBinaries.h:186
ROCmValueKind
ROCm Value kind.
Definition: ROCmBinaries.h:70
use 64-bit pointers
Definition: Commons.h:59
ROCm data region.
Definition: ROCmBinaries.h:61
non copyable and non movable base structure (class)
Definition: Utilities.h:46
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:100
const ROCmInput * getInput() const
get input
Definition: ROCmBinaries.h:515
ROCmRegionType type
type
Definition: ROCmBinaries.h:66
uint64_t pointeeAlign
alignemnt of pointed data of pointer
Definition: ROCmBinaries.h:141
const char * getMetadata() const
get metadata
Definition: ROCmBinaries.h:304
size_t size
data size
Definition: ROCmBinaries.h:64
all ROCm binaries flags
Definition: ROCmBinaries.h:49
bool isRestrict
is restrict
Definition: ROCmBinaries.h:148
ROCm printf call info.
Definition: ROCmBinaries.h:182
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:483
CString regionName
region name
Definition: ROCmBinaries.h:63
ROCmValueKind valueKind
value kind
Definition: ROCmBinaries.h:142
AMD HSA kernel configuration structure.
Definition: Commons.h:66
common definitions for binaries
size_t offset
data
Definition: ROCmBinaries.h:65
const Array< size_t > getGotSymbols() const
get GOT symbols (indices) (from elfbin dynsymbols)
Definition: ROCmBinaries.h:356
Definition: ROCmBinaries.h:635
size_t getKernelInfosNum() const
get kernel metadata infos number
Definition: ROCmBinaries.h:319
const ROCmRegion & getRegion(size_t index) const
get region by index
Definition: ROCmBinaries.h:273
const ROCmKernelMetadata & getKernelInfo(size_t index) const
get kernel metadata info
Definition: ROCmBinaries.h:323
Array< uint32_t > argSizes
unique id of call
Definition: ROCmBinaries.h:185
create metadata info object
Definition: ROCmBinaries.h:47
uint64_t align
argument alignment in bytes
Definition: ROCmBinaries.h:138
ROCmValueType
ROCm argument's value type.
Definition: ROCmBinaries.h:91
size_t getSectionOffset(cxuint sectionId) const
get section offset (from main section)
Definition: ROCmBinaries.h:523
size_t getMetadataSize() const
get metadata size
Definition: ROCmBinaries.h:301
ROCmAccessQual actualAccessQual
actual access qualifier
Definition: ROCmBinaries.h:146
size_t getCodeSize() const
get code size
Definition: ROCmBinaries.h:280
use kernel argument segment pointer
Definition: Commons.h:46
cxbyte * getGlobalData()
get global data
Definition: ROCmBinaries.h:297
CString name
name
Definition: ROCmBinaries.h:134
ROCm main binary for GPU for 64-bit mode.
Definition: ROCmBinaries.h:234
use ordered append gds
Definition: Commons.h:58
bool isConst
is constant
Definition: ROCmBinaries.h:147
bool isROCmBinary(size_t binarySize, const cxbyte *binary)
check whether is Amd OpenCL 2.0 binary
ROCmAccessQual accessQual
access qualifier (for images and values)
Definition: ROCmBinaries.h:145
creation flags for ELF binaries
Definition: ElfBinaries.h:73
Definition: ROCmBinaries.h:583
xnack enabled
Definition: Commons.h:62
bool isVolatile
is volatile
Definition: ROCmBinaries.h:149
unsigned char cxbyte
unsigned byte
Definition: Config.h:229
bool isPipe
is pipe
Definition: ROCmBinaries.h:150
use workgroup count for Y dim
Definition: Commons.h:52
main namespace
Definition: AsmDefs.h:38
size_t getGlobalDataSize() const
get global data size
Definition: ROCmBinaries.h:290
ROCmRegionType
ROCm region/symbol type.
Definition: ROCmBinaries.h:53
Array< std::pair< CString, size_t > > RegionMap
region map type
Definition: ROCmBinaries.h:238
cxbyte * getCode()
get code
Definition: ROCmBinaries.h:286
unsigned int cxuint
unsigned int
Definition: Config.h:237
use private segment buffer
Definition: Commons.h:43
size_t getGotSymbolsNum() const
get GOT symbol index (from elfbin dynsymbols)
Definition: ROCmBinaries.h:352
bool isNewBinaryFormat() const
return true is new binary format
Definition: ROCmBinaries.h:340
ROCm kernel argument.
Definition: ROCmBinaries.h:132
use private segment size
Definition: Commons.h:49
inlines for accessing memory words in LittleEndian and unaligned
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
const cxbyte * getCode() const
get code
Definition: ROCmBinaries.h:283
ROCm binary generator.
Definition: ROCmBinaries.h:460
ROCmValueType valueType
value type
Definition: ROCmBinaries.h:143
utilities for other libraries and programs
bool hasKernelInfoMap() const
returns true if object has kernel map
Definition: ROCmBinaries.h:367
passed as dynamic shared pointer
const CString & getTarget() const
get target
Definition: ROCmBinaries.h:336
Definition: ROCmBinaries.h:553
bool hasMetadataInfo() const
has metadata info
Definition: ROCmBinaries.h:311
Definition: ROCmBinaries.h:619
create region map
Definition: ROCmBinaries.h:46
bool hasRegionMap() const
returns true if kernel map exists
Definition: ROCmBinaries.h:364
use workgroup count for X dim
Definition: Commons.h:51
GPU identification utilities.
size_t size() const
returns number of elements
Definition: Containers.h:172
use queue pointer
Definition: Commons.h:45
ROCmAddressSpace
ROCm argument address space.
Definition: ROCmBinaries.h:109
size_t getRegionsNum() const
get regions number
Definition: ROCmBinaries.h:269
bool isMetadataV3Format() const
return true is metadata V3 code object format
Definition: ROCmBinaries.h:348
ROCmAddressSpace addressSpace
pointer address space
Definition: ROCmBinaries.h:144
void SLEV(uint8_t &r, uint8_t v)
save from/to little endian value
Definition: MemAccess.h:246
use workgroup count for Z dim
Definition: Commons.h:53
create kernel metadata info map
Definition: ROCmBinaries.h:48
size_t getGotSymbol(size_t index) const
get GOT symbol index (from elfbin dynsymbols)
Definition: ROCmBinaries.h:360
const ROCmMetadata & getMetadataInfo() const
get metadata info
Definition: ROCmBinaries.h:315
const cxbyte * getGlobalData() const
get global data
Definition: ROCmBinaries.h:294
bool isLLVM10BinaryFormat() const
return true is LLVM10 binary format
Definition: ROCmBinaries.h:344
Definition: ROCmBinaries.h:204
simple C-string container
Definition: CString.h:38
const ROCmKernelDescriptor * getKernelDescriptor(size_t index) const
get kernel descriptor
Definition: ROCmBinaries.h:330
containers and other utils for other libraries and programs
CString typeName
type name
Definition: ROCmBinaries.h:135
uint64_t size
argument size in bytes
Definition: ROCmBinaries.h:136
char * getMetadata()
get metadata
Definition: ROCmBinaries.h:307
debug enabled
Definition: Commons.h:61
pointer to constant memory
AmdHsaKernelConfig ROCmKernelConfig
ROCm kernel configuration structure.
Definition: ROCmBinaries.h:394