CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
Classes | Namespaces | Typedefs | Enumerations | Functions
GPUId.h File Reference

GPU identification utilities. More...

#include <CLRX/Config.h>
#include <CLRX/utils/Utilities.h>
#include <string>

Go to the source code of this file.

Classes

class  CLRX::GPUIdException
 GPUId exception class. More...
 
struct  CLRX::AMDGPUArchVersion
 structure helper for AMDGPU architecture version More...
 

Namespaces

 CLRX
 main namespace
 

Typedefs

typedef uint16_t CLRX::GPUArchMask
 GPU architecture mask (one bit represents single GPU architecture)
 

Enumerations

enum  CLRX::GPUDeviceType : cxbyte {
  CLRX::GPUDeviceType::CAPE_VERDE = 0, CLRX::GPUDeviceType::PITCAIRN, CLRX::GPUDeviceType::TAHITI, CLRX::GPUDeviceType::OLAND,
  CLRX::GPUDeviceType::BONAIRE, CLRX::GPUDeviceType::SPECTRE, CLRX::GPUDeviceType::SPOOKY, CLRX::GPUDeviceType::KALINDI,
  CLRX::GPUDeviceType::HAINAN, CLRX::GPUDeviceType::HAWAII, CLRX::GPUDeviceType::ICELAND, CLRX::GPUDeviceType::TONGA,
  CLRX::GPUDeviceType::MULLINS, CLRX::GPUDeviceType::FIJI, CLRX::GPUDeviceType::CARRIZO, DUMMY,
  GOOSE, HORSE, STONEY, ELLESMERE,
  BAFFIN, GFX804, GFX900, GFX901,
  GFX902, GFX903, GFX904, GFX905,
  GFX906, GFX907, GFX1000, GFX1010,
  GFX1011, CLRX::GPUDeviceType::GPUDEVICE_MAX = GFX1011, CLRX::GPUDeviceType::RADEON_HD7700 = CAPE_VERDE, CLRX::GPUDeviceType::RADEON_HD7800 = PITCAIRN,
  CLRX::GPUDeviceType::RADEON_HD7900 = TAHITI, CLRX::GPUDeviceType::RADEON_R7_250 = OLAND, CLRX::GPUDeviceType::RADEON_R7_260 = BONAIRE, CLRX::GPUDeviceType::RADEON_R9_290 = HAWAII
}
 type of GPU device More...
 
enum  CLRX::GPUArchitecture : cxbyte {
  CLRX::GPUArchitecture::GCN1_0 = 0, CLRX::GPUArchitecture::GCN1_1, CLRX::GPUArchitecture::GCN1_2, CLRX::GPUArchitecture::GCN1_4,
  CLRX::GPUArchitecture::GCN1_4_1, CLRX::GPUArchitecture::GCN1_5, CLRX::GPUArchitecture::GCN1_5_1, GPUARCH_MAX = GCN1_5_1
}
 GPU architecture. More...
 
enum  : GPUArchMask {
  ARCH_SOUTHERN_ISLANDS = 1, ARCH_SEA_ISLANDS = 2, ARCH_VOLCANIC_ISLANDS = 4, ARCH_HD7X00 = 1,
  ARCH_RX2X0 = 2, ARCH_RX3X0 = 4, ARCH_RXVEGA = 8, ARCH_VEGA20 = 16,
  ARCH_NAVI = 32, ARCH_NAVI_DL = 64, ARCH_GCN_1_0_1 = 0x3, ARCH_GCN_1_1_2 = 0x6,
  ARCH_GCN_1_1_5 = 0x62, ARCH_GCN_1_1_2_4 = 0x1e, ARCH_GCN_1_0_1_2_4 = 0x1f, ARCH_GCN_1_2_4 = 0x1c,
  ARCH_GCN_1_4 = 0x18, ARCH_GCN_1_5 = 0x60, ARCH_GCN_1_5_1 = 0x40, ARCH_GCN_1_1_2_4_5 = 0x7e,
  ARCH_GCN_1_2_4_5 = 0x7c, ARCH_GCN_1_4_5 = 0x78, ARCH_GCN_1_0_1_5 = 0x63, ARCH_GCN_ALL = 0xffff
}
 
enum  : Flags { REGCOUNT_NO_VCC = 1, REGCOUNT_NO_FLAT = 2, REGCOUNT_NO_XNACK = 4, REGCOUNT_NO_EXTRA = 0xffff }
 
enum  : cxuint { REGTYPE_SGPR = 0, REGTYPE_VGPR }
 
enum  : Flags { GCN_VCC = 1, GCN_FLAT = 2, GCN_XNACK = 4, GCN_REG_WAVE32 = 8 }
 
enum  : Flags { GPUSETUP_TGSIZE_EN = 1, GPUSETUP_SCRATCH_EN = 2 }
 
enum  : cxuint { MAX_REGTYPES_NUM = 4 }
 
enum  CLRX::GPUArchVersionTable : cxuint { CLRX::GPUArchVersionTable::AMDCL2 = 0, CLRX::GPUArchVersionTable::OPENSOURCE, CLRX::GPUArchVersionTable::ROCM }
 ADMGPUArchValues table type. More...
 

Functions

GPUDeviceType CLRX::getGPUDeviceTypeFromName (const char *name)
 get GPU device type from name
 
const char * CLRX::getGPUDeviceTypeName (GPUDeviceType deviceType)
 get GPU device type name
 
GPUArchitecture CLRX::getGPUArchitectureFromName (const char *name)
 get GPU architecture from name
 
GPUArchitecture CLRX::getGPUArchitectureFromDeviceType (GPUDeviceType deviceType)
 get GPUArchitecture from GPU device type
 
GPUDeviceType CLRX::getLowestGPUDeviceTypeFromArchitecture (GPUArchitecture arch)
 get lowest GPU device for architecture
 
const char * CLRX::getGPUArchitectureName (GPUArchitecture architecture)
 get GPU architecture name
 
bool CLRX::isThisGPUArchitecture (GPUArchitecture requiredArch, GPUArchitecture thisArch)
 check whether is this GPU architecture
 
cxuint CLRX::getGPUMaxRegistersNum (GPUArchitecture architecture, cxuint regType, Flags flags=0)
 get maximum available registers for GPU (type: 0 - scalar, 1 - vector)
 
cxuint CLRX::getGPUMaxRegsNumByArchMask (GPUArchMask archMask, cxuint regType)
 get maximum available registers for GPU (type: 0 - scalar, 1 - vector)
 
cxuint CLRX::getGPUMaxAddrRegsNumByArchMask (GPUArchMask archMask, cxuint regType)
 get maximum available addressable registers for GPU (type: 0 - scalar, 1 - vector)
 
bool CLRX::isSpecialSGPRRegister (GPUArchMask archMask, cxuint index)
 get maximum number of scalar register + extra scalar reg (VCC, FLAT_SCRATCH, ...)
 
void CLRX::getGPUSetupMinRegistersNum (GPUArchitecture architecture, cxuint dimMask, cxuint userDataNum, Flags flags, cxuint *gprsOut)
 get minimal number of required registers
 
cxuint CLRX::getDefaultDimMask (GPUArchitecture architecture, uint32_t pgmRSRC2)
 get default dimMask from PGMRSRC2
 
size_t CLRX::getGPUMaxLocalSize (GPUArchitecture architecture)
 get maximum local size for GPU architecture
 
size_t CLRX::getGPUMaxGDSSize (GPUArchitecture architecture)
 get maximum GDS size for GPU architecture
 
cxuint CLRX::getGPUExtraRegsNum (GPUArchitecture architecture, cxuint regType, Flags flags)
 get extra registers (like VCC,FLAT_SCRATCH)
 
uint32_t CLRX::calculatePgmRSrc1 (GPUArchitecture arch, cxuint vgprsNum, cxuint sgprsNum, cxuint priority, cxuint floatMode, bool privMode, bool dx10clamp, bool debugMode, bool ieeeMode)
 calculate PGMRSRC1 register value
 
uint32_t CLRX::calculatePgmRSrc2 (GPUArchitecture arch, bool scratchEn, cxuint userDataNum, bool trapPresent, cxuint dimMask, cxuint defDimValues, bool tgSizeEn, cxuint ldsSize, cxuint exceptions)
 calculate PGMRSRC2 register value
 
uint32_t CLRX::calculatePgmRSrc3 (GPUArchitecture arch, cxuint sharedVgprsNum)
 
AMDGPUArchVersion CLRX::getGPUArchVersion (GPUDeviceType deviceType, GPUArchVersionTable table)
 get AMD GPU architecture version for specific device type and driver
 
GPUDeviceType CLRX::getGPUDeviceTypeFromArchVersion (cxuint archMajor, cxuint archMinor, cxuint archStepping)
 

Detailed Description

GPU identification utilities.