CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
AmdBinaries.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_AMDBINARIES_H__
24 #define __CLRX_AMDBINARIES_H__
25 
26 #include <CLRX/Config.h>
27 #include <cstddef>
28 #include <cstdint>
29 #include <string>
30 #include <utility>
31 #include <memory>
32 #include <CLRX/amdbin/Elf.h>
34 #include <CLRX/utils/MemAccess.h>
35 #include <CLRX/utils/Containers.h>
36 #include <CLRX/utils/Utilities.h>
37 #include <CLRX/utils/GPUId.h>
38 
39 #ifdef HAVE_MINGW
40 #undef VOID
41 #endif
42 
44 namespace CLRX
45 {
46 
47 enum : Flags {
48  AMDBIN_INNER_INT_CREATE_ALL = 0xff,
50 
59 
62 
65 };
66 
67 enum : cxuint {
68  ELF_M_X86 = 0x7d4
69 };
70 
72 enum class KernelArgType : cxbyte
73 {
74  VOID = 0,
75  UCHAR, CHAR, USHORT, SHORT, UINT, INT, ULONG, LONG, FLOAT, DOUBLE, POINTER, IMAGE,
76  IMAGE1D, IMAGE1D_ARRAY, IMAGE1D_BUFFER, IMAGE2D, IMAGE2D_ARRAY, IMAGE3D,
77  UCHAR2, UCHAR3, UCHAR4, UCHAR8, UCHAR16,
78  CHAR2, CHAR3, CHAR4, CHAR8, CHAR16,
79  USHORT2, USHORT3, USHORT4, USHORT8, USHORT16,
80  SHORT2, SHORT3, SHORT4, SHORT8, SHORT16,
81  UINT2, UINT3, UINT4, UINT8, UINT16,
82  INT2, INT3, INT4, INT8, INT16,
83  ULONG2, ULONG3, ULONG4, ULONG8, ULONG16,
84  LONG2, LONG3, LONG4, LONG8, LONG16,
85  FLOAT2, FLOAT3, FLOAT4, FLOAT8, FLOAT16,
86  DOUBLE2, DOUBLE3, DOUBLE4, DOUBLE8, DOUBLE16,
87  SAMPLER, STRUCTURE, COUNTER32, COUNTER64, PIPE, CMDQUEUE, CLKEVENT,
88  MAX_VALUE = COUNTER64,
89  MAX_VALUE_CL2 = CLKEVENT,
90  MIN_IMAGE = IMAGE,
91  MAX_IMAGE = IMAGE3D
92 };
93 
95 inline bool isKernelArgImage(KernelArgType argType);
96 
97 inline bool isKernelArgImage(KernelArgType argType)
98 {
99  return argType>=KernelArgType::MIN_IMAGE && argType<=KernelArgType::MAX_IMAGE;
100 }
101 
103 enum class KernelPtrSpace : cxbyte
104 {
105  NONE = 0,
106  LOCAL,
107  CONSTANT,
108  GLOBAL,
109  MAX_VALUE = GLOBAL
110 };
111 
112 enum : cxbyte
113 {
118  KARG_PTR_ACCESS_MASK = 3,
122 };
123 
126 {
132 };
133 
136 {
137  uint32_t argType;
138  uint32_t ptrType;
139  uint32_t ptrAccess;
140  uint32_t nameOffset;
141 
143  size_t getNameOffset() const
144  { return ULEV(nameOffset); }
145 };
146 
149 {
150  uint32_t argType;
151  uint32_t ptrType;
152  uint32_t ptrAccess;
153  uint32_t nameOffsetLo;
154  uint32_t nameOffsetHi;
155 
157  size_t getNameOffset() const
158  { return (uint64_t(ULEV(nameOffsetHi))<<32)+uint64_t(ULEV(nameOffsetLo)); }
159 };
160 
161 enum : uint32_t
162 {
163  /* this cal note types comes from MultiSim-4.2 sources */
164  CALNOTE_ATI_PROGINFO = 1,
165  CALNOTE_ATI_INPUTS = 2,
166  CALNOTE_ATI_OUTPUTS = 3,
167  CALNOTE_ATI_CONDOUT = 4,
168  CALNOTE_ATI_FLOAT32CONSTS = 5,
169  CALNOTE_ATI_INT32CONSTS = 6,
170  CALNOTE_ATI_BOOL32CONSTS = 7,
171  CALNOTE_ATI_EARLYEXIT = 8,
172  CALNOTE_ATI_GLOBAL_BUFFERS = 9,
173  CALNOTE_ATI_CONSTANT_BUFFERS = 10,
174  CALNOTE_ATI_INPUT_SAMPLERS = 11,
175  CALNOTE_ATI_PERSISTENT_BUFFERS = 12,
176  CALNOTE_ATI_SCRATCH_BUFFERS = 13,
177  CALNOTE_ATI_SUB_CONSTANT_BUFFERS = 14,
178  CALNOTE_ATI_UAV_MAILBOX_SIZE = 15,
179  CALNOTE_ATI_UAV = 16,
180  CALNOTE_ATI_UAV_OP_MASK = 17,
181  CALNOTE_ATI_MAXTYPE = CALNOTE_ATI_UAV_OP_MASK
182 };
183 
186 {
187  uint32_t machine;
188  uint32_t type;
189  uint32_t offset;
190  uint32_t size;
191  uint32_t flags;
192 };
193 
196 {
197  uint32_t nameSize;
198  uint32_t descSize;
199  uint32_t type;
200  char name[8];
201 };
202 
204 struct CALNote
205 {
208 };
209 
212 {
214  const cxbyte* data;
215 };
216 
219 {
220  uint32_t address;
221  uint32_t value;
222 };
223 
226 {
227  uint32_t uavId;
228  uint32_t f1;
229  uint32_t f2;
230  uint32_t type;
231 };
232 
235 {
236  uint32_t offset;
237  uint32_t size;
238 };
239 
242 {
243  uint32_t index;
244  uint32_t size;
245 };
246 
249 {
250  uint32_t input;
251  uint32_t sampler;
252 };
253 
255 
259 {
262 };
263 
265 
269 {
270 private:
273  CString kernelName;
274  uint32_t encodingEntriesNum;
275  CALEncodingEntry* encodingEntries;
276  Array<Array<CALNote> > calNotesTable;
277 public:
278  AmdInnerGPUBinary32() = default;
285  AmdInnerGPUBinary32(const CString& kernelName, size_t binaryCodeSize,
286  cxbyte* binaryCode, Flags creationFlags = ELF_CREATE_ALL);
287  ~AmdInnerGPUBinary32() = default;
288 
290  bool hasCALNotes() const
291  { return (creationFlags & AMDBIN_CREATE_CALNOTES) != 0; }
292 
294  const CString& getKernelName() const
295  { return kernelName; }
296 
298  uint32_t getCALEncodingEntriesNum() const
299  { return encodingEntriesNum; }
300 
303  { return encodingEntries[index]; }
304 
307  { return encodingEntries[index]; }
308 
310  uint32_t getCALNotesNum(cxuint encodingIndex) const
311  { return calNotesTable[encodingIndex].size(); }
312 
314  const CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
315  { return *(calNotesTable[encodingIndex][index]).header; }
316 
318  CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index)
319  { return *(calNotesTable[encodingIndex][index]).header; }
320 
322  const cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index) const
323  { return calNotesTable[encodingIndex][index].data; }
325  cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index)
326  { return calNotesTable[encodingIndex][index].data; }
327 
329 
334  const CALNote& getCALNote(cxuint encodingIndex, uint32_t index) const
335  { return calNotesTable[encodingIndex][index]; }
336 
338 
343  CALNote& getCALNote(cxuint encodingIndex, uint32_t index)
344  { return calNotesTable[encodingIndex][index]; }
345 
347  const Array<CALNote>& getCALNotes(cxuint encodingIndex) const
348  { return calNotesTable[encodingIndex]; }
349 
352  { return calNotesTable[encodingIndex]; }
353 
355 
359  cxuint findCALEncodingEntryIndex(GPUDeviceType deviceType) const;
360 };
361 
364 {
365 public:
366  AmdInnerX86Binary32() = default;
372  AmdInnerX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
373  Flags creationFlags = ELF_CREATE_ALL);
374  ~AmdInnerX86Binary32() = default;
375 
377  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
378 };
379 
381 
385 {
386 public:
387  AmdInnerX86Binary64() = default;
393  AmdInnerX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
394  Flags creationFlags = ELF_CREATE_ALL);
395  ~AmdInnerX86Binary64() = default;
396 
398  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
399 };
400 
402 enum class AmdMainType
403 {
404  GPU_BINARY,
405  GPU_64_BINARY,
406  X86_BINARY,
407  X86_64_BINARY,
410 };
411 
414 {
415 public:
418 protected:
421  KernelInfoMap kernelInfosMap;
422 
425 
427  explicit AmdMainBinaryBase(AmdMainType type);
428 public:
429  virtual ~AmdMainBinaryBase();
430 
433  { return type; }
434 
436  size_t getKernelInfosNum() const
437  { return kernelInfos.size(); }
438 
440  const KernelInfo* getKernelInfos() const
441  { return kernelInfos.data(); }
442 
444  const KernelInfo& getKernelInfo(size_t index) const
445  { return kernelInfos[index]; }
446 
448  const KernelInfo& getKernelInfo(const char* name) const;
449 
451  const CString& getDriverInfo() const
452  { return driverInfo; }
453 
455  const CString& getCompileOptions() const
456  { return compileOptions; }
457 };
458 
461 {
462  size_t size;
463  char* data;
464 };
465 
468 {
470  size_t size;
472 };
473 
476 {
477 public:
482 protected:
484  InnerBinaryMap innerBinaryMap;
485  std::unique_ptr<AmdGPUKernelMetadata[]> metadatas;
487  KernelHeaderMap kernelHeaderMap;
488  size_t globalDataSize;
490 
492  explicit AmdMainGPUBinaryBase(AmdMainType type);
493 
495  template<typename Types>
496  void initMainGPUBinary(typename Types::ElfBinary& binary);
497 public:
499  size_t getInnerBinariesNum() const
500  { return innerBinaries.size(); }
501 
504  { return innerBinaries[index]; }
505 
507  const AmdInnerGPUBinary32& getInnerBinary(size_t index) const
508  { return innerBinaries[index]; }
509 
511  const AmdInnerGPUBinary32& getInnerBinary(const char* name) const;
512 
514  size_t getMetadataSize(size_t index) const
515  { return metadatas[index].size; }
516 
518  const char* getMetadata(size_t index) const
519  { return metadatas[index].data; }
520 
522  char* getMetadata(size_t index)
523  { return metadatas[index].data; }
524 
526  size_t getGlobalDataSize() const
527  { return globalDataSize; }
528 
530  const cxbyte* getGlobalData() const
531  { return globalData; }
534  { return globalData; }
535 
537  size_t getKernelHeadersNum() const
538  { return kernelHeaders.size(); }
539 
541  const AmdGPUKernelHeader& getKernelHeaderEntry(size_t index) const
542  { return kernelHeaders[index]; }
543 
545  const AmdGPUKernelHeader& getKernelHeaderEntry(const char* name) const;
546 
549  { return kernelHeaders[index]; }
550 
552  size_t getKernelHeaderSize(size_t index) const
553  { return kernelHeaders[index].size; }
554 
556  const cxbyte* getKernelHeader(size_t index) const
557  { return kernelHeaders[index].data; }
558 
560  cxbyte* getKernelHeader(size_t index)
561  { return kernelHeaders[index].data; }
562 };
563 
565 
569 {
570 public:
576  AmdMainGPUBinary32(size_t binaryCodeSize, cxbyte* binaryCode,
577  Flags creationFlags = AMDBIN_CREATE_ALL);
578  ~AmdMainGPUBinary32() = default;
579 
580  // determine GPU device type from this binary
581  GPUDeviceType determineGPUDeviceType() const;
582 
584  bool hasKernelInfo() const
585  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
586 
588  bool hasKernelInfoMap() const
589  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
590 
592  bool hasInnerBinaryMap() const
593  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
594 
596  bool hasInfoStrings() const
597  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
598 
600  bool hasKernelHeaders() const
601  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
602 
604  bool hasKernelHeaderMap() const
605  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
606 };
607 
609 
613 {
614 public:
620  AmdMainGPUBinary64(size_t binaryCodeSize, cxbyte* binaryCode,
621  Flags creationFlags = AMDBIN_CREATE_ALL);
622  ~AmdMainGPUBinary64() = default;
623 
624  // determine GPU device type from this binary
625  GPUDeviceType determineGPUDeviceType() const;
626 
628  bool hasKernelInfo() const
629  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
630 
632  bool hasKernelInfoMap() const
633  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
634 
636  bool hasInnerBinaryMap() const
637  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
638 
640  bool hasInfoStrings() const
641  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
642 
644  bool hasKernelHeaders() const
645  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
646 
648  bool hasKernelHeaderMap() const
649  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
650 };
651 
653 
657 {
658 private:
659  AmdInnerX86Binary32 innerBinary;
660 
661  void initKernelInfos(Flags creationFlags);
662 public:
668  AmdMainX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
669  Flags creationFlags = AMDBIN_CREATE_ALL);
670  ~AmdMainX86Binary32() = default;
671 
673  bool hasKernelInfo() const
674  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
675 
677  bool hasKernelInfoMap() const
678  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
679 
681  bool hasInfoStrings() const
682  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
683 
685  bool hasInnerBinary() const
686  { return innerBinary; }
687 
690  { return innerBinary; }
691 
694  { return innerBinary; }
695 };
696 
698 
702 {
703 private:
704  AmdInnerX86Binary64 innerBinary;
705 
706  void initKernelInfos(Flags creationFlags);
707 public:
713  AmdMainX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
714  Flags creationFlags = AMDBIN_CREATE_ALL);
715  ~AmdMainX86Binary64() = default;
716 
718  bool hasKernelInfo() const
719  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
720 
722  bool hasKernelInfoMap() const
723  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
724 
726  bool hasInfoStrings() const
727  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
728 
730  bool hasInnerBinary() const
731  { return innerBinary; }
732 
735  { return innerBinary; }
738  { return innerBinary; }
739 };
740 
742 extern bool isAmdBinary(size_t binaryCodeSize, const cxbyte* binaryCode);
743 
745 
752  size_t binaryCodeSize, cxbyte* binaryCode,
753  Flags creationFlags = AMDBIN_CREATE_ALL);
754 
755 };
756 
757 #endif
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:689
ATI CAL Note header. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:195
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:726
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:432
uint32_t descSize
description size
Definition: AmdBinaries.h:198
pointer to local memory
uint32_t uavId
uav id
Definition: AmdBinaries.h:227
CString driverInfo
driver info string
Definition: AmdBinaries.h:423
non copyable and non movable base structure (class)
Definition: Utilities.h:43
const AmdInnerX86Binary64 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:737
Array< std::pair< CString, size_t > > KernelInfoMap
Kernel info map.
Definition: AmdBinaries.h:417
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:730
const CALEncodingEntry & getCALEncodingEntry(cxuint index) const
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:302
AMD main binary for X86-64 systems.
Definition: AmdBinaries.h:701
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
KernelPtrSpace
kernel pointer type of argument
Definition: AmdBinaries.h:103
AMD GPU header for kernel.
Definition: AmdBinaries.h:467
pointer to global memory
create map of symbols for inner binaries
Definition: AmdBinaries.h:58
const cxbyte * getGlobalData() const
get global data
Definition: AmdBinaries.h:530
none operation
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:632
binary for x86 systems
constant buffer
Definition: AmdBinaries.h:119
size_t getGlobalDataSize() const
get global data size
Definition: AmdBinaries.h:526
uint32_t sampler
sampler
Definition: AmdBinaries.h:251
uint32_t nameOffsetLo
low half of name offset
Definition: AmdBinaries.h:153
CALNote & getCALNote(cxuint encodingIndex, uint32_t index)
get CALNote
Definition: AmdBinaries.h:343
uint32_t size
size
Definition: AmdBinaries.h:237
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:681
read-write image (???)
Definition: AmdBinaries.h:117
CString kernelName
kernel name
Definition: AmdBinaries.h:260
uint32_t f1
field 1
Definition: AmdBinaries.h:228
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:483
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header entry for specified index
Definition: AmdBinaries.h:541
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:444
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:584
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:135
const CALNote & getCALNote(cxuint encodingIndex, uint32_t index) const
get CALNote
Definition: AmdBinaries.h:334
kernel argument info structure
Definition: AmdBinaries.h:125
ATI CAL note input.
Definition: AmdBinaries.h:211
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:648
OpenCL 2.0 binary type (32-bit)
an array class
Definition: Containers.h:38
AMD main binary for X86 systems.
Definition: AmdBinaries.h:656
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:148
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:402
CALEncodingEntry & getCALEncodingEntry(cxuint index)
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:306
Configuration header.
size_t size
size
Definition: AmdBinaries.h:462
OpenCL 2.0 binary type (64-bit)
const Array< CALNote > & getCALNotes(cxuint encodingIndex) const
get all CALNotes for encoding index
Definition: AmdBinaries.h:347
Array< std::pair< CString, size_t > > KernelHeaderMap
kernel header map type
Definition: AmdBinaries.h:481
bool isAmdBinary(size_t binaryCodeSize, const cxbyte *binaryCode)
check whether binary code is Amd Catalyst binary
cxbyte * data
data of CAL note
Definition: AmdBinaries.h:207
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:151
create CAL notes for AMD inner GPU binary
Definition: AmdBinaries.h:61
uint32_t address
address of value
Definition: AmdBinaries.h:220
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:718
char * data
data (unterminated string)
Definition: AmdBinaries.h:463
Array< AmdKernelArg > argInfos
array of argument informations
Definition: AmdBinaries.h:261
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:596
uint32_t index
index
Definition: AmdBinaries.h:243
const char * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdBinaries.h:518
all AMD binaries creation flags
Definition: AmdBinaries.h:63
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:248
size_t getInnerBinariesNum() const
get number of inner binaries
Definition: AmdBinaries.h:499
KernelArgType
kernel argument type
Definition: AmdBinaries.h:72
uint32_t value
value to set
Definition: AmdBinaries.h:221
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:600
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:644
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:139
AMD inner X86 binary.
Definition: AmdBinaries.h:363
CString typeName
name of type of argument
Definition: AmdBinaries.h:130
char * getMetadata(size_t index)
get metadata for specified inner binary
Definition: AmdBinaries.h:522
const KernelInfo * getKernelInfos() const
get kernel informations array
Definition: AmdBinaries.h:440
buffer is restrict specifier
Definition: AmdBinaries.h:120
volatile buffer
Definition: AmdBinaries.h:121
unsigned char cxbyte
unsigned byte
Definition: Config.h:215
create kernel headers map
Definition: AmdBinaries.h:56
create map of inner binaries
Definition: AmdBinaries.h:53
binary for x86-64 systems
uint32_t machine
machine type
Definition: AmdBinaries.h:187
size_t size
size
Definition: AmdBinaries.h:470
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:298
read only image
Definition: AmdBinaries.h:115
main namespace
Definition: AsmDefs.h:38
Array< CALNote > & getCALNotes(cxuint encodingIndex)
get all CALNotes for encoding index
Definition: AmdBinaries.h:351
create kernel informations
Definition: AmdBinaries.h:51
uint32_t flags
flags
Definition: AmdBinaries.h:191
size_t globalDataSize
global data size
Definition: AmdBinaries.h:488
const AmdInnerX86Binary32 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:693
create map of sections for inner binaries
Definition: AmdBinaries.h:57
shift for convert inner binary flags into elf binary flags
Definition: AmdBinaries.h:64
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:612
size_t getNameOffset() const
get name offset
Definition: AmdBinaries.h:143
uint32_t nameOffset
name offset
Definition: AmdBinaries.h:140
create compile options and driver info
Definition: AmdBinaries.h:54
AMD inner binary for GPU binaries that represent a single kernel.
Definition: AmdBinaries.h:268
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdBinaries.h:514
uint32_t type
type of entry
Definition: AmdBinaries.h:188
uint32_t getCALNotesNum(cxuint encodingIndex) const
get CAL Notes number
Definition: AmdBinaries.h:310
CAL program info entry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:218
unsigned int cxuint
unsigned int
Definition: Config.h:223
const cxbyte * data
data of CAL note
Definition: AmdBinaries.h:214
CString kernelName
kernel name
Definition: AmdBinaries.h:469
CString compileOptions
compiler options string
Definition: AmdBinaries.h:424
AmdMainBinaryBase * createAmdBinaryFromCode(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
create AMD binary object from binary code
write only image
Definition: AmdBinaries.h:116
uint32_t input
input
Definition: AmdBinaries.h:250
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:685
size_t getNameOffset() const
compute name offset
Definition: AmdBinaries.h:157
uint32_t type
type
Definition: AmdBinaries.h:199
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:234
size_t getKernelHeadersNum() const
get kernel header number
Definition: AmdBinaries.h:537
CALNoteHeader * header
header of CAL note
Definition: AmdBinaries.h:206
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:152
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:533
bool hasCALNotes() const
return true if binary has CAL notes infos
Definition: AmdBinaries.h:290
main AMD binary base class
Definition: AmdBinaries.h:413
inlines for accessing memory words in LittleEndian and unaligned
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:588
uint32_t nameOffsetHi
high half of name offset
Definition: AmdBinaries.h:154
KernelHeaderMap kernelHeaderMap
kernel header map
Definition: AmdBinaries.h:487
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:225
Array< std::pair< CString, size_t > > InnerBinaryMap
inner binary map type
Definition: AmdBinaries.h:479
AmdMainType type
type of binaries
Definition: AmdBinaries.h:419
cxbyte ptrAccess
pointer access flags
Definition: AmdBinaries.h:129
uint32_t offset
offset in ELF
Definition: AmdBinaries.h:189
const cxbyte * getKernelHeader(size_t index) const
get kernel header for specified index
Definition: AmdBinaries.h:556
const CString & getDriverInfo() const
get driver info string
Definition: AmdBinaries.h:451
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:673
const AmdInnerGPUBinary32 & getInnerBinary(size_t index) const
get inner binary with specified index
Definition: AmdBinaries.h:507
const CString & getKernelName() const
get kernel name
Definition: AmdBinaries.h:294
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:138
utilities for other libraries and programs
Definition: AmdBinaries.h:60
uint32_t size
size
Definition: AmdBinaries.h:190
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:628
KernelPtrSpace ptrSpace
pointer space for argument if argument is pointer or image
Definition: AmdBinaries.h:128
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:568
const CString & getCompileOptions() const
get compile options string
Definition: AmdBinaries.h:455
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:592
CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index)
get CAL Note header
Definition: AmdBinaries.h:318
Array< AmdGPUKernelHeader > kernelHeaders
kernel headers
Definition: AmdBinaries.h:486
AmdInnerX86Binary64 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:734
no special flags
Definition: AmdBinaries.h:114
CALNoteHeader header
header of CAL note
Definition: AmdBinaries.h:213
const cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index) const
get CAL Note data
Definition: AmdBinaries.h:322
uint32_t argType
arg type
Definition: AmdBinaries.h:150
binary for GPU with 64-bit memory model
KernelArgType argType
argument type
Definition: AmdBinaries.h:127
GPU identification utilities.
KernelInfoMap kernelInfosMap
kernel informations map
Definition: AmdBinaries.h:421
AmdGPUKernelHeader & getKernelHeaderEntry(size_t index)
get kernel header entry for specified index
Definition: AmdBinaries.h:548
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:604
ATI CAL note. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:204
size_t size() const
returns number of elements
Definition: Containers.h:169
const T * data() const
get data
Definition: Containers.h:243
creation flags for ELF binaries
Definition: ElfBinaries.h:73
CALEncodingEntry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:185
AMD inner binary for X86-64 binaries.
Definition: AmdBinaries.h:384
size_t getKernelHeaderSize(size_t index) const
get kernel header size for specified index
Definition: AmdBinaries.h:552
cxbyte * data
data
Definition: AmdBinaries.h:471
main AMD GPU binary base class
Definition: AmdBinaries.h:475
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:481
uint32_t argType
arg type
Definition: AmdBinaries.h:137
kernel informations
Definition: AmdBinaries.h:258
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:314
bool isKernelArgImage(KernelArgType argType)
return true if argType is image
Definition: AmdBinaries.h:97
uint32_t f2
field 2
Definition: AmdBinaries.h:229
size_t getKernelInfosNum() const
get kernel informations number
Definition: AmdBinaries.h:436
uint32_t offset
offset
Definition: AmdBinaries.h:236
Array< AmdInnerGPUBinary32 > innerBinaries
inner binaries
Definition: AmdBinaries.h:483
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:636
uint32_t size
size
Definition: AmdBinaries.h:244
uint32_t nameSize
name size (must be 8)
Definition: AmdBinaries.h:197
uint32_t type
type
Definition: AmdBinaries.h:230
create kernel headers
Definition: AmdBinaries.h:55
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:484
AMD GPU metadata for kernel.
Definition: AmdBinaries.h:460
create map of kernel informations
Definition: AmdBinaries.h:52
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:640
Elf binaries handling.
uint8_t ULEV(const uint8_t &t)
convert from/to little endian value from unaligned memory
only for internal usage
Definition: AmdBinaries.h:49
simple C-string container
Definition: CString.h:38
Elf.h definitions.
containers and other utils for other libraries and programs
Array< KernelInfo > kernelInfos
kernel informations
Definition: AmdBinaries.h:420
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:677
cxbyte * getKernelHeader(size_t index)
get kernel header for specified index
Definition: AmdBinaries.h:560
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:241
cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index)
get CAL Note data
Definition: AmdBinaries.h:325
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:722
std::unique_ptr< AmdGPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdBinaries.h:485
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:503
pointer to constant memory
CString argName
argument name
Definition: AmdBinaries.h:131
cxbyte * globalData
global data content
Definition: AmdBinaries.h:489