Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
DispatcherHIP.hpp
Go to the documentation of this file.
1#ifndef PROTEUS_FRONTEND_DISPATCHER_HIP_HPP
2#define PROTEUS_FRONTEND_DISPATCHER_HIP_HPP
3
4#if PROTEUS_ENABLE_HIP
5
6#include "proteus/Error.h"
9
10namespace proteus {
11
12class DispatcherHIP : public Dispatcher {
13public:
14 static DispatcherHIP &instance() {
15 static DispatcherHIP D;
16 return D;
17 }
18
19 void compile(std::unique_ptr<Module> M) override {
20 Library = Jit.compileOnly(*M);
21 if (!Library)
22 PROTEUS_FATAL_ERROR("Expected non-null object library");
23 }
24
25 DispatchResult launch(StringRef KernelName, LaunchDims GridDim,
26 LaunchDims BlockDim, ArrayRef<void *> KernelArgs,
27 uint64_t ShmemSize, void *Stream) override {
29 KernelName, Library->getBufferStart(),
30 /*RelinkGlobalsByCopy*/ false,
31 /* VarNameToDevPtr */ {});
32
33 dim3 HipGridDim = {GridDim.X, GridDim.Y, GridDim.Z};
34 dim3 HipBlockDim = {BlockDim.X, BlockDim.Y, BlockDim.Z};
35 hipStream_t HipStream = reinterpret_cast<hipStream_t>(Stream);
36
37 void **KernelArgsPtrs = const_cast<void **>(KernelArgs.data());
38 return proteus::launchKernelFunction(KernelFunc, HipGridDim, HipBlockDim,
39 KernelArgsPtrs, ShmemSize, HipStream);
40 }
41
42protected:
43 void *getFunctionAddress(StringRef) override {
44 PROTEUS_FATAL_ERROR("HIP does not support getFunctionAddress");
45 }
46
47private:
48 JitEngineDeviceHIP &Jit;
49 DispatcherHIP() : Jit(JitEngineDeviceHIP::instance()) {}
50};
51
52} // namespace proteus
53
54#endif
55
56#endif // PROTEUS_FRONTEND_DISPATCHER_HIP_HPP
void char * KernelName
Definition CompilerInterfaceDevice.cpp:50
auto & Jit
Definition CompilerInterfaceDevice.cpp:54
#define PROTEUS_FATAL_ERROR(x)
Definition Error.h:4
Definition Dispatcher.cpp:14
cudaError_t launchKernelFunction(CUfunction KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
Definition CoreDeviceCUDA.hpp:51
CUfunction getKernelFunctionFromImage(StringRef KernelName, const void *Image, bool RelinkGlobalsByCopy, const std::unordered_map< std::string, const void * > &VarNameToDevPtr)
Definition CoreDeviceCUDA.hpp:27
Definition Dispatcher.hpp:14
unsigned Z
Definition Dispatcher.hpp:15
unsigned Y
Definition Dispatcher.hpp:15
unsigned X
Definition Dispatcher.hpp:15