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-2017 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 { /* this cal note types comes from MultiSim-4.2 sources */
163  CALNOTE_ATI_PROGINFO = 1,
164  CALNOTE_ATI_INPUTS = 2,
165  CALNOTE_ATI_OUTPUTS = 3,
166  CALNOTE_ATI_CONDOUT = 4,
167  CALNOTE_ATI_FLOAT32CONSTS = 5,
168  CALNOTE_ATI_INT32CONSTS = 6,
169  CALNOTE_ATI_BOOL32CONSTS = 7,
170  CALNOTE_ATI_EARLYEXIT = 8,
171  CALNOTE_ATI_GLOBAL_BUFFERS = 9,
172  CALNOTE_ATI_CONSTANT_BUFFERS = 10,
173  CALNOTE_ATI_INPUT_SAMPLERS = 11,
174  CALNOTE_ATI_PERSISTENT_BUFFERS = 12,
175  CALNOTE_ATI_SCRATCH_BUFFERS = 13,
176  CALNOTE_ATI_SUB_CONSTANT_BUFFERS = 14,
177  CALNOTE_ATI_UAV_MAILBOX_SIZE = 15,
178  CALNOTE_ATI_UAV = 16,
179  CALNOTE_ATI_UAV_OP_MASK = 17,
180  CALNOTE_ATI_MAXTYPE = CALNOTE_ATI_UAV_OP_MASK
181 };
182 
185 {
186  uint32_t machine;
187  uint32_t type;
188  uint32_t offset;
189  uint32_t size;
190  uint32_t flags;
191 };
192 
195 {
196  uint32_t nameSize;
197  uint32_t descSize;
198  uint32_t type;
199  char name[8];
200 };
201 
203 struct CALNote
204 {
207 };
208 
211 {
213  const cxbyte* data;
214 };
215 
218 {
219  uint32_t address;
220  uint32_t value;
221 };
222 
225 {
226  uint32_t uavId;
227  uint32_t f1;
228  uint32_t f2;
229  uint32_t type;
230 };
231 
234 {
235  uint32_t offset;
236  uint32_t size;
237 };
238 
241 {
242  uint32_t index;
243  uint32_t size;
244 };
245 
248 {
249  uint32_t input;
250  uint32_t sampler;
251 };
252 
254 
258 {
261 };
262 
264 
268 {
269 private:
272  CString kernelName;
273  uint32_t encodingEntriesNum;
274  CALEncodingEntry* encodingEntries;
275  Array<Array<CALNote> > calNotesTable;
276 public:
277  AmdInnerGPUBinary32() = default;
284  AmdInnerGPUBinary32(const CString& kernelName, size_t binaryCodeSize,
285  cxbyte* binaryCode, Flags creationFlags = ELF_CREATE_ALL);
286  ~AmdInnerGPUBinary32() = default;
287 
289  bool hasCALNotes() const
290  { return (creationFlags & AMDBIN_CREATE_CALNOTES) != 0; }
291 
293  const CString& getKernelName() const
294  { return kernelName; }
295 
297  uint32_t getCALEncodingEntriesNum() const
298  { return encodingEntriesNum; }
299 
302  { return encodingEntries[index]; }
303 
306  { return encodingEntries[index]; }
307 
309  uint32_t getCALNotesNum(cxuint encodingIndex) const
310  { return calNotesTable[encodingIndex].size(); }
311 
313  const CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
314  { return *(calNotesTable[encodingIndex][index]).header; }
315 
317  CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index)
318  { return *(calNotesTable[encodingIndex][index]).header; }
319 
321  const cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index) const
322  { return calNotesTable[encodingIndex][index].data; }
324  cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index)
325  { return calNotesTable[encodingIndex][index].data; }
326 
328 
333  const CALNote& getCALNote(cxuint encodingIndex, uint32_t index) const
334  { return calNotesTable[encodingIndex][index]; }
335 
337 
342  CALNote& getCALNote(cxuint encodingIndex, uint32_t index)
343  { return calNotesTable[encodingIndex][index]; }
344 
346  const Array<CALNote>& getCALNotes(cxuint encodingIndex) const
347  { return calNotesTable[encodingIndex]; }
348 
351  { return calNotesTable[encodingIndex]; }
352 
354 
358  cxuint findCALEncodingEntryIndex(GPUDeviceType deviceType) const;
359 };
360 
363 {
364 public:
365  AmdInnerX86Binary32() = default;
371  AmdInnerX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
372  Flags creationFlags = ELF_CREATE_ALL);
373  ~AmdInnerX86Binary32() = default;
374 
376  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
377 };
378 
380 
384 {
385 public:
386  AmdInnerX86Binary64() = default;
392  AmdInnerX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
393  Flags creationFlags = ELF_CREATE_ALL);
394  ~AmdInnerX86Binary64() = default;
395 
397  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
398 };
399 
401 enum class AmdMainType
402 {
403  GPU_BINARY,
404  GPU_64_BINARY,
405  X86_BINARY,
406  X86_64_BINARY,
409 };
410 
413 {
414 public:
417 protected:
420  KernelInfoMap kernelInfosMap;
421 
424 
426  explicit AmdMainBinaryBase(AmdMainType type);
427 public:
428  virtual ~AmdMainBinaryBase();
429 
432  { return type; }
433 
435  size_t getKernelInfosNum() const
436  { return kernelInfos.size(); }
437 
439  const KernelInfo* getKernelInfos() const
440  { return kernelInfos.data(); }
441 
443  const KernelInfo& getKernelInfo(size_t index) const
444  { return kernelInfos[index]; }
445 
447  const KernelInfo& getKernelInfo(const char* name) const;
448 
450  const CString& getDriverInfo() const
451  { return driverInfo; }
452 
454  const CString& getCompileOptions() const
455  { return compileOptions; }
456 };
457 
460 {
461  size_t size;
462  char* data;
463 };
464 
467 {
469  size_t size;
471 };
472 
475 {
476 public:
481 protected:
483  InnerBinaryMap innerBinaryMap;
484  std::unique_ptr<AmdGPUKernelMetadata[]> metadatas;
486  KernelHeaderMap kernelHeaderMap;
487  size_t globalDataSize;
489 
491  explicit AmdMainGPUBinaryBase(AmdMainType type);
492 
494  template<typename Types>
495  void initMainGPUBinary(typename Types::ElfBinary& binary);
496 public:
498  size_t getInnerBinariesNum() const
499  { return innerBinaries.size(); }
500 
503  { return innerBinaries[index]; }
504 
506  const AmdInnerGPUBinary32& getInnerBinary(size_t index) const
507  { return innerBinaries[index]; }
508 
510  const AmdInnerGPUBinary32& getInnerBinary(const char* name) const;
511 
513  size_t getMetadataSize(size_t index) const
514  { return metadatas[index].size; }
515 
517  const char* getMetadata(size_t index) const
518  { return metadatas[index].data; }
519 
521  char* getMetadata(size_t index)
522  { return metadatas[index].data; }
523 
525  size_t getGlobalDataSize() const
526  { return globalDataSize; }
527 
529  const cxbyte* getGlobalData() const
530  { return globalData; }
533  { return globalData; }
534 
536  size_t getKernelHeadersNum() const
537  { return kernelHeaders.size(); }
538 
540  const AmdGPUKernelHeader& getKernelHeaderEntry(size_t index) const
541  { return kernelHeaders[index]; }
542 
544  const AmdGPUKernelHeader& getKernelHeaderEntry(const char* name) const;
545 
548  { return kernelHeaders[index]; }
549 
551  size_t getKernelHeaderSize(size_t index) const
552  { return kernelHeaders[index].size; }
553 
555  const cxbyte* getKernelHeader(size_t index) const
556  { return kernelHeaders[index].data; }
557 
559  cxbyte* getKernelHeader(size_t index)
560  { return kernelHeaders[index].data; }
561 };
562 
564 
568 {
569 public:
575  AmdMainGPUBinary32(size_t binaryCodeSize, cxbyte* binaryCode,
576  Flags creationFlags = AMDBIN_CREATE_ALL);
577  ~AmdMainGPUBinary32() = default;
578 
579  // determine GPU device type from this binary
580  GPUDeviceType determineGPUDeviceType() const;
581 
583  bool hasKernelInfo() const
584  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
585 
587  bool hasKernelInfoMap() const
588  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
589 
591  bool hasInnerBinaryMap() const
592  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
593 
595  bool hasInfoStrings() const
596  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
597 
599  bool hasKernelHeaders() const
600  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
601 
603  bool hasKernelHeaderMap() const
604  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
605 };
606 
608 
612 {
613 public:
619  AmdMainGPUBinary64(size_t binaryCodeSize, cxbyte* binaryCode,
620  Flags creationFlags = AMDBIN_CREATE_ALL);
621  ~AmdMainGPUBinary64() = default;
622 
623  // determine GPU device type from this binary
624  GPUDeviceType determineGPUDeviceType() const;
625 
627  bool hasKernelInfo() const
628  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
629 
631  bool hasKernelInfoMap() const
632  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
633 
635  bool hasInnerBinaryMap() const
636  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
637 
639  bool hasInfoStrings() const
640  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
641 
643  bool hasKernelHeaders() const
644  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
645 
647  bool hasKernelHeaderMap() const
648  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
649 };
650 
652 
656 {
657 private:
658  AmdInnerX86Binary32 innerBinary;
659 
660  void initKernelInfos(Flags creationFlags);
661 public:
667  AmdMainX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
668  Flags creationFlags = AMDBIN_CREATE_ALL);
669  ~AmdMainX86Binary32() = default;
670 
672  bool hasKernelInfo() const
673  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
674 
676  bool hasKernelInfoMap() const
677  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
678 
680  bool hasInfoStrings() const
681  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
682 
684  bool hasInnerBinary() const
685  { return innerBinary; }
686 
689  { return innerBinary; }
690 
693  { return innerBinary; }
694 };
695 
697 
701 {
702 private:
703  AmdInnerX86Binary64 innerBinary;
704 
705  void initKernelInfos(Flags creationFlags);
706 public:
712  AmdMainX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
713  Flags creationFlags = AMDBIN_CREATE_ALL);
714  ~AmdMainX86Binary64() = default;
715 
717  bool hasKernelInfo() const
718  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
719 
721  bool hasKernelInfoMap() const
722  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
723 
725  bool hasInfoStrings() const
726  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
727 
729  bool hasInnerBinary() const
730  { return innerBinary; }
731 
734  { return innerBinary; }
737  { return innerBinary; }
738 };
739 
741 extern bool isAmdBinary(size_t binaryCodeSize, const cxbyte* binaryCode);
742 
744 
751  size_t binaryCodeSize, cxbyte* binaryCode,
752  Flags creationFlags = AMDBIN_CREATE_ALL);
753 
754 };
755 
756 #endif
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:688
ATI CAL Note header. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:194
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:725
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:431
uint32_t descSize
description size
Definition: AmdBinaries.h:197
pointer to local memory
uint32_t uavId
uav id
Definition: AmdBinaries.h:226
CString driverInfo
driver info string
Definition: AmdBinaries.h:422
non copyable and non movable base structure (class)
Definition: Utilities.h:43
const AmdInnerX86Binary64 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:736
Array< std::pair< CString, size_t > > KernelInfoMap
Kernel info map.
Definition: AmdBinaries.h:416
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:729
const CALEncodingEntry & getCALEncodingEntry(cxuint index) const
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:301
AMD main binary for X86-64 systems.
Definition: AmdBinaries.h:700
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:466
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:529
none operation
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:631
binary for x86 systems
constant buffer
Definition: AmdBinaries.h:119
size_t getGlobalDataSize() const
get global data size
Definition: AmdBinaries.h:525
uint32_t sampler
sampler
Definition: AmdBinaries.h:250
uint32_t nameOffsetLo
low half of name offset
Definition: AmdBinaries.h:153
CALNote & getCALNote(cxuint encodingIndex, uint32_t index)
get CALNote
Definition: AmdBinaries.h:342
uint32_t size
size
Definition: AmdBinaries.h:236
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:680
read-write image (???)
Definition: AmdBinaries.h:117
CString kernelName
kernel name
Definition: AmdBinaries.h:259
uint32_t f1
field 1
Definition: AmdBinaries.h:227
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:437
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header entry for specified index
Definition: AmdBinaries.h:540
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:443
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:583
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:135
const CALNote & getCALNote(cxuint encodingIndex, uint32_t index) const
get CALNote
Definition: AmdBinaries.h:333
kernel argument info structure
Definition: AmdBinaries.h:125
ATI CAL note input.
Definition: AmdBinaries.h:210
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:647
OpenCL 2.0 binary type (32-bit)
an array class
Definition: Containers.h:38
AMD main binary for X86 systems.
Definition: AmdBinaries.h:655
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:148
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:401
CALEncodingEntry & getCALEncodingEntry(cxuint index)
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:305
Configuration header.
size_t size
size
Definition: AmdBinaries.h:461
OpenCL 2.0 binary type (64-bit)
const Array< CALNote > & getCALNotes(cxuint encodingIndex) const
get all CALNotes for encoding index
Definition: AmdBinaries.h:346
Array< std::pair< CString, size_t > > KernelHeaderMap
kernel header map type
Definition: AmdBinaries.h:480
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:206
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:219
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:717
char * data
data (unterminated string)
Definition: AmdBinaries.h:462
Array< AmdKernelArg > argInfos
array of argument informations
Definition: AmdBinaries.h:260
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:595
uint32_t index
index
Definition: AmdBinaries.h:242
const char * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdBinaries.h:517
all AMD binaries creation flags
Definition: AmdBinaries.h:63
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:247
size_t getInnerBinariesNum() const
get number of inner binaries
Definition: AmdBinaries.h:498
KernelArgType
kernel argument type
Definition: AmdBinaries.h:72
uint32_t value
value to set
Definition: AmdBinaries.h:220
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:599
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:643
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:139
AMD inner X86 binary.
Definition: AmdBinaries.h:362
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:521
const KernelInfo * getKernelInfos() const
get kernel informations array
Definition: AmdBinaries.h:439
buffer is restrict specifier
Definition: AmdBinaries.h:120
volatile buffer
Definition: AmdBinaries.h:121
unsigned char cxbyte
unsigned byte
Definition: Config.h:213
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:186
size_t size
size
Definition: AmdBinaries.h:469
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:297
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:350
create kernel informations
Definition: AmdBinaries.h:51
uint32_t flags
flags
Definition: AmdBinaries.h:190
size_t globalDataSize
global data size
Definition: AmdBinaries.h:487
const AmdInnerX86Binary32 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:692
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:611
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:267
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdBinaries.h:513
uint32_t type
type of entry
Definition: AmdBinaries.h:187
uint32_t getCALNotesNum(cxuint encodingIndex) const
get CAL Notes number
Definition: AmdBinaries.h:309
CAL program info entry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:217
unsigned int cxuint
unsigned int
Definition: Config.h:221
const cxbyte * data
data of CAL note
Definition: AmdBinaries.h:213
CString kernelName
kernel name
Definition: AmdBinaries.h:468
CString compileOptions
compiler options string
Definition: AmdBinaries.h:423
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:249
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:684
size_t getNameOffset() const
compute name offset
Definition: AmdBinaries.h:157
uint32_t type
type
Definition: AmdBinaries.h:198
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:233
size_t getKernelHeadersNum() const
get kernel header number
Definition: AmdBinaries.h:536
CALNoteHeader * header
header of CAL note
Definition: AmdBinaries.h:205
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:152
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:532
bool hasCALNotes() const
return true if binary has CAL notes infos
Definition: AmdBinaries.h:289
main AMD binary base class
Definition: AmdBinaries.h:412
inlines for accessing memory words in LittleEndian and unaligned
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:587
uint32_t nameOffsetHi
high half of name offset
Definition: AmdBinaries.h:154
KernelHeaderMap kernelHeaderMap
kernel header map
Definition: AmdBinaries.h:486
GPUDeviceType
type of GPU device
Definition: GPUId.h:38
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:224
Array< std::pair< CString, size_t > > InnerBinaryMap
inner binary map type
Definition: AmdBinaries.h:478
AmdMainType type
type of binaries
Definition: AmdBinaries.h:418
cxbyte ptrAccess
pointer access flags
Definition: AmdBinaries.h:129
uint32_t offset
offset in ELF
Definition: AmdBinaries.h:188
const cxbyte * getKernelHeader(size_t index) const
get kernel header for specified index
Definition: AmdBinaries.h:555
const CString & getDriverInfo() const
get driver info string
Definition: AmdBinaries.h:450
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:672
const AmdInnerGPUBinary32 & getInnerBinary(size_t index) const
get inner binary with specified index
Definition: AmdBinaries.h:506
const CString & getKernelName() const
get kernel name
Definition: AmdBinaries.h:293
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:189
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:627
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:567
const CString & getCompileOptions() const
get compile options string
Definition: AmdBinaries.h:454
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:591
CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index)
get CAL Note header
Definition: AmdBinaries.h:317
Array< AmdGPUKernelHeader > kernelHeaders
kernel headers
Definition: AmdBinaries.h:485
AmdInnerX86Binary64 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:733
no special flags
Definition: AmdBinaries.h:114
CALNoteHeader header
header of CAL note
Definition: AmdBinaries.h:212
const cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index) const
get CAL Note data
Definition: AmdBinaries.h:321
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:420
AmdGPUKernelHeader & getKernelHeaderEntry(size_t index)
get kernel header entry for specified index
Definition: AmdBinaries.h:547
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:603
ATI CAL note. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:203
size_t size() const
returns number of elements
Definition: Containers.h:169
const T * data() const
get data
Definition: Containers.h:242
creation flags for ELF binaries
Definition: ElfBinaries.h:73
CALEncodingEntry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:184
AMD inner binary for X86-64 binaries.
Definition: AmdBinaries.h:383
size_t getKernelHeaderSize(size_t index) const
get kernel header size for specified index
Definition: AmdBinaries.h:551
cxbyte * data
data
Definition: AmdBinaries.h:470
main AMD GPU binary base class
Definition: AmdBinaries.h:474
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:435
uint32_t argType
arg type
Definition: AmdBinaries.h:137
kernel informations
Definition: AmdBinaries.h:257
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:313
bool isKernelArgImage(KernelArgType argType)
return true if argType is image
Definition: AmdBinaries.h:97
uint32_t f2
field 2
Definition: AmdBinaries.h:228
size_t getKernelInfosNum() const
get kernel informations number
Definition: AmdBinaries.h:435
uint32_t offset
offset
Definition: AmdBinaries.h:235
Array< AmdInnerGPUBinary32 > innerBinaries
inner binaries
Definition: AmdBinaries.h:482
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:635
uint32_t size
size
Definition: AmdBinaries.h:243
uint32_t nameSize
name size (must be 8)
Definition: AmdBinaries.h:196
uint32_t type
type
Definition: AmdBinaries.h:229
create kernel headers
Definition: AmdBinaries.h:55
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:483
AMD GPU metadata for kernel.
Definition: AmdBinaries.h:459
create map of kernel informations
Definition: AmdBinaries.h:52
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:639
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:419
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:676
cxbyte * getKernelHeader(size_t index)
get kernel header for specified index
Definition: AmdBinaries.h:559
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:240
cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index)
get CAL Note data
Definition: AmdBinaries.h:324
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:721
std::unique_ptr< AmdGPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdBinaries.h:484
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:502
pointer to constant memory
CString argName
argument name
Definition: AmdBinaries.h:131
cxbyte * globalData
global data content
Definition: AmdBinaries.h:488