1#ifndef PROTEUS_FRONTEND_DISPATCHER_HIP_H
2#define PROTEUS_FRONTEND_DISPATCHER_HIP_H
13class DispatcherHIP :
public Dispatcher {
15 static DispatcherHIP &instance() {
16 static DispatcherHIP D;
20 std::unique_ptr<MemoryBuffer> compile(std::unique_ptr<LLVMContext> Ctx,
21 std::unique_ptr<Module> Mod,
22 const HashT &ModuleHash,
23 bool DisableIROpt =
false)
override {
26 auto CtxOwner = std::move(Ctx);
27 auto ModOwner = std::move(Mod);
29 std::unique_ptr<MemoryBuffer> ObjectModule =
30 Jit.compileOnly(*ModOwner, DisableIROpt);
35 ModuleHash, CacheEntry::staticObject(ObjectModule->getMemBufferRef()));
40 std::unique_ptr<CompiledLibrary>
41 lookupCompiledLibrary(
const HashT &ModuleHash)
override {
42 return ObjectCache->lookup(ModuleHash);
45 DispatchResult launch(
void *KernelFunc,
LaunchDims GridDim,
47 uint64_t ShmemSize,
void *Stream)
override {
48 dim3 HipGridDim = {GridDim.
X, GridDim.
Y, GridDim.
Z};
49 dim3 HipBlockDim = {BlockDim.
X, BlockDim.
Y, BlockDim.
Z};
50 hipStream_t HipStream =
reinterpret_cast<hipStream_t
>(Stream);
53 reinterpret_cast<hipFunction_t
>(KernelFunc), HipGridDim, HipBlockDim,
54 KernelArgs, ShmemSize, HipStream);
57 StringRef getDeviceArch()
const override {
return Jit.getDeviceArch(); }
60 CodeCache.printStats();
61 CodeCache.printKernelTrace();
62 ObjectCache->printStats();
65 void *getFunctionAddress(
const std::string &
KernelName,
66 const HashT &ModuleHash,
67 CompiledLibrary &Library)
override {
68 auto GetKernelFunc = [&]() {
72 if (
auto KernelFunc = CodeCache.lookup(HashValue))
76 KernelName, Library.ObjectModule->getBufferStart(),
80 CodeCache.insert(HashValue, KernelFunc,
KernelName);
85 auto KernelFunc = GetKernelFunc();
89 void registerDynamicLibrary(
const HashT &,
const std::string &)
override {
94 JitEngineDeviceHIP &
Jit;
97 Jit(JitEngineDeviceHIP::instance()) {}
98 MemoryCache<hipFunction_t> CodeCache{
"DispatcherHIP"};
void char * KernelName
Definition CompilerInterfaceDevice.cpp:54
JitEngineHost & Jit
Definition CompilerInterfaceHost.cpp:25
Definition MemoryCache.h:26
TargetModelType
Definition TargetModel.h:8
HashT hash(FirstT &&First, RestTs &&...Rest)
Definition Hashing.h:142
void reportFatalError(const llvm::Twine &Reason, const char *FILE, unsigned Line)
Definition Error.cpp:14
cudaError_t launchKernelFunction(CUfunction KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
Definition CoreDeviceCUDA.h:78
CUfunction getKernelFunctionFromImage(StringRef KernelName, const void *Image, bool RelinkGlobalsByCopy, const std::unordered_map< std::string, GlobalVarInfo > &VarNameToGlobalInfo)
Definition CoreDeviceCUDA.h:50
Definition Dispatcher.h:21
unsigned Z
Definition Dispatcher.h:22
unsigned Y
Definition Dispatcher.h:22
unsigned X
Definition Dispatcher.h:22