1#ifndef PROTEUS_FRONTEND_DISPATCHER_HPP
2#define PROTEUS_FRONTEND_DISPATCHER_HPP
4#include <llvm/IR/Module.h>
5#include <llvm/Support/MemoryBuffer.h>
8#if PROTEUS_ENABLE_HIP && __HIP__
9#include <hip/hip_runtime.h>
15 unsigned X = 1,
Y = 1,
Z = 1;
30 operator int() const noexcept {
return Ret; }
32#if PROTEUS_ENABLE_HIP && __HIP__
33 operator hipError_t() const noexcept {
return static_cast<hipError_t
>(
Ret); }
36#if PROTEUS_ENABLE_CUDA && defined(__CUDACC__)
37 operator cudaError_t() const noexcept {
38 return static_cast<cudaError_t
>(
Ret);
49 virtual void compile(std::unique_ptr<Module> M) = 0;
53 ArrayRef<void *> KernelArgs, uint64_t ShmemSize,
56 template <
typename Ret,
typename... ArgT>
57 Ret
run(StringRef FuncName, ArgT...
Args) {
59 using FnPtr = Ret (*)(ArgT...);
60 auto Fn =
reinterpret_cast<FnPtr
>(Addr);
65 std::unique_ptr<MemoryBuffer>
Library =
nullptr;
void char * KernelName
Definition CompilerInterfaceDevice.cpp:50
char int void ** Args
Definition CompilerInterfaceHost.cpp:20
TargetModelType
Definition Dispatcher.hpp:12
Definition Dispatcher.hpp:45
Ret run(StringRef FuncName, ArgT... Args)
Definition Dispatcher.hpp:57
virtual void compile(std::unique_ptr< Module > M)=0
static Dispatcher & getDispatcher(TargetModelType Model)
Definition Dispatcher.cpp:15
virtual void * getFunctionAddress(StringRef FunctionName)=0
std::unique_ptr< MemoryBuffer > Library
Definition Dispatcher.hpp:65
virtual DispatchResult launch(StringRef KernelName, LaunchDims GridDim, LaunchDims BlockDim, ArrayRef< void * > KernelArgs, uint64_t ShmemSize, void *Stream)=0
Definition Dispatcher.cpp:14
Definition Dispatcher.hpp:14
unsigned Z
Definition Dispatcher.hpp:15
unsigned Y
Definition Dispatcher.hpp:15
unsigned X
Definition Dispatcher.hpp:15
Definition Dispatcher.hpp:23
constexpr DispatchResult(int Ret=0) noexcept
Definition Dispatcher.hpp:27
int Ret
Definition Dispatcher.hpp:24