Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
proteus::Dispatcher Class Referenceabstract

#include <Dispatcher.h>

Inheritance diagram for proteus::Dispatcher:
Inheritance graph
[legend]

Public Member Functions

virtual ~Dispatcher ()
 
const std::string & getLabel () const
 
virtual std::unique_ptr< llvm::MemoryBuffer > compileModule (llvm::Module &M, const CodeGenerationConfig &CGConfig)=0
 
virtual void optimizeModule (llvm::Module &M, const CodeGenerationConfig &CGConfig)
 
virtual std::unique_ptr< llvm::MemoryBuffer > codegenModule (llvm::Module &M, const CodeGenerationConfig &CGConfig)
 
std::unique_ptr< llvm::MemoryBuffer > compile (std::unique_ptr< llvm::LLVMContext > Ctx, std::unique_ptr< llvm::Module > M, const HashT &ModuleHash, const CodeGenerationConfig &CGConfig)
 
std::unique_ptr< llvm::MemoryBuffer > compile (std::unique_ptr< llvm::LLVMContext > Ctx, std::unique_ptr< llvm::Module > M, const HashT &ModuleHash)
 
std::unique_ptr< CompiledLibrary > lookupCompiledLibrary (const HashT &ModuleHash)
 
virtual DispatchResult launch (void *KernelFunc, LaunchDims GridDim, LaunchDims BlockDim, void *KernelArgs[], uint64_t ShmemSize, void *Stream)=0
 
virtual llvm::StringRef getDeviceArch () const =0
 
template<typename Sig , typename... ArgT>
sig_traits< Sig >::return_type run (void *FuncPtr, ArgT &&...Args)
 
virtual void * lookupFunction (llvm::StringRef BaseName, const HashT &ModuleHash)=0
 
virtual void * insertFunction (const KernelName &Name, const HashT &ModuleHash, CompiledLibrary &Library)=0
 
void * getOrInsertFunction (const KernelName &Name, const HashT &ModuleHash, CompiledLibrary &Library)
 
virtual void registerDynamicLibrary (const HashT &HashValue, const std::string &Path)=0
 
void registerObject (const HashT &HashValue, const llvm::MemoryBufferRef &Obj)
 

Static Public Member Functions

static Dispatcher & getDispatcher (TargetModelType TargetModel)
 

Protected Member Functions

 Dispatcher (const std::string &Name, TargetModelType TM)
 
void printObjectCacheStats ()
 

Protected Attributes

TargetModelType TargetModel
 
const std::string Label
 
std::unique_ptr< ObjectCacheChain > ObjectCache
 

Constructor & Destructor Documentation

◆ Dispatcher()

proteus::Dispatcher::Dispatcher ( const std::string &  Name,
TargetModelType  TM 
)
protected

◆ ~Dispatcher()

proteus::Dispatcher::~Dispatcher ( )
virtualdefault

Member Function Documentation

◆ codegenModule()

std::unique_ptr< llvm::MemoryBuffer > proteus::Dispatcher::codegenModule ( llvm::Module &  M,
const CodeGenerationConfig &  CGConfig 
)
virtual

◆ compile() [1/2]

std::unique_ptr< llvm::MemoryBuffer > proteus::Dispatcher::compile ( std::unique_ptr< llvm::LLVMContext >  Ctx,
std::unique_ptr< llvm::Module >  M,
const HashT &  ModuleHash 
)

◆ compile() [2/2]

std::unique_ptr< llvm::MemoryBuffer > proteus::Dispatcher::compile ( std::unique_ptr< llvm::LLVMContext >  Ctx,
std::unique_ptr< llvm::Module >  M,
const HashT &  ModuleHash,
const CodeGenerationConfig &  CGConfig 
)

◆ compileModule()

virtual std::unique_ptr< llvm::MemoryBuffer > proteus::Dispatcher::compileModule ( llvm::Module &  M,
const CodeGenerationConfig &  CGConfig 
)
pure virtual

◆ getDeviceArch()

virtual llvm::StringRef proteus::Dispatcher::getDeviceArch ( ) const
pure virtual

Implemented in proteus::DispatcherHost.

◆ getDispatcher()

Dispatcher & proteus::Dispatcher::getDispatcher ( TargetModelType  TargetModel)
static

◆ getLabel()

const std::string & proteus::Dispatcher::getLabel ( ) const
inline

◆ getOrInsertFunction()

void * proteus::Dispatcher::getOrInsertFunction ( const KernelName &  Name,
const HashT &  ModuleHash,
CompiledLibrary &  Library 
)

◆ insertFunction()

virtual void * proteus::Dispatcher::insertFunction ( const KernelName &  Name,
const HashT &  ModuleHash,
CompiledLibrary &  Library 
)
pure virtual

Implemented in proteus::DispatcherHost.

◆ launch()

virtual DispatchResult proteus::Dispatcher::launch ( void *  KernelFunc,
LaunchDims  GridDim,
LaunchDims  BlockDim,
void *  KernelArgs[],
uint64_t  ShmemSize,
void *  Stream 
)
pure virtual

Implemented in proteus::DispatcherHost.

◆ lookupCompiledLibrary()

std::unique_ptr< CompiledLibrary > proteus::Dispatcher::lookupCompiledLibrary ( const HashT &  ModuleHash)

◆ lookupFunction()

virtual void * proteus::Dispatcher::lookupFunction ( llvm::StringRef  BaseName,
const HashT &  ModuleHash 
)
pure virtual

◆ optimizeModule()

void proteus::Dispatcher::optimizeModule ( llvm::Module &  M,
const CodeGenerationConfig &  CGConfig 
)
virtual

◆ printObjectCacheStats()

void proteus::Dispatcher::printObjectCacheStats ( )
protected

◆ registerDynamicLibrary()

virtual void proteus::Dispatcher::registerDynamicLibrary ( const HashT &  HashValue,
const std::string &  Path 
)
pure virtual

Implemented in proteus::DispatcherHost.

◆ registerObject()

void proteus::Dispatcher::registerObject ( const HashT &  HashValue,
const llvm::MemoryBufferRef &  Obj 
)

◆ run()

template<typename Sig , typename... ArgT>
sig_traits< Sig >::return_type proteus::Dispatcher::run ( void *  FuncPtr,
ArgT &&...  Args 
)
inline

Member Data Documentation

◆ Label

const std::string proteus::Dispatcher::Label
protected

◆ ObjectCache

std::unique_ptr<ObjectCacheChain> proteus::Dispatcher::ObjectCache
protected

◆ TargetModel

TargetModelType proteus::Dispatcher::TargetModel
protected

The documentation for this class was generated from the following files: