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 
40 namespace CLRX
41 {
42 
43 enum : Flags {
44  AMDBIN_INNER_INT_CREATE_ALL = 0xff,
46 
55 
58 
61 };
62 
63 enum : cxuint {
64  ELF_M_X86 = 0x7d4
65 };
66 
68 enum class KernelArgType : cxbyte
69 {
70  VOID = 0,
71  UCHAR, CHAR, USHORT, SHORT, UINT, INT, ULONG, LONG, FLOAT, DOUBLE, POINTER, IMAGE,
72  IMAGE1D, IMAGE1D_ARRAY, IMAGE1D_BUFFER, IMAGE2D, IMAGE2D_ARRAY, IMAGE3D,
73  UCHAR2, UCHAR3, UCHAR4, UCHAR8, UCHAR16,
74  CHAR2, CHAR3, CHAR4, CHAR8, CHAR16,
75  USHORT2, USHORT3, USHORT4, USHORT8, USHORT16,
76  SHORT2, SHORT3, SHORT4, SHORT8, SHORT16,
77  UINT2, UINT3, UINT4, UINT8, UINT16,
78  INT2, INT3, INT4, INT8, INT16,
79  ULONG2, ULONG3, ULONG4, ULONG8, ULONG16,
80  LONG2, LONG3, LONG4, LONG8, LONG16,
81  FLOAT2, FLOAT3, FLOAT4, FLOAT8, FLOAT16,
82  DOUBLE2, DOUBLE3, DOUBLE4, DOUBLE8, DOUBLE16,
83  SAMPLER, STRUCTURE, COUNTER32, COUNTER64, PIPE, CMDQUEUE, CLKEVENT,
84  MAX_VALUE = COUNTER64,
85  MAX_VALUE_CL2 = CLKEVENT,
86  MIN_IMAGE = IMAGE,
87  MAX_IMAGE = IMAGE3D
88 };
89 
91 inline bool isKernelArgImage(KernelArgType argType);
92 
93 inline bool isKernelArgImage(KernelArgType argType)
94 {
95  return argType>=KernelArgType::MIN_IMAGE && argType<=KernelArgType::MAX_IMAGE;
96 }
97 
99 enum class KernelPtrSpace : cxbyte
100 {
101  NONE = 0,
102  LOCAL,
103  CONSTANT,
104  GLOBAL,
105  MAX_VALUE = GLOBAL
106 };
107 
108 enum : cxbyte
109 {
114  KARG_PTR_ACCESS_MASK = 3,
118 };
119 
122 {
125  cxbyte ptrAccess;
128 };
129 
132 {
133  uint32_t argType;
134  uint32_t ptrType;
135  uint32_t ptrAccess;
136  uint32_t nameOffset;
137 
139  size_t getNameOffset() const
140  { return ULEV(nameOffset); }
141 };
142 
145 {
146  uint32_t argType;
147  uint32_t ptrType;
148  uint32_t ptrAccess;
149  uint32_t nameOffsetLo;
150  uint32_t nameOffsetHi;
151 
153  size_t getNameOffset() const
154  { return (uint64_t(ULEV(nameOffsetHi))<<32)+uint64_t(ULEV(nameOffsetLo)); }
155 };
156 
157 enum : uint32_t
158 { /* this cal note types comes from MultiSim-4.2 sources */
159  CALNOTE_ATI_PROGINFO = 1,
160  CALNOTE_ATI_INPUTS = 2,
161  CALNOTE_ATI_OUTPUTS = 3,
162  CALNOTE_ATI_CONDOUT = 4,
163  CALNOTE_ATI_FLOAT32CONSTS = 5,
164  CALNOTE_ATI_INT32CONSTS = 6,
165  CALNOTE_ATI_BOOL32CONSTS = 7,
166  CALNOTE_ATI_EARLYEXIT = 8,
167  CALNOTE_ATI_GLOBAL_BUFFERS = 9,
168  CALNOTE_ATI_CONSTANT_BUFFERS = 10,
169  CALNOTE_ATI_INPUT_SAMPLERS = 11,
170  CALNOTE_ATI_PERSISTENT_BUFFERS = 12,
171  CALNOTE_ATI_SCRATCH_BUFFERS = 13,
172  CALNOTE_ATI_SUB_CONSTANT_BUFFERS = 14,
173  CALNOTE_ATI_UAV_MAILBOX_SIZE = 15,
174  CALNOTE_ATI_UAV = 16,
175  CALNOTE_ATI_UAV_OP_MASK = 17,
176  CALNOTE_ATI_MAXTYPE = CALNOTE_ATI_UAV_OP_MASK
177 };
178 
181 {
182  uint32_t machine;
183  uint32_t type;
184  uint32_t offset;
185  uint32_t size;
186  uint32_t flags;
187 };
188 
191 {
192  uint32_t nameSize;
193  uint32_t descSize;
194  uint32_t type;
195  char name[8];
196 };
197 
199 struct CALNote
200 {
202  cxbyte* data;
203 };
204 
207 {
209  const cxbyte* data;
210 };
211 
214 {
215  uint32_t address;
216  uint32_t value;
217 };
218 
221 {
222  uint32_t uavId;
223  uint32_t f1;
224  uint32_t f2;
225  uint32_t type;
226 };
227 
230 {
231  uint32_t offset;
232  uint32_t size;
233 };
234 
237 {
238  uint32_t index;
239  uint32_t size;
240 };
241 
244 {
245  uint32_t input;
246  uint32_t sampler;
247 };
248 
250 
254 {
257 };
258 
260 
264 {
265 private:
268  CString kernelName;
269  uint32_t encodingEntriesNum;
270  CALEncodingEntry* encodingEntries;
271  Array<Array<CALNote> > calNotesTable;
272 public:
273  AmdInnerGPUBinary32() = default;
280  AmdInnerGPUBinary32(const CString& kernelName, size_t binaryCodeSize,
281  cxbyte* binaryCode, Flags creationFlags = ELF_CREATE_ALL);
282  ~AmdInnerGPUBinary32() = default;
283 
285  bool hasCALNotes() const
286  { return (creationFlags & AMDBIN_CREATE_CALNOTES) != 0; }
287 
289  const CString& getKernelName() const
290  { return kernelName; }
291 
293  uint32_t getCALEncodingEntriesNum() const
294  { return encodingEntriesNum; }
295 
297  const CALEncodingEntry& getCALEncodingEntry(cxuint index) const
298  { return encodingEntries[index]; }
299 
302  { return encodingEntries[index]; }
303 
305  uint32_t getCALNotesNum(cxuint encodingIndex) const
306  { return calNotesTable[encodingIndex].size(); }
307 
309  const CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
310  { return *(calNotesTable[encodingIndex][index]).header; }
311 
313  CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index)
314  { return *(calNotesTable[encodingIndex][index]).header; }
315 
317  const cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index) const
318  { return calNotesTable[encodingIndex][index].data; }
320  cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index)
321  { return calNotesTable[encodingIndex][index].data; }
322 
324 
329  const CALNote& getCALNote(cxuint encodingIndex, uint32_t index) const
330  { return calNotesTable[encodingIndex][index]; }
331 
333 
338  CALNote& getCALNote(cxuint encodingIndex, uint32_t index)
339  { return calNotesTable[encodingIndex][index]; }
340 
342  const Array<CALNote>& getCALNotes(cxuint encodingIndex) const
343  { return calNotesTable[encodingIndex]; }
344 
346  Array<CALNote>& getCALNotes(cxuint encodingIndex)
347  { return calNotesTable[encodingIndex]; }
348 
350 
354  cxuint findCALEncodingEntryIndex(GPUDeviceType deviceType) const;
355 };
356 
359 {
360 public:
361  AmdInnerX86Binary32() = default;
367  AmdInnerX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
368  Flags creationFlags = ELF_CREATE_ALL);
369  ~AmdInnerX86Binary32() = default;
370 
372  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
373 };
374 
376 
380 {
381 public:
382  AmdInnerX86Binary64() = default;
388  AmdInnerX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
389  Flags creationFlags = ELF_CREATE_ALL);
390  ~AmdInnerX86Binary64() = default;
391 
393  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
394 };
395 
397 enum class AmdMainType
398 {
399  GPU_BINARY,
400  GPU_64_BINARY,
401  X86_BINARY,
402  X86_64_BINARY,
405 };
406 
409 {
410 public:
413 protected:
416  KernelInfoMap kernelInfosMap;
417 
420 
422  explicit AmdMainBinaryBase(AmdMainType type);
423 public:
424  virtual ~AmdMainBinaryBase();
425 
428  { return type; }
429 
431  size_t getKernelInfosNum() const
432  { return kernelInfos.size(); }
433 
435  const KernelInfo* getKernelInfos() const
436  { return kernelInfos.data(); }
437 
439  const KernelInfo& getKernelInfo(size_t index) const
440  { return kernelInfos[index]; }
441 
443  const KernelInfo& getKernelInfo(const char* name) const;
444 
446  const CString& getDriverInfo() const
447  { return driverInfo; }
448 
450  const CString& getCompileOptions() const
451  { return compileOptions; }
452 };
453 
456 {
457  size_t size;
458  char* data;
459 };
460 
463 {
465  size_t size;
466  cxbyte* data;
467 };
468 
471 {
472 public:
477 protected:
479  InnerBinaryMap innerBinaryMap;
480  std::unique_ptr<AmdGPUKernelMetadata[]> metadatas;
482  KernelHeaderMap kernelHeaderMap;
483  size_t globalDataSize;
484  cxbyte* globalData;
485 
487  explicit AmdMainGPUBinaryBase(AmdMainType type);
488 
490  template<typename Types>
491  void initMainGPUBinary(typename Types::ElfBinary& binary);
492 public:
494  size_t getInnerBinariesNum() const
495  { return innerBinaries.size(); }
496 
499  { return innerBinaries[index]; }
500 
502  const AmdInnerGPUBinary32& getInnerBinary(size_t index) const
503  { return innerBinaries[index]; }
504 
506  const AmdInnerGPUBinary32& getInnerBinary(const char* name) const;
507 
509  size_t getMetadataSize(size_t index) const
510  { return metadatas[index].size; }
511 
513  const char* getMetadata(size_t index) const
514  { return metadatas[index].data; }
515 
517  char* getMetadata(size_t index)
518  { return metadatas[index].data; }
519 
521  size_t getGlobalDataSize() const
522  { return globalDataSize; }
523 
525  const cxbyte* getGlobalData() const
526  { return globalData; }
528  cxbyte* getGlobalData()
529  { return globalData; }
530 
532  size_t getKernelHeadersNum() const
533  { return kernelHeaders.size(); }
534 
536  const AmdGPUKernelHeader& getKernelHeaderEntry(size_t index) const
537  { return kernelHeaders[index]; }
538 
540  const AmdGPUKernelHeader& getKernelHeaderEntry(const char* name) const;
541 
544  { return kernelHeaders[index]; }
545 
547  size_t getKernelHeaderSize(size_t index) const
548  { return kernelHeaders[index].size; }
549 
551  const cxbyte* getKernelHeader(size_t index) const
552  { return kernelHeaders[index].data; }
553 
555  cxbyte* getKernelHeader(size_t index)
556  { return kernelHeaders[index].data; }
557 };
558 
560 
564 {
565 public:
571  AmdMainGPUBinary32(size_t binaryCodeSize, cxbyte* binaryCode,
572  Flags creationFlags = AMDBIN_CREATE_ALL);
573  ~AmdMainGPUBinary32() = default;
574 
575  // determine GPU device type from this binary
576  GPUDeviceType determineGPUDeviceType() const;
577 
579  bool hasKernelInfo() const
580  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
581 
583  bool hasKernelInfoMap() const
584  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
585 
587  bool hasInnerBinaryMap() const
588  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
589 
591  bool hasInfoStrings() const
592  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
593 
595  bool hasKernelHeaders() const
596  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
597 
599  bool hasKernelHeaderMap() const
600  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
601 };
602 
604 
608 {
609 public:
615  AmdMainGPUBinary64(size_t binaryCodeSize, cxbyte* binaryCode,
616  Flags creationFlags = AMDBIN_CREATE_ALL);
617  ~AmdMainGPUBinary64() = default;
618 
619  // determine GPU device type from this binary
620  GPUDeviceType determineGPUDeviceType() const;
621 
623  bool hasKernelInfo() const
624  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
625 
627  bool hasKernelInfoMap() const
628  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
629 
631  bool hasInnerBinaryMap() const
632  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
633 
635  bool hasInfoStrings() const
636  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
637 
639  bool hasKernelHeaders() const
640  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
641 
643  bool hasKernelHeaderMap() const
644  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
645 };
646 
648 
652 {
653 private:
654  AmdInnerX86Binary32 innerBinary;
655 
656  void initKernelInfos(Flags creationFlags);
657 public:
663  AmdMainX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
664  Flags creationFlags = AMDBIN_CREATE_ALL);
665  ~AmdMainX86Binary32() = default;
666 
668  bool hasKernelInfo() const
669  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
670 
672  bool hasKernelInfoMap() const
673  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
674 
676  bool hasInfoStrings() const
677  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
678 
680  bool hasInnerBinary() const
681  { return innerBinary; }
682 
685  { return innerBinary; }
686 
689  { return innerBinary; }
690 };
691 
693 
697 {
698 private:
699  AmdInnerX86Binary64 innerBinary;
700 
701  void initKernelInfos(Flags creationFlags);
702 public:
708  AmdMainX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
709  Flags creationFlags = AMDBIN_CREATE_ALL);
710  ~AmdMainX86Binary64() = default;
711 
713  bool hasKernelInfo() const
714  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
715 
717  bool hasKernelInfoMap() const
718  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
719 
721  bool hasInfoStrings() const
722  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
723 
725  bool hasInnerBinary() const
726  { return innerBinary; }
727 
730  { return innerBinary; }
733  { return innerBinary; }
734 };
735 
737 extern bool isAmdBinary(size_t binaryCodeSize, const cxbyte* binaryCode);
738 
740 
747  size_t binaryCodeSize, cxbyte* binaryCode,
748  Flags creationFlags = AMDBIN_CREATE_ALL);
749 
750 };
751 
752 #endif
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:684
ATI CAL Note header. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:190
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:721
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:427
uint32_t descSize
description size
Definition: AmdBinaries.h:193
pointer to local memory
uint32_t uavId
uav id
Definition: AmdBinaries.h:222
CString driverInfo
driver info string
Definition: AmdBinaries.h:418
non copyable and non movable base structure (class)
Definition: Utilities.h:43
const AmdInnerX86Binary64 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:732
Array< std::pair< CString, size_t > > KernelInfoMap
Kernel info map.
Definition: AmdBinaries.h:412
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:725
const CALEncodingEntry & getCALEncodingEntry(cxuint index) const
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:297
AMD main binary for X86-64 systems.
Definition: AmdBinaries.h:696
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
KernelPtrSpace
kernel pointer type of argument
Definition: AmdBinaries.h:99
AMD GPU header for kernel.
Definition: AmdBinaries.h:462
pointer to global memory
create map of symbols for inner binaries
Definition: AmdBinaries.h:54
const cxbyte * getGlobalData() const
get global data
Definition: AmdBinaries.h:525
none operation
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:627
binary for x86 systems
constant buffer
Definition: AmdBinaries.h:115
size_t getGlobalDataSize() const
get global data size
Definition: AmdBinaries.h:521
uint32_t sampler
sampler
Definition: AmdBinaries.h:246
uint32_t nameOffsetLo
low half of name offset
Definition: AmdBinaries.h:149
CALNote & getCALNote(cxuint encodingIndex, uint32_t index)
get CALNote
Definition: AmdBinaries.h:338
uint32_t size
size
Definition: AmdBinaries.h:232
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:676
read-write image (???)
Definition: AmdBinaries.h:113
CString kernelName
kernel name
Definition: AmdBinaries.h:255
uint32_t f1
field 1
Definition: AmdBinaries.h:223
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:536
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:439
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:579
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:131
const CALNote & getCALNote(cxuint encodingIndex, uint32_t index) const
get CALNote
Definition: AmdBinaries.h:329
kernel argument info structure
Definition: AmdBinaries.h:121
ATI CAL note input.
Definition: AmdBinaries.h:206
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:643
OpenCL 2.0 binary type (32-bit)
an array class
Definition: Containers.h:38
AMD main binary for X86 systems.
Definition: AmdBinaries.h:651
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:144
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:397
CALEncodingEntry & getCALEncodingEntry(cxuint index)
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:301
size_t size
size
Definition: AmdBinaries.h:457
OpenCL 2.0 binary type (64-bit)
const Array< CALNote > & getCALNotes(cxuint encodingIndex) const
get all CALNotes for encoding index
Definition: AmdBinaries.h:342
Array< std::pair< CString, size_t > > KernelHeaderMap
kernel header map type
Definition: AmdBinaries.h:476
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:202
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:147
create CAL notes for AMD inner GPU binary
Definition: AmdBinaries.h:57
uint32_t address
address of value
Definition: AmdBinaries.h:215
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:713
char * data
data (unterminated string)
Definition: AmdBinaries.h:458
Array< AmdKernelArg > argInfos
array of argument informations
Definition: AmdBinaries.h:256
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:591
uint32_t index
index
Definition: AmdBinaries.h:238
const char * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdBinaries.h:513
all AMD binaries creation flags
Definition: AmdBinaries.h:59
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:243
size_t getInnerBinariesNum() const
get number of inner binaries
Definition: AmdBinaries.h:494
KernelArgType
kernel argument type
Definition: AmdBinaries.h:68
uint32_t value
value to set
Definition: AmdBinaries.h:216
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:595
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:639
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:135
AMD inner X86 binary.
Definition: AmdBinaries.h:358
CString typeName
name of type of argument
Definition: AmdBinaries.h:126
char * getMetadata(size_t index)
get metadata for specified inner binary
Definition: AmdBinaries.h:517
const KernelInfo * getKernelInfos() const
get kernel informations array
Definition: AmdBinaries.h:435
buffer is restrict specifier
Definition: AmdBinaries.h:116
volatile buffer
Definition: AmdBinaries.h:117
create kernel headers map
Definition: AmdBinaries.h:52
create map of inner binaries
Definition: AmdBinaries.h:49
binary for x86-64 systems
uint32_t machine
machine type
Definition: AmdBinaries.h:182
size_t size
size
Definition: AmdBinaries.h:465
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:293
read only image
Definition: AmdBinaries.h:111
main namespace
Definition: AsmDefs.h:38
Array< CALNote > & getCALNotes(cxuint encodingIndex)
get all CALNotes for encoding index
Definition: AmdBinaries.h:346
create kernel informations
Definition: AmdBinaries.h:47
uint32_t flags
flags
Definition: AmdBinaries.h:186
size_t globalDataSize
global data size
Definition: AmdBinaries.h:483
const AmdInnerX86Binary32 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:688
create map of sections for inner binaries
Definition: AmdBinaries.h:53
shift for convert inner binary flags into elf binary flags
Definition: AmdBinaries.h:60
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:607
size_t getNameOffset() const
get name offset
Definition: AmdBinaries.h:139
uint32_t nameOffset
name offset
Definition: AmdBinaries.h:136
create compile options and driver info
Definition: AmdBinaries.h:50
AMD inner binary for GPU binaries that represent a single kernel.
Definition: AmdBinaries.h:263
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdBinaries.h:509
uint32_t type
type of entry
Definition: AmdBinaries.h:183
uint32_t getCALNotesNum(cxuint encodingIndex) const
get CAL Notes number
Definition: AmdBinaries.h:305
CAL program info entry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:213
const cxbyte * data
data of CAL note
Definition: AmdBinaries.h:209
CString kernelName
kernel name
Definition: AmdBinaries.h:464
CString compileOptions
compiler options string
Definition: AmdBinaries.h:419
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:112
uint32_t input
input
Definition: AmdBinaries.h:245
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:680
size_t getNameOffset() const
compute name offset
Definition: AmdBinaries.h:153
uint32_t type
type
Definition: AmdBinaries.h:194
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:229
size_t getKernelHeadersNum() const
get kernel header number
Definition: AmdBinaries.h:532
CALNoteHeader * header
header of CAL note
Definition: AmdBinaries.h:201
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:148
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:528
bool hasCALNotes() const
return true if binary has CAL notes infos
Definition: AmdBinaries.h:285
main AMD binary base class
Definition: AmdBinaries.h:408
inlines for accessing memory words in LittleEndian and unaligned
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:583
uint32_t nameOffsetHi
high half of name offset
Definition: AmdBinaries.h:150
KernelHeaderMap kernelHeaderMap
kernel header map
Definition: AmdBinaries.h:482
GPUDeviceType
type of GPU device
Definition: GPUId.h:38
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:220
Array< std::pair< CString, size_t > > InnerBinaryMap
inner binary map type
Definition: AmdBinaries.h:474
AmdMainType type
type of binaries
Definition: AmdBinaries.h:414
cxbyte ptrAccess
pointer access flags
Definition: AmdBinaries.h:125
uint32_t offset
offset in ELF
Definition: AmdBinaries.h:184
const cxbyte * getKernelHeader(size_t index) const
get kernel header for specified index
Definition: AmdBinaries.h:551
const CString & getDriverInfo() const
get driver info string
Definition: AmdBinaries.h:446
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:668
const AmdInnerGPUBinary32 & getInnerBinary(size_t index) const
get inner binary with specified index
Definition: AmdBinaries.h:502
const CString & getKernelName() const
get kernel name
Definition: AmdBinaries.h:289
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:134
utilities for other libraries and programs
Definition: AmdBinaries.h:56
uint32_t size
size
Definition: AmdBinaries.h:185
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:623
KernelPtrSpace ptrSpace
pointer space for argument if argument is pointer or image
Definition: AmdBinaries.h:124
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:563
const CString & getCompileOptions() const
get compile options string
Definition: AmdBinaries.h:450
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:587
CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index)
get CAL Note header
Definition: AmdBinaries.h:313
Array< AmdGPUKernelHeader > kernelHeaders
kernel headers
Definition: AmdBinaries.h:481
AmdInnerX86Binary64 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:729
no special flags
Definition: AmdBinaries.h:110
CALNoteHeader header
header of CAL note
Definition: AmdBinaries.h:208
const cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index) const
get CAL Note data
Definition: AmdBinaries.h:317
uint32_t argType
arg type
Definition: AmdBinaries.h:146
binary for GPU with 64-bit memory model
KernelArgType argType
argument type
Definition: AmdBinaries.h:123
GPU identification utilities.
KernelInfoMap kernelInfosMap
kernel informations map
Definition: AmdBinaries.h:416
AmdGPUKernelHeader & getKernelHeaderEntry(size_t index)
get kernel header entry for specified index
Definition: AmdBinaries.h:543
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:599
ATI CAL note. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:199
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:180
AMD inner binary for X86-64 binaries.
Definition: AmdBinaries.h:379
size_t getKernelHeaderSize(size_t index) const
get kernel header size for specified index
Definition: AmdBinaries.h:547
cxbyte * data
data
Definition: AmdBinaries.h:466
main AMD GPU binary base class
Definition: AmdBinaries.h:470
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:435
uint32_t argType
arg type
Definition: AmdBinaries.h:133
kernel informations
Definition: AmdBinaries.h:253
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:309
bool isKernelArgImage(KernelArgType argType)
return true if argType is image
Definition: AmdBinaries.h:93
uint32_t f2
field 2
Definition: AmdBinaries.h:224
size_t getKernelInfosNum() const
get kernel informations number
Definition: AmdBinaries.h:431
uint32_t offset
offset
Definition: AmdBinaries.h:231
Array< AmdInnerGPUBinary32 > innerBinaries
inner binaries
Definition: AmdBinaries.h:478
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:631
uint32_t size
size
Definition: AmdBinaries.h:239
uint32_t nameSize
name size (must be 8)
Definition: AmdBinaries.h:192
uint32_t type
type
Definition: AmdBinaries.h:225
create kernel headers
Definition: AmdBinaries.h:51
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:479
AMD GPU metadata for kernel.
Definition: AmdBinaries.h:455
create map of kernel informations
Definition: AmdBinaries.h:48
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:635
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:45
simple C-string container
Definition: CString.h:38
containers and other utils for other libraries and programs
Array< KernelInfo > kernelInfos
kernel informations
Definition: AmdBinaries.h:415
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:672
cxbyte * getKernelHeader(size_t index)
get kernel header for specified index
Definition: AmdBinaries.h:555
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:236
cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index)
get CAL Note data
Definition: AmdBinaries.h:320
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:717
std::unique_ptr< AmdGPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdBinaries.h:480
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:498
pointer to constant memory
CString argName
argument name
Definition: AmdBinaries.h:127
cxbyte * globalData
global data content
Definition: AmdBinaries.h:484