CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
AmdCL2Binaries.h
Go to the documentation of this file.
1 /*
2  * CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3  * Copyright (C) 2014-2018 Mateusz Szpakowski
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
23 #ifndef __CLRX_AMDCL2BINARIES_H__
24 #define __CLRX_AMDCL2BINARIES_H__
25 
26 #include <CLRX/Config.h>
27 #include <cstddef>
28 #include <cstdint>
29 #include <memory>
30 #include <string>
31 #include <CLRX/amdbin/Elf.h>
32 #include <CLRX/utils/MemAccess.h>
34 #include <CLRX/utils/Containers.h>
35 #include <CLRX/utils/Utilities.h>
36 #include <CLRX/utils/GPUId.h>
37 
39 namespace CLRX
40 {
41 
42 enum : Flags {
46 
50 };
51 
54 {
56  size_t setupSize;
58  size_t codeSize;
60 };
61 
64 {
65  size_t size;
67 };
68 
70 
73 {
74 public:
77 protected:
79  KernelDataMap kernelDataMap;
80 public:
81  virtual ~AmdCL2InnerGPUBinaryBase();
83  size_t getKernelsNum() const
84  { return kernels.size(); }
85 
87  const AmdCL2GPUKernel& getKernelData(size_t index) const
88  { return kernels[index]; }
89 
92  { return kernels[index]; }
93 
95  const AmdCL2GPUKernel& getKernelData(const char* name) const;
96 };
97 
101 {
102 private:
103  Flags creationFlags;
104  size_t binarySize;
105  cxbyte* binary;
106  std::unique_ptr<AmdCL2GPUKernelStub[]> kernelStubs;
107 public:
109  AmdCL2OldInnerGPUBinary() = default;
111 
117  template<typename Types>
118  AmdCL2OldInnerGPUBinary(ElfBinaryTemplate<Types>* mainBinary, size_t binaryCodeSize,
119  cxbyte* binaryCode, Flags creationFlags = AMDBIN_CREATE_ALL);
121  ~AmdCL2OldInnerGPUBinary() = default;
122 
124  size_t getSize() const
125  { return binarySize; }
127  const cxbyte* getBinaryCode() const
128  { return binary; }
131  { return binary; }
132 
134  bool hasKernelData() const
135  { return creationFlags & AMDCL2BIN_CREATE_KERNELDATA; }
137  bool hasKernelDataMap() const
138  { return creationFlags & AMDCL2BIN_CREATE_KERNELDATAMAP; }
140  bool hasKernelStubs() const
141  { return creationFlags & AMDCL2BIN_CREATE_KERNELSTUBS; }
142 
144  const AmdCL2GPUKernelStub& getKernelStub(size_t index) const
145  { return kernelStubs[index]; }
146 
148  const AmdCL2GPUKernelStub& getKernelStub(const char* name) const;
149 };
150 
152 
156 {
157 private:
158  size_t globalDataSize;
159  cxbyte* globalData;
160  size_t rwDataSize;
161  cxbyte* rwData;
162  size_t bssAlignment;
163  size_t bssSize;
164  size_t samplerInitSize;
165  cxbyte* samplerInit;
166  size_t textRelsNum;
167  size_t textRelEntrySize;
168  cxbyte* textRela;
169  size_t globalDataRelsNum;
170  size_t globalDataRelEntrySize;
171  cxbyte* globalDataRela;
172 public:
174  AmdCL2InnerGPUBinary() = default;
176 
181  AmdCL2InnerGPUBinary(size_t binaryCodeSize, cxbyte* binaryCode,
182  Flags creationFlags = AMDBIN_CREATE_ALL);
184  ~AmdCL2InnerGPUBinary() = default;
185 
187  bool hasKernelData() const
188  { return creationFlags & AMDCL2BIN_CREATE_KERNELDATA; }
190  bool hasKernelDataMap() const
191  { return creationFlags & AMDCL2BIN_CREATE_KERNELDATAMAP; }
192 
194  size_t getGlobalDataSize() const
195  { return globalDataSize; }
196 
198  const cxbyte* getGlobalData() const
199  { return globalData; }
202  { return globalData; }
203 
205  size_t getRwDataSize() const
206  { return rwDataSize; }
207 
209  const cxbyte* getRwData() const
210  { return rwData; }
213  { return rwData; }
215  size_t getBssAlignment() const
216  { return bssAlignment; }
218  size_t getBssSize() const
219  { return bssSize; }
220 
222  size_t getSamplerInitSize() const
223  { return samplerInitSize; }
224 
226  const cxbyte* getSamplerInit() const
227  { return samplerInit; }
230  { return samplerInit; }
231 
233  size_t getTextRelaEntriesNum() const
234  { return textRelsNum; }
236  const Elf64_Rela& getTextRelaEntry(size_t index) const
237  { return *reinterpret_cast<const Elf64_Rela*>(textRela + textRelEntrySize*index); }
240  { return *reinterpret_cast<Elf64_Rela*>(textRela + textRelEntrySize*index); }
241 
244  { return globalDataRelsNum; }
246  const Elf64_Rela& getGlobalDataRelaEntry(size_t index) const
247  { return *reinterpret_cast<const Elf64_Rela*>(globalDataRela +
248  globalDataRelEntrySize*index); }
251  { return *reinterpret_cast<Elf64_Rela*>(globalDataRela +
252  globalDataRelEntrySize*index); }
253 };
254 
257 {
259  size_t size;
261 };
262 
265 {
266  uint32_t size;
267  uint32_t metadataSize;
268  uint32_t unknown1[3];
269  uint32_t options;
270  uint16_t kernelId;
271  uint16_t unknownx;
272  uint32_t unknowny;
273  uint64_t unknown2[2];
274  uint32_t reqdWorkGroupSize[3];
275  uint32_t unknown3[3];
276  uint32_t firstNameLength;
277  uint32_t secondNameLength;
278  uint32_t unknown4[3];
279  uint32_t pipesUsage;
280  uint32_t unknown5[2];
281  uint64_t argsNum;
282 };
283 
285 {
286  uint32_t workGroupSizeHint[3];
287  uint32_t vecTypeHintLength;
288  uint32_t unused;
289 };
290 
293 {
294  uint64_t size;
295  uint64_t metadataSize;
296  uint32_t unknown1[3];
297  uint32_t options;
298  uint16_t kernelId;
299  uint16_t unknownx;
300  uint32_t unknowny;
301  uint64_t unknown2[2];
302  uint64_t reqdWorkGroupSize[3];
303  uint64_t unknown3[2];
304  uint64_t firstNameLength;
305  uint64_t secondNameLength;
306  uint64_t unknown4[3];
307  uint64_t pipesUsage;
308  uint64_t unknown5[2];
309  uint64_t argsNum;
310 };
311 
313 {
314  uint64_t workGroupSizeHint[3];
315  uint64_t vecTypeHintLength;
316  uint64_t unused;
317 };
318 
321 {
322  uint32_t size;
323  uint32_t argNameSize;
324  uint32_t typeNameSize;
325  uint32_t unknown1, unknown2;
326  union {
327  uint32_t vectorLength;
328  uint32_t resId;
329  uint32_t structSize;
330  };
331  uint32_t unknown3;
332  uint32_t argOffset;
333  uint32_t argType;
334  uint32_t ptrAlignment;
335  uint32_t ptrType;
336  uint32_t ptrSpace;
337  uint32_t isPointerOrPipe;
341  cxbyte unknown4;
342  uint32_t kindOfType;
343  uint32_t isConst;
344 };
345 
348 {
349  uint64_t size;
350  uint64_t argNameSize;
351  uint64_t typeNameSize;
352  uint64_t unknown1, unknown2;
353  union {
354  uint32_t vectorLength;
355  uint32_t resId;
356  uint32_t structSize;
357  };
358  uint32_t unknown3;
359  uint32_t argOffset;
360  uint32_t argType;
361  uint32_t ptrAlignment;
362  uint32_t ptrType;
363  uint32_t ptrSpace;
364  uint32_t isPointerOrPipe;
368  cxbyte unknown4;
369  uint32_t kindOfType;
370  uint64_t isConst;
371 };
372 
375 {
376 public:
379 protected:
381  size_t kernelsNum;
382  std::unique_ptr<AmdCL2GPUKernelMetadata[]> metadatas;
384  std::unique_ptr<AmdGPUKernelHeader[]> kernelHeaders;
385  MetadataMap isaMetadataMap;
386 
388  std::unique_ptr<AmdCL2InnerGPUBinaryBase> innerBinary;
389 
391  template<typename Types>
392  void initMainGPUBinary(typename Types::ElfBinary& elfBin);
393 
395  template<typename Types>
396  GPUDeviceType determineGPUDeviceTypeInt(const typename Types::ElfBinary& elfBin,
397  uint32_t& archMinor, uint32_t& archStepping, cxuint driverVersion) const;
398 
399 public:
401  explicit AmdCL2MainGPUBinaryBase(AmdMainType amdMainType);
403  ~AmdCL2MainGPUBinaryBase() = default;
404 
406  bool hasInnerBinary() const
407  { return innerBinary.get()!=nullptr; }
408 
411  { return driverVersion; }
412 
415  { return *innerBinary; }
416 
419  { return *innerBinary; }
420 
423  { return *static_cast<const AmdCL2InnerGPUBinary*>(innerBinary.get()); }
424 
427  { return *static_cast<AmdCL2InnerGPUBinary*>(innerBinary.get()); }
428 
431  { return *static_cast<const AmdCL2OldInnerGPUBinary*>(innerBinary.get()); }
432 
435  { return *static_cast<AmdCL2OldInnerGPUBinary*>(innerBinary.get()); }
436 
438  const AmdGPUKernelHeader& getKernelHeaderEntry(size_t index) const
439  { return kernelHeaders[index]; }
441  const AmdGPUKernelHeader& getKernelHeaderEntry(const char* name) const;
442 
444  size_t getISAMetadatasNum() const
445  { return isaMetadatas.size(); }
446 
448  const AmdCL2GPUKernelMetadata& getISAMetadataEntry(size_t index) const
449  { return isaMetadatas[index]; }
451  const AmdCL2GPUKernelMetadata& getISAMetadataEntry(const char* name) const;
452 
454  size_t getISAMetadataSize(size_t index) const
455  { return isaMetadatas[index].size; }
456 
458  const cxbyte* getISAMetadata(size_t index) const
459  { return isaMetadatas[index].data; }
460 
462  cxbyte* getISAMetadata(size_t index)
463  { return isaMetadatas[index].data; }
464 
466  const AmdCL2GPUKernelMetadata& getMetadataEntry(size_t index) const
467  { return metadatas[index]; }
469  const AmdCL2GPUKernelMetadata& getMetadataEntry(const char* name) const;
470 
472  size_t getMetadataSize(size_t index) const
473  { return metadatas[index].size; }
474 
476  const cxbyte* getMetadata(size_t index) const
477  { return metadatas[index].data; }
478 
480  cxbyte* getMetadata(size_t index)
481  { return metadatas[index].data; }
482 
485  { return aclVersionString; }
486 };
487 
489 
493 {
494 public:
496  AmdCL2MainGPUBinary32(size_t binaryCodeSize, cxbyte* binaryCode,
497  Flags creationFlags = AMDBIN_CREATE_ALL);
499  ~AmdCL2MainGPUBinary32() = default;
500 
502 
508  GPUDeviceType determineGPUDeviceType(uint32_t& archMinor, uint32_t& archStepping,
509  cxuint driverVersion = 0) const;
510 
512  bool hasKernelInfo() const
513  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
514 
516  bool hasKernelInfoMap() const
517  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
518 
520  bool hasInfoStrings() const
521  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
522 };
523 
525 
529 {
530 public:
532  AmdCL2MainGPUBinary64(size_t binaryCodeSize, cxbyte* binaryCode,
533  Flags creationFlags = AMDBIN_CREATE_ALL);
535  ~AmdCL2MainGPUBinary64() = default;
536 
538 
544  GPUDeviceType determineGPUDeviceType(uint32_t& archMinor, uint32_t& archStepping,
545  cxuint driverVersion = 0) const;
546 
548  bool hasKernelInfo() const
549  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
550 
552  bool hasKernelInfoMap() const
553  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
554 
556  bool hasInfoStrings() const
557  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
558 };
559 
561 
568  size_t binaryCodeSize, cxbyte* binaryCode,
569  Flags creationFlags = AMDBIN_CREATE_ALL);
570 
572 extern bool isAmdCL2Binary(size_t binarySize, const cxbyte* binary);
573 
574 };
575 
576 #endif
size_t codeSize
size
Definition: AmdCL2Binaries.h:58
const AmdCL2OldInnerGPUBinary & getOldInnerBinary() const
get old inner binary
Definition: AmdCL2Binaries.h:430
bool hasKernelData() const
return if binary has kernel datas
Definition: AmdCL2Binaries.h:134
uint64_t firstNameLength
first name length
Definition: AmdCL2Binaries.h:304
uint32_t kindOfType
kind of type
Definition: AmdCL2Binaries.h:369
cxbyte isPipe
if pipe
Definition: AmdCL2Binaries.h:340
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:147
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:382
size_t getTextRelaEntriesNum() const
get text rel entries number
Definition: AmdCL2Binaries.h:233
AMD GPU header for kernel.
Definition: AmdBinaries.h:467
uint32_t ptrType
pointer type
Definition: AmdCL2Binaries.h:362
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:361
uint32_t argNameSize
argument name size
Definition: AmdCL2Binaries.h:323
size_t getSize() const
return binary size
Definition: AmdCL2Binaries.h:124
cxbyte isPipe
if pipe
Definition: AmdCL2Binaries.h:367
const AmdCL2InnerGPUBinaryBase & getInnerBinaryBase() const
get inner binary base
Definition: AmdCL2Binaries.h:414
cxuint getDriverVersion() const
get driver version
Definition: AmdCL2Binaries.h:410
AMD OpenCL 2.0 main binary for GPU for 32-bit mode.
Definition: AmdCL2Binaries.h:492
cxbyte isRestrict
if pointer is restrict
Definition: AmdCL2Binaries.h:366
uint32_t secondNameLength
second name length
Definition: AmdCL2Binaries.h:277
uint16_t kernelId
kernel id
Definition: AmdCL2Binaries.h:298
GPU kernel argument entry.
Definition: AmdCL2Binaries.h:347
uint64_t isConst
is const pointer
Definition: AmdCL2Binaries.h:370
cxbyte * getBinaryCode()
return binary code
Definition: AmdCL2Binaries.h:130
uint32_t ptrSpace
pointer space
Definition: AmdCL2Binaries.h:363
uint64_t secondNameLength
second name length
Definition: AmdCL2Binaries.h:305
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:483
Array< AmdCL2GPUKernel > kernels
kernel headers
Definition: AmdCL2Binaries.h:78
GPU kernel argument entry.
Definition: AmdCL2Binaries.h:320
cxbyte * getGlobalData()
get global data
Definition: AmdCL2Binaries.h:201
CString kernelName
kernel name
Definition: AmdCL2Binaries.h:258
Elf64_Rela & getTextRelaEntry(size_t index)
get text rela entry
Definition: AmdCL2Binaries.h:239
header for metadata
Definition: AmdCL2Binaries.h:292
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:454
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:351
Configuration header.
uint32_t size
entry size
Definition: AmdCL2Binaries.h:322
size_t getBssSize() const
get bss section&#39;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:365
AMD OpenCL 2.0 GPU kernel stub.
Definition: AmdCL2Binaries.h:63
Definition: Elf.h:462
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:458
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:552
uint32_t resId
resource id
Definition: AmdCL2Binaries.h:355
cxbyte * getISAMetadata(size_t index)
get ISA metadata for specified inner binary
Definition: AmdCL2Binaries.h:462
size_t getISAMetadatasNum() const
get number of ISA metadatas
Definition: AmdCL2Binaries.h:444
Array< AmdCL2GPUKernelMetadata > isaMetadatas
AMD metadatas.
Definition: AmdCL2Binaries.h:383
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
uint64_t size
size
Definition: AmdCL2Binaries.h:294
const CString & getAclVersionString() const
get acl version string
Definition: AmdCL2Binaries.h:484
uint32_t argOffset
virtual argument offset
Definition: AmdCL2Binaries.h:359
AMD binaries handling.
uint32_t kindOfType
kind of type
Definition: AmdCL2Binaries.h:342
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:472
Definition: AmdCL2Binaries.h:312
cxbyte isVolatile
nonzero if pointer or pipe
Definition: AmdCL2Binaries.h:338
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:422
unsigned int cxuint
unsigned int
Definition: Config.h:223
create kernel stub
Definition: AmdCL2Binaries.h:49
uint32_t ptrSpace
pointer space
Definition: AmdCL2Binaries.h:336
uint64_t argNameSize
argument name size
Definition: AmdCL2Binaries.h:350
Definition: AmdCL2Binaries.h:284
create kernel setup
Definition: AmdCL2Binaries.h:43
uint32_t size
size
Definition: AmdCL2Binaries.h:266
bool hasInnerBinary() const
returns true if inner binary exists
Definition: AmdCL2Binaries.h:406
uint32_t argType
argument type
Definition: AmdCL2Binaries.h:360
std::unique_ptr< AmdGPUKernelHeader[]> kernelHeaders
kernel headers
Definition: AmdCL2Binaries.h:384
const AmdCL2GPUKernelMetadata & getISAMetadataEntry(size_t index) const
get kernel ISA metadata by kernel index
Definition: AmdCL2Binaries.h:448
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:328
cxuint driverVersion
driver version
Definition: AmdCL2Binaries.h:380
uint32_t firstNameLength
first name length
Definition: AmdCL2Binaries.h:276
uint32_t typeNameSize
type name size
Definition: AmdCL2Binaries.h:324
MetadataMap isaMetadataMap
ISA metadata map.
Definition: AmdCL2Binaries.h:385
uint32_t argType
argument type
Definition: AmdCL2Binaries.h:333
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:434
const AmdCL2GPUKernelMetadata & getMetadataEntry(size_t index) const
get kernel metadata by index
Definition: AmdCL2Binaries.h:466
AmdCL2InnerGPUBinary & getInnerBinary()
get inner binary
Definition: AmdCL2Binaries.h:426
cxbyte * data
data
Definition: AmdCL2Binaries.h:260
uint32_t vectorLength
vector length (for old drivers not aligned)
Definition: AmdCL2Binaries.h:354
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header for specified index
Definition: AmdCL2Binaries.h:438
size_t size
size
Definition: AmdCL2Binaries.h:259
AmdCL2InnerGPUBinaryBase & getInnerBinaryBase()
get inner binary base
Definition: AmdCL2Binaries.h:418
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdCL2Binaries.h:548
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:339
KernelDataMap kernelDataMap
kernel data map
Definition: AmdCL2Binaries.h:79
utilities for other libraries and programs
CString aclVersionString
acl version string
Definition: AmdCL2Binaries.h:387
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:335
uint64_t argsNum
number of arguments
Definition: AmdCL2Binaries.h:281
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:476
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:480
size_t size() const
returns number of elements
Definition: Containers.h:169
uint16_t kernelId
kernel id
Definition: AmdCL2Binaries.h:270
uint32_t ptrAlignment
pointer alignment
Definition: AmdCL2Binaries.h:334
size_t kernelsNum
kernels number
Definition: AmdCL2Binaries.h:381
const T * data() const
get data
Definition: Containers.h:243
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdCL2Binaries.h:520
uint32_t isConst
is const pointer
Definition: AmdCL2Binaries.h:343
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdCL2Binaries.h:556
size_t setupSize
setup size
Definition: AmdCL2Binaries.h:56
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:481
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:512
CString kernelName
kernel name
Definition: AmdCL2Binaries.h:55
uint64_t size
entry size
Definition: AmdCL2Binaries.h:349
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:516
cxbyte * setup
setup data
Definition: AmdCL2Binaries.h:57
header for metadata
Definition: AmdCL2Binaries.h:264
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:378
AMD OpenCL 2.0 main binary for GPU for 64-bit mode.
Definition: AmdCL2Binaries.h:528
uint64_t argsNum
number of arguments
Definition: AmdCL2Binaries.h:309
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:374
uint32_t vectorLength
vector length (for old drivers not aligned)
Definition: AmdCL2Binaries.h:327
simple C-string container
Definition: CString.h:38
Elf.h definitions.
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:388
uint32_t argOffset
virtual argument offset
Definition: AmdCL2Binaries.h:332
cxbyte * getSamplerInit()
get global data
Definition: AmdCL2Binaries.h:229
AMD OpenCL 2.0 GPU metadata for kernel.
Definition: AmdCL2Binaries.h:256
bool hasKernelData() const
return if binary has kernel datas
Definition: AmdCL2Binaries.h:187