23 #ifndef __CLRX_AMDCL2BINARIES_H__ 24 #define __CLRX_AMDCL2BINARIES_H__ 84 {
return kernels.
size(); }
88 {
return kernels[index]; }
92 {
return kernels[index]; }
106 std::unique_ptr<AmdCL2GPUKernelStub[]> kernelStubs;
117 template<
typename Types>
125 {
return binarySize; }
145 {
return kernelStubs[index]; }
158 size_t globalDataSize;
164 size_t samplerInitSize;
167 size_t textRelEntrySize;
169 size_t globalDataRelsNum;
170 size_t globalDataRelEntrySize;
195 {
return globalDataSize; }
199 {
return globalData; }
202 {
return globalData; }
206 {
return rwDataSize; }
216 {
return bssAlignment; }
223 {
return samplerInitSize; }
227 {
return samplerInit; }
230 {
return samplerInit; }
234 {
return textRelsNum; }
237 {
return *
reinterpret_cast<const Elf64_Rela*
>(textRela + textRelEntrySize*index); }
240 {
return *
reinterpret_cast<Elf64_Rela*
>(textRela + textRelEntrySize*index); }
244 {
return globalDataRelsNum; }
247 {
return *
reinterpret_cast<const Elf64_Rela*
>(globalDataRela +
248 globalDataRelEntrySize*index); }
251 {
return *
reinterpret_cast<Elf64_Rela*
>(globalDataRela +
252 globalDataRelEntrySize*index); }
267 uint32_t metadataSize;
268 uint32_t unknown1[3];
273 uint64_t unknown2[2];
274 uint32_t reqdWorkGroupSize[3];
275 uint32_t unknown3[3];
278 uint32_t unknown4[3];
280 uint32_t unknown5[2];
288 uint64_t metadataSize;
289 uint32_t unknown1[3];
294 uint64_t unknown2[2];
295 uint64_t reqdWorkGroupSize[3];
296 uint64_t unknown3[2];
299 uint64_t unknown4[3];
301 uint64_t unknown5[2];
311 uint32_t unknown1, unknown2;
323 uint32_t isPointerOrPipe;
338 uint64_t unknown1, unknown2;
350 uint32_t isPointerOrPipe;
377 template<
typename Types>
378 void initMainGPUBinary(
typename Types::ElfBinary& elfBin);
381 template<
typename Types>
382 GPUDeviceType determineGPUDeviceTypeInt(
const typename Types::ElfBinary& elfBin,
383 uint32_t& archMinor, uint32_t& archStepping,
cxuint driverVersion)
const;
393 {
return innerBinary.get()!=
nullptr; }
397 {
return driverVersion; }
401 {
return *innerBinary; }
405 {
return *innerBinary; }
425 {
return kernelHeaders[index]; }
431 {
return isaMetadatas.
size(); }
435 {
return isaMetadatas[index]; }
441 {
return isaMetadatas[index].
size; }
445 {
return isaMetadatas[index].
data; }
449 {
return isaMetadatas[index].
data; }
453 {
return metadatas[index]; }
459 {
return metadatas[index].size; }
463 {
return metadatas[index].data; }
467 {
return metadatas[index].data; }
471 {
return aclVersionString; }
494 GPUDeviceType determineGPUDeviceType(uint32_t& archMinor, uint32_t& archStepping,
495 cxuint driverVersion = 0)
const;
530 GPUDeviceType determineGPUDeviceType(uint32_t& archMinor, uint32_t& archStepping,
531 cxuint driverVersion = 0)
const;
554 size_t binaryCodeSize,
cxbyte* binaryCode,
size_t codeSize
size
Definition: AmdCL2Binaries.h:58
const AmdCL2OldInnerGPUBinary & getOldInnerBinary() const
get old inner binary
Definition: AmdCL2Binaries.h:416
bool hasKernelData() const
return if binary has kernel datas
Definition: AmdCL2Binaries.h:134
uint32_t kindOfType
kind of type
Definition: AmdCL2Binaries.h:355
cxbyte isPipe
if pipe
Definition: AmdCL2Binaries.h:326
non copyable and non movable base structure (class)
Definition: Utilities.h:43
const cxbyte * getRwData() const
get readwrite atomic data
Definition: AmdCL2Binaries.h:209
ELF binary class.
Definition: ElfBinaries.h:145
AmdCL2MainGPUBinaryBase * createAmdCL2BinaryFromCode(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
create AMD binary object from binary code
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
std::unique_ptr< AmdCL2GPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdCL2Binaries.h:368
size_t getTextRelaEntriesNum() const
get text rel entries number
Definition: AmdCL2Binaries.h:233
uint32_t ptrType
pointer type
Definition: AmdCL2Binaries.h:348
cxbyte * code
data
Definition: AmdCL2Binaries.h:59
create kernel stub
Definition: AmdCL2Binaries.h:45
Array< std::pair< CString, size_t > > KernelDataMap
inner binary map type
Definition: AmdCL2Binaries.h:76
uint32_t ptrAlignment
pointer alignment
Definition: AmdCL2Binaries.h:347
uint32_t argNameSize
argument name size
Definition: AmdCL2Binaries.h:309
size_t getSize() const
return binary size
Definition: AmdCL2Binaries.h:124
cxbyte isPipe
if pipe
Definition: AmdCL2Binaries.h:353
const AmdCL2InnerGPUBinaryBase & getInnerBinaryBase() const
get inner binary base
Definition: AmdCL2Binaries.h:400
cxuint getDriverVersion() const
get driver version
Definition: AmdCL2Binaries.h:396
AMD OpenCL 2.0 main binary for GPU for 32-bit mode.
Definition: AmdCL2Binaries.h:478
cxbyte isRestrict
if pointer is restrict
Definition: AmdCL2Binaries.h:352
GPU kernel argument entry.
Definition: AmdCL2Binaries.h:333
uint64_t isConst
is const pointer
Definition: AmdCL2Binaries.h:356
cxbyte * getBinaryCode()
return binary code
Definition: AmdCL2Binaries.h:130
uint32_t ptrSpace
pointer space
Definition: AmdCL2Binaries.h:349
size_t getGlobalDataRelaEntriesNum() const
get global data rel entries number
Definition: AmdCL2Binaries.h:243
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:461
Array< AmdCL2GPUKernel > kernels
kernel headers
Definition: AmdCL2Binaries.h:78
GPU kernel argument entry.
Definition: AmdCL2Binaries.h:306
cxbyte * getGlobalData()
get global data
Definition: AmdCL2Binaries.h:201
Elf64_Rela & getTextRelaEntry(size_t index)
get text rela entry
Definition: AmdCL2Binaries.h:239
const Elf64_Rela & getTextRelaEntry(size_t index) const
get text rela entry
Definition: AmdCL2Binaries.h:236
size_t getISAMetadataSize(size_t index) const
get ISA metadata size for specified inner binary
Definition: AmdCL2Binaries.h:440
an array class
Definition: Containers.h:38
const AmdCL2GPUKernelStub & getKernelStub(size_t index) const
get kernel stub for specified index
Definition: AmdCL2Binaries.h:144
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:402
uint64_t typeNameSize
type name size
Definition: AmdCL2Binaries.h:337
uint32_t size
entry size
Definition: AmdCL2Binaries.h:308
size_t getBssSize() const
get bss section's size
Definition: AmdCL2Binaries.h:218
size_t getBssAlignment() const
get bss alignment
Definition: AmdCL2Binaries.h:215
cxbyte isVolatile
nonzero if pointer or pipe
Definition: AmdCL2Binaries.h:351
AMD OpenCL 2.0 GPU kernel stub.
Definition: AmdCL2Binaries.h:63
const cxbyte * getBinaryCode() const
return binary code
Definition: AmdCL2Binaries.h:127
const cxbyte * getISAMetadata(size_t index) const
get ISA metadata for specified inner binary
Definition: AmdCL2Binaries.h:444
size_t getKernelsNum() const
get kernels number
Definition: AmdCL2Binaries.h:83
bool isAmdCL2Binary(size_t binarySize, const cxbyte *binary)
check whether is Amd OpenCL 2.0 binary
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdCL2Binaries.h:538
uint32_t resId
resource id
Definition: AmdCL2Binaries.h:341
cxbyte * getISAMetadata(size_t index)
get ISA metadata for specified inner binary
Definition: AmdCL2Binaries.h:448
size_t getISAMetadatasNum() const
get number of ISA metadatas
Definition: AmdCL2Binaries.h:430
Array< AmdCL2GPUKernelMetadata > isaMetadatas
AMD metadatas.
Definition: AmdCL2Binaries.h:369
create kernel setup
Definition: AmdCL2Binaries.h:47
all AMD binaries creation flags
Definition: AmdBinaries.h:63
AmdCL2GPUKernel & getKernelData(size_t index)
get kernel data for specified index
Definition: AmdCL2Binaries.h:91
const CString & getAclVersionString() const
get acl version string
Definition: AmdCL2Binaries.h:470
uint32_t argOffset
virtual argument offset
Definition: AmdCL2Binaries.h:345
uint32_t kindOfType
kind of type
Definition: AmdCL2Binaries.h:328
unsigned char cxbyte
unsigned byte
Definition: Config.h:215
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdCL2Binaries.h:458
cxbyte isVolatile
nonzero if pointer or pipe
Definition: AmdCL2Binaries.h:324
main namespace
Definition: AsmDefs.h:38
cxbyte * data
setup data
Definition: AmdCL2Binaries.h:66
create kernel informations
Definition: AmdBinaries.h:51
create kernel setups map
Definition: AmdCL2Binaries.h:48
create compile options and driver info
Definition: AmdBinaries.h:54
const cxbyte * getGlobalData() const
get global data
Definition: AmdCL2Binaries.h:198
const AmdCL2InnerGPUBinary & getInnerBinary() const
get inner binary
Definition: AmdCL2Binaries.h:408
unsigned int cxuint
unsigned int
Definition: Config.h:223
create kernel stub
Definition: AmdCL2Binaries.h:49
uint32_t ptrSpace
pointer space
Definition: AmdCL2Binaries.h:322
uint64_t argNameSize
argument name size
Definition: AmdCL2Binaries.h:336
create kernel setup
Definition: AmdCL2Binaries.h:43
bool hasInnerBinary() const
returns true if inner binary exists
Definition: AmdCL2Binaries.h:392
uint32_t argType
argument type
Definition: AmdCL2Binaries.h:346
std::unique_ptr< AmdGPUKernelHeader[]> kernelHeaders
kernel headers
Definition: AmdCL2Binaries.h:370
const AmdCL2GPUKernelMetadata & getISAMetadataEntry(size_t index) const
get kernel ISA metadata by kernel index
Definition: AmdCL2Binaries.h:434
main AMD binary base class
Definition: AmdBinaries.h:413
AMD OpenCL 2.0 GPU metadata for kernel.
Definition: AmdCL2Binaries.h:53
inlines for accessing memory words in LittleEndian and unaligned
uint32_t resId
resource id
Definition: AmdCL2Binaries.h:314
cxuint driverVersion
driver version
Definition: AmdCL2Binaries.h:366
uint32_t typeNameSize
type name size
Definition: AmdCL2Binaries.h:310
MetadataMap isaMetadataMap
ISA metadata map.
Definition: AmdCL2Binaries.h:371
uint32_t argType
argument type
Definition: AmdCL2Binaries.h:319
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
size_t getGlobalDataSize() const
get global data size
Definition: AmdCL2Binaries.h:194
bool hasKernelDataMap() const
return if binary has kernel datas map
Definition: AmdCL2Binaries.h:137
AmdCL2OldInnerGPUBinary & getOldInnerBinary()
get old inner binary
Definition: AmdCL2Binaries.h:420
const AmdCL2GPUKernelMetadata & getMetadataEntry(size_t index) const
get kernel metadata by index
Definition: AmdCL2Binaries.h:452
AmdCL2InnerGPUBinary & getInnerBinary()
get inner binary
Definition: AmdCL2Binaries.h:412
uint32_t vectorLength
vector length (for old drivers not aligned)
Definition: AmdCL2Binaries.h:340
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header for specified index
Definition: AmdCL2Binaries.h:424
AmdCL2InnerGPUBinaryBase & getInnerBinaryBase()
get inner binary base
Definition: AmdCL2Binaries.h:404
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdCL2Binaries.h:534
bool hasKernelDataMap() const
return if binary has kernel datas map
Definition: AmdCL2Binaries.h:190
AMD OpenCL 2.0 inner binary for GPU binaries that represent a single kernel.
Definition: AmdCL2Binaries.h:155
cxbyte isRestrict
if pointer is restrict
Definition: AmdCL2Binaries.h:325
KernelDataMap kernelDataMap
kernel data map
Definition: AmdCL2Binaries.h:79
utilities for other libraries and programs
CString aclVersionString
acl version string
Definition: AmdCL2Binaries.h:373
const AmdCL2GPUKernel & getKernelData(size_t index) const
get kernel data for specified index
Definition: AmdCL2Binaries.h:87
size_t size
setup size
Definition: AmdCL2Binaries.h:65
size_t getSamplerInitSize() const
get global data size
Definition: AmdCL2Binaries.h:222
uint32_t ptrType
pointer type
Definition: AmdCL2Binaries.h:321
AMD OpenCL 2.0 old inner binary for GPU binaries that represent a single kernel.
Definition: AmdCL2Binaries.h:99
GPU identification utilities.
bool hasKernelStubs() const
return if binary has kernel stubs
Definition: AmdCL2Binaries.h:140
const cxbyte * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdCL2Binaries.h:462
Elf64_Rela & getGlobalDataRelaEntry(size_t index)
get global data rela entry
Definition: AmdCL2Binaries.h:250
cxbyte * getMetadata(size_t index)
get metadata for specified inner binary
Definition: AmdCL2Binaries.h:466
size_t size() const
returns number of elements
Definition: Containers.h:169
uint32_t ptrAlignment
pointer alignment
Definition: AmdCL2Binaries.h:320
size_t kernelsNum
kernels number
Definition: AmdCL2Binaries.h:367
const T * data() const
get data
Definition: Containers.h:243
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdCL2Binaries.h:506
uint32_t isConst
is const pointer
Definition: AmdCL2Binaries.h:329
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdCL2Binaries.h:542
size_t setupSize
setup size
Definition: AmdCL2Binaries.h:56
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:459
const Elf64_Rela & getGlobalDataRelaEntry(size_t index) const
get global data rela entry
Definition: AmdCL2Binaries.h:246
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdCL2Binaries.h:498
CString kernelName
kernel name
Definition: AmdCL2Binaries.h:55
uint64_t size
entry size
Definition: AmdCL2Binaries.h:335
const cxbyte * getSamplerInit() const
get global data
Definition: AmdCL2Binaries.h:226
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdCL2Binaries.h:502
cxbyte * setup
setup data
Definition: AmdCL2Binaries.h:57
size_t getRwDataSize() const
get readwrite global data size
Definition: AmdCL2Binaries.h:205
cxbyte * getRwData()
get readwrite atomic data
Definition: AmdCL2Binaries.h:212
Array< std::pair< CString, size_t > > MetadataMap
type definition of metadata map
Definition: AmdCL2Binaries.h:364
AMD OpenCL 2.0 main binary for GPU for 64-bit mode.
Definition: AmdCL2Binaries.h:514
create map of kernel informations
Definition: AmdBinaries.h:52
create kernel setups map
Definition: AmdCL2Binaries.h:44
base class of AMD OpenCL 2.0 binaries
Definition: AmdCL2Binaries.h:360
uint32_t vectorLength
vector length (for old drivers not aligned)
Definition: AmdCL2Binaries.h:313
simple C-string container
Definition: CString.h:38
containers and other utils for other libraries and programs
AMD OpenCL 2.0 inner binary base class.
Definition: AmdCL2Binaries.h:72
std::unique_ptr< AmdCL2InnerGPUBinaryBase > innerBinary
inner binary pointer
Definition: AmdCL2Binaries.h:374
uint32_t argOffset
virtual argument offset
Definition: AmdCL2Binaries.h:318
cxbyte * getSamplerInit()
get global data
Definition: AmdCL2Binaries.h:229
bool hasKernelData() const
return if binary has kernel datas
Definition: AmdCL2Binaries.h:187