1#ifndef PROTEUS_FRONTEND_DISPATCHER_HPP
2#define PROTEUS_FRONTEND_DISPATCHER_HPP
4#include <llvm/IR/Module.h>
5#include <llvm/Support/MemoryBuffer.h>
12#if PROTEUS_ENABLE_HIP && __HIP__
13#include <hip/hip_runtime.h>
17 unsigned X = 1,
Y = 1,
Z = 1;
41#if PROTEUS_ENABLE_HIP && __HIP__
45#if PROTEUS_ENABLE_CUDA && defined(__CUDACC__)
61 virtual std::unique_ptr<MemoryBuffer>
62 compile(std::unique_ptr<LLVMContext> Ctx, std::unique_ptr<Module> M,
65 virtual std::unique_ptr<CompiledLibrary>
75 template <
typename Sig,
typename...
ArgT>
79 "Dispatcher run interface is only supported for host derived models");
81 auto Fn =
reinterpret_cast<Sig *
>(FuncPtr);
84 if constexpr (std::is_void_v<Ret>) {
85 Fn(std::forward<ArgT>(
Args)...);
88 return Fn(std::forward<ArgT>(
Args)...);
char int void ** Args
Definition CompilerInterfaceHost.cpp:21
#define PROTEUS_FATAL_ERROR(x)
Definition Error.h:7
Definition Dispatcher.hpp:54
virtual StringRef getDeviceArch() const =0
TargetModelType TargetModel
Definition Dispatcher.hpp:56
virtual std::unique_ptr< CompiledLibrary > lookupCompiledLibrary(HashT ModuleHash)=0
static Dispatcher & getDispatcher(TargetModelType TargetModel)
Definition Dispatcher.cpp:55
virtual std::unique_ptr< MemoryBuffer > compile(std::unique_ptr< LLVMContext > Ctx, std::unique_ptr< Module > M, HashT ModuleHash, bool DisableIROpt=false)=0
virtual void registerDynamicLibrary(HashT HashValue, const SmallString< 128 > &Path)=0
virtual void * getFunctionAddress(StringRef FunctionName, HashT ModuleHash, CompiledLibrary &Library)=0
virtual DispatchResult launch(void *KernelFunc, LaunchDims GridDim, LaunchDims BlockDim, ArrayRef< void * > KernelArgs, uint64_t ShmemSize, void *Stream)=0
sig_traits< Sig >::return_type run(void *FuncPtr, ArgT &&...Args)
Definition Dispatcher.hpp:76
Definition Hashing.hpp:20
Definition BuiltinsCUDA.cpp:4
TargetModelType
Definition TargetModel.hpp:14
bool isHostTargetModel(TargetModelType TargetModel)
Definition TargetModel.hpp:55
T getRuntimeConstantValue(void *Arg)
Definition CompilerInterfaceRuntimeConstantInfo.h:114
Definition Dispatcher.hpp:16
unsigned Z
Definition Dispatcher.hpp:17
unsigned Y
Definition Dispatcher.hpp:17
unsigned X
Definition Dispatcher.hpp:17
Definition CompiledLibrary.hpp:12
Definition Dispatcher.hpp:32
constexpr DispatchResult(int Ret=0) noexcept
Definition Dispatcher.hpp:36
int Ret
Definition Dispatcher.hpp:33
R return_type
Definition Dispatcher.hpp:25
std::tuple< Args... > argument_types
Definition Dispatcher.hpp:26
Definition Dispatcher.hpp:22