1#ifndef PROTEUS_FRONTEND_DISPATCHER_CUDA_HPP
2#define PROTEUS_FRONTEND_DISPATCHER_CUDA_HPP
11class DispatcherCUDA :
public Dispatcher {
13 static DispatcherCUDA &instance() {
14 static DispatcherCUDA D;
18 void compile(std::unique_ptr<Module> M)
override {
20 auto LibDeviceBuffer = llvm::MemoryBuffer::getFile(LIBDEVICE_BC_PATH);
21 auto LibDeviceModule = llvm::parseBitcodeFile(
22 LibDeviceBuffer->get()->getMemBufferRef(), M->getContext());
24 llvm::Linker linker(*M);
25 linker.linkInModule(std::move(LibDeviceModule.get()));
27 Library =
Jit.compileOnly(*M);
33 LaunchDims BlockDim, ArrayRef<void *> KernelArgs,
34 uint64_t ShmemSize,
void *Stream)
override {
40 dim3 CudaGridDim = {GridDim.
X, GridDim.
Y, GridDim.
Z};
41 dim3 CudaBlockDim = {BlockDim.
X, BlockDim.
Y, BlockDim.
Z};
42 cudaStream_t CudaStream =
reinterpret_cast<cudaStream_t
>(Stream);
44 void **KernelArgsPtrs =
const_cast<void **
>(KernelArgs.data());
46 KernelArgsPtrs, ShmemSize, CudaStream);
50 void *getFunctionAddress(StringRef)
override {
55 JitEngineDeviceCUDA &
Jit;
56 DispatcherCUDA() :
Jit(JitEngineDeviceCUDA::instance()) {}
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