Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
Namespaces | Classes | Enumerations | Functions
proteus Namespace Reference

Namespaces

namespace  builtins
 
namespace  detail
 

Classes

class  BinaryInfo
 
class  CompilationResult
 
class  CompilationTask
 
class  CompilerAsync
 
class  CompilerSync
 
class  Config
 
struct  DeviceTraits
 
struct  DeviceTraits< JitEngineDeviceCUDA >
 
struct  DeviceTraits< JitEngineDeviceHIP >
 
class  Dispatcher
 
class  DispatcherHost
 
struct  DispatchResult
 
struct  FatbinWrapperT
 
class  Func
 
class  HashT
 
struct  InitLLVMTargets
 
class  JitCache
 
class  JitEngine
 
class  JitEngineDevice
 
class  JitEngineDeviceCUDA
 
class  JitEngineDeviceHIP
 
class  JitEngineHost
 
class  JITKernelInfo
 
class  JitModule
 
class  JitStorageCache
 
class  LambdaRegistry
 
struct  LinkingCloner
 
class  Logger
 
struct  RuntimeConstant
 
struct  RuntimeConstantInfo
 
class  Timer
 
struct  TimeTracerRAII
 
class  TransformArgumentSpecialization
 
class  TransformLambdaSpecialization
 
class  TransformSharedArray
 
struct  TypeMap
 
struct  TypeMap< bool >
 
struct  TypeMap< double & >
 
struct  TypeMap< double * >
 
struct  TypeMap< double >
 
struct  TypeMap< float * >
 
struct  TypeMap< float >
 
struct  TypeMap< int >
 
struct  TypeMap< size_t >
 
struct  TypeMap< void >
 
struct  Var
 

Enumerations

enum  RuntimeConstantType : int32_t {
  BOOL = 1 , INT8 , INT32 , INT64 ,
  FLOAT , DOUBLE , LONG_DOUBLE , PTR
}
 
enum class  CodegenOption { RTC , Serial , Parallel , ParallelThinLTO }
 
enum class  KernelCloneOption { LinkClonePrune , LinkCloneLight , CrossClone }
 

Functions

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator+ (const T &ConstValue, const Var &V)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator- (const T &ConstValue, const Var &V)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator* (const T &ConstValue, const Var &V)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator/ (const T &ConstValue, const Var &V)
 
Value * convert (IRBuilderBase IRB, Value *V, Type *TargetType)
 
Type * getCommonType (const DataLayout &DL, Type *T1, Type *T2)
 Get the common type following C++ usual arithmetic conversions.
 
Varpowf (const Var &L, const Var &R)
 
Varsqrtf (const Var &R)
 
template Varoperator+<int > (const int &, const Var &)
 
template Varoperator+<size_t > (const size_t &, const Var &)
 
template Varoperator+<float > (const float &, const Var &)
 
template Varoperator+<double > (const double &, const Var &)
 
template Varoperator-<int > (const int &, const Var &)
 
template Varoperator-<size_t > (const size_t &, const Var &)
 
template Varoperator-<float > (const float &, const Var &)
 
template Varoperator-<double > (const double &, const Var &)
 
template Varoperator*<int > (const int &, const Var &)
 
template Varoperator*<size_t > (const size_t &, const Var &)
 
template Varoperator*<float > (const float &, const Var &)
 
template Varoperator*<double > (const double &, const Var &)
 
template Varoperator/<int > (const int &, const Var &)
 
template Varoperator/<size_t > (const size_t &, const Var &)
 
template Varoperator/<float > (const float &, const Var &)
 
template Varoperator/<double > (const double &, const Var &)
 
std::unique_ptr< Module > cloneKernelFromModule (Module &M, StringRef Name, CallGraph &CG)
 
std::unique_ptr< Module > cloneKernelFromModules (ArrayRef< std::reference_wrapper< Module > > Mods, StringRef EntryName)
 
std::string toString (CodegenOption Option)
 
std::string toString (KernelCloneOption Option)
 
bool getEnvOrDefaultBool (const char *VarName, bool Default)
 
int getEnvOrDefaultInt (const char *VarName, int Default)
 
CodegenOption getEnvOrDefaultCG (const char *VarName, CodegenOption Default)
 
KernelCloneOption getEnvOrDefaultKC (const char *VarName, KernelCloneOption Default)
 
void * resolveDeviceGlobalAddr (const void *Addr)
 
cudaError_t launchKernelDirect (void *KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
 
CUfunction getKernelFunctionFromImage (StringRef KernelName, const void *Image, bool RelinkGlobalsByCopy, const std::unordered_map< std::string, const void * > &VarNameToDevPtr)
 
cudaError_t launchKernelFunction (CUfunction KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
 
hipError_t launchKernelDirect (void *KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, hipStream_t Stream)
 
hipError_t launchKernelFunction (hipFunction_t KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, hipStream_t Stream)
 
void optimizeIR (Module &M, StringRef Arch, char OptLevel, unsigned CodegenOptLevel)
 
std::unique_ptr< Module > linkModules (LLVMContext &Ctx, SmallVector< std::unique_ptr< Module > > LinkedModules)
 
void runCleanupPassPipeline (Module &M)
 
void pruneIR (Module &M, bool UnsetExternallyInitialized=true)
 
void internalize (Module &M, StringRef PreserveFunctionName)
 
void setLaunchBoundsForKernel (Module &M, Function &F, size_t, int BlockSize)
 
void codegenPTX (Module &M, StringRef DeviceArch, SmallVectorImpl< char > &PTXStr)
 
std::unique_ptr< MemoryBuffer > codegenObject (Module &M, StringRef DeviceArch, SmallPtrSetImpl< void * > &GlobalLinkedBinaries, CodegenOption CGOption=CodegenOption::RTC)
 
std::string toString (Value &V)
 
HashT hashValue (HashT &H)
 
HashT hashValue (StringRef &S)
 
HashT hashValue (const std::string &S)
 
template<typename T >
std::enable_if_t< std::is_scalar< T >::value, HashThashValue (const T &V)
 
HashT hashArrayRefElement (const RuntimeConstant &RC)
 
HashT hashValue (ArrayRef< RuntimeConstant > Arr)
 
HashT hashCombine (HashT A, HashT B)
 
template<typename FirstT , typename... RestTs>
HashT hash (FirstT &&First, RestTs &&...Rest)
 
template<typename T >
HashT hash (T &&Data)
 
template<typename T >
 __attribute__ ((noinline)) void jit_arg(T V) noexcept
 
Constant * getConstant (LLVMContext &Ctx, Type *ArgType, const RuntimeConstant &RC)
 

Enumeration Type Documentation

◆ CodegenOption

enum class proteus::CodegenOption
strong
Enumerator
RTC 
Serial 
Parallel 
ParallelThinLTO 

◆ KernelCloneOption

enum class proteus::KernelCloneOption
strong
Enumerator
LinkClonePrune 
LinkCloneLight 
CrossClone 

◆ RuntimeConstantType

Enumerator
BOOL 
INT8 
INT32 
INT64 
FLOAT 
DOUBLE 
LONG_DOUBLE 
PTR 

Function Documentation

◆ __attribute__()

template<typename T >
proteus::__attribute__ ( (noinline)  )
noexcept

◆ cloneKernelFromModule()

std::unique_ptr< Module > proteus::cloneKernelFromModule ( Module &  M,
StringRef  Name,
CallGraph &  CG 
)
inline

◆ cloneKernelFromModules()

std::unique_ptr< Module > proteus::cloneKernelFromModules ( ArrayRef< std::reference_wrapper< Module > >  Mods,
StringRef  EntryName 
)
inline

◆ codegenObject()

std::unique_ptr< MemoryBuffer > proteus::codegenObject ( Module &  M,
StringRef  DeviceArch,
SmallPtrSetImpl< void * > &  GlobalLinkedBinaries,
CodegenOption  CGOption = CodegenOption::RTC 
)
inline

◆ codegenPTX()

void proteus::codegenPTX ( Module &  M,
StringRef  DeviceArch,
SmallVectorImpl< char > &  PTXStr 
)
inline

◆ convert()

Value * proteus::convert ( IRBuilderBase  IRB,
Value *  V,
Type *  TargetType 
)

◆ getCommonType()

Type * proteus::getCommonType ( const DataLayout &  DL,
Type *  T1,
Type *  T2 
)

Get the common type following C++ usual arithmetic conversions.

◆ getConstant()

Constant * proteus::getConstant ( LLVMContext &  Ctx,
Type *  ArgType,
const RuntimeConstant RC 
)
inline

◆ getEnvOrDefaultBool()

bool proteus::getEnvOrDefaultBool ( const char *  VarName,
bool  Default 
)
inline

◆ getEnvOrDefaultCG()

CodegenOption proteus::getEnvOrDefaultCG ( const char *  VarName,
CodegenOption  Default 
)
inline

◆ getEnvOrDefaultInt()

int proteus::getEnvOrDefaultInt ( const char *  VarName,
int  Default 
)
inline

◆ getEnvOrDefaultKC()

KernelCloneOption proteus::getEnvOrDefaultKC ( const char *  VarName,
KernelCloneOption  Default 
)
inline

◆ getKernelFunctionFromImage()

hipFunction_t proteus::getKernelFunctionFromImage ( StringRef  KernelName,
const void *  Image,
bool  RelinkGlobalsByCopy,
const std::unordered_map< std::string, const void * > &  VarNameToDevPtr 
)
inline

◆ hash() [1/2]

template<typename FirstT , typename... RestTs>
HashT proteus::hash ( FirstT &&  First,
RestTs &&...  Rest 
)
inline

◆ hash() [2/2]

template<typename T >
HashT proteus::hash ( T &&  Data)
inline

◆ hashArrayRefElement()

HashT proteus::hashArrayRefElement ( const RuntimeConstant RC)
inline

◆ hashCombine()

HashT proteus::hashCombine ( HashT  A,
HashT  B 
)
inline

◆ hashValue() [1/5]

HashT proteus::hashValue ( ArrayRef< RuntimeConstant Arr)
inline

◆ hashValue() [2/5]

HashT proteus::hashValue ( const std::string &  S)
inline

◆ hashValue() [3/5]

template<typename T >
std::enable_if_t< std::is_scalar< T >::value, HashT > proteus::hashValue ( const T &  V)
inline

◆ hashValue() [4/5]

HashT proteus::hashValue ( HashT H)
inline

◆ hashValue() [5/5]

HashT proteus::hashValue ( StringRef &  S)
inline

◆ internalize()

void proteus::internalize ( Module &  M,
StringRef  PreserveFunctionName 
)
inline

◆ launchKernelDirect() [1/2]

cudaError_t proteus::launchKernelDirect ( void *  KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
CUstream  Stream 
)
inline

◆ launchKernelDirect() [2/2]

hipError_t proteus::launchKernelDirect ( void *  KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
hipStream_t  Stream 
)
inline

◆ launchKernelFunction() [1/2]

cudaError_t proteus::launchKernelFunction ( CUfunction  KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
CUstream  Stream 
)
inline

◆ launchKernelFunction() [2/2]

hipError_t proteus::launchKernelFunction ( hipFunction_t  KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
hipStream_t  Stream 
)
inline

◆ linkModules()

std::unique_ptr< Module > proteus::linkModules ( LLVMContext &  Ctx,
SmallVector< std::unique_ptr< Module > >  LinkedModules 
)
inline

◆ operator*()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator* ( const T &  ConstValue,
const Var V 
)

◆ operator*<double >()

template Var & proteus::operator*<double > ( const double &  ,
const Var  
)

◆ operator*<float >()

template Var & proteus::operator*<float > ( const float &  ,
const Var  
)

◆ operator*<int >()

template Var & proteus::operator*<int > ( const int &  ,
const Var  
)

◆ operator*<size_t >()

template Var & proteus::operator*<size_t > ( const size_t &  ,
const Var  
)

◆ operator+()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator+ ( const T &  ConstValue,
const Var V 
)

◆ operator+<double >()

template Var & proteus::operator+<double > ( const double &  ,
const Var  
)

◆ operator+<float >()

template Var & proteus::operator+<float > ( const float &  ,
const Var  
)

◆ operator+<int >()

template Var & proteus::operator+<int > ( const int &  ,
const Var  
)

◆ operator+<size_t >()

template Var & proteus::operator+<size_t > ( const size_t &  ,
const Var  
)

◆ operator-()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator- ( const T &  ConstValue,
const Var V 
)

◆ operator-<double >()

template Var & proteus::operator-<double > ( const double &  ,
const Var  
)

◆ operator-<float >()

template Var & proteus::operator-<float > ( const float &  ,
const Var  
)

◆ operator-<int >()

template Var & proteus::operator-<int > ( const int &  ,
const Var  
)

◆ operator-<size_t >()

template Var & proteus::operator-<size_t > ( const size_t &  ,
const Var  
)

◆ operator/()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator/ ( const T &  ConstValue,
const Var V 
)

◆ operator/<double >()

template Var & proteus::operator/<double > ( const double &  ,
const Var  
)

◆ operator/<float >()

template Var & proteus::operator/<float > ( const float &  ,
const Var  
)

◆ operator/<int >()

template Var & proteus::operator/<int > ( const int &  ,
const Var  
)

◆ operator/<size_t >()

template Var & proteus::operator/<size_t > ( const size_t &  ,
const Var  
)

◆ optimizeIR()

void proteus::optimizeIR ( Module &  M,
StringRef  Arch,
char  OptLevel,
unsigned  CodegenOptLevel 
)
inline

◆ powf()

Var & proteus::powf ( const Var L,
const Var R 
)

◆ pruneIR()

void proteus::pruneIR ( Module &  M,
bool  UnsetExternallyInitialized = true 
)
inline

◆ resolveDeviceGlobalAddr()

void * proteus::resolveDeviceGlobalAddr ( const void *  Addr)
inline

◆ runCleanupPassPipeline()

void proteus::runCleanupPassPipeline ( Module &  M)
inline

◆ setLaunchBoundsForKernel()

void proteus::setLaunchBoundsForKernel ( Module &  M,
Function &  F,
size_t  GridSize,
int  BlockSize 
)
inline

◆ sqrtf()

Var & proteus::sqrtf ( const Var R)

◆ toString() [1/3]

std::string proteus::toString ( CodegenOption  Option)
inline

◆ toString() [2/3]

std::string proteus::toString ( KernelCloneOption  Option)
inline

◆ toString() [3/3]

std::string proteus::toString ( Value &  V)
inline