Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
JitEngineDeviceCUDA.hpp
Go to the documentation of this file.
1//===-- JitEngineDeviceCUDA.hpp -- JIT Engine Device for CUDA header --===//
2//
3// Part of the Proteus Project, under the Apache License v2.0 with LLVM
4// Exceptions. See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//===----------------------------------------------------------------------===//
10
11#ifndef PROTEUS_JITENGINEDEVICECUDA_HPP
12#define PROTEUS_JITENGINEDEVICECUDA_HPP
13
15#include "proteus/Utils.h"
16#include <llvm/ADT/DenseMap.h>
17#include <llvm/ADT/SmallVector.h>
18#include <memory>
19
20namespace proteus {
21
22using namespace llvm;
23
24class JitEngineDeviceCUDA;
25template <> struct DeviceTraits<JitEngineDeviceCUDA> {
26 using DeviceError_t = cudaError_t;
27 using DeviceStream_t = CUstream;
28 using KernelFunction_t = CUfunction;
29};
30
31class JitEngineDeviceCUDA : public JitEngineDevice<JitEngineDeviceCUDA> {
32public:
34
35 void *resolveDeviceGlobalAddr(const void *Addr);
36
37 void setLaunchBoundsForKernel(Module &M, Function &F, size_t GridSize,
38 int BlockSize);
39
40 std::unique_ptr<Module> extractModule(BinaryInfo &BinInfo);
41
42 void codegenPTX(Module &M, StringRef DeviceArch,
43 SmallVectorImpl<char> &PTXStr);
44
45 std::unique_ptr<MemoryBuffer> codegenObject(Module &M, StringRef DeviceArch);
46
47 CUfunction getKernelFunctionFromImage(StringRef KernelName,
48 const void *Image);
49
50 cudaError_t launchKernelFunction(CUfunction KernelFunc, dim3 GridDim,
51 dim3 BlockDim, void **KernelArgs,
52 uint64_t ShmemSize, CUstream Stream);
53
55
56private:
60
61 void extractLinkedBitcode(LLVMContext &Ctx, CUmodule &CUMod,
62 SmallVector<std::unique_ptr<Module>> &LinkedModules,
63 std::string &ModuleId);
64};
65
66} // namespace proteus
67
68#endif
void const char * ModuleId
Definition CompilerInterfaceDevice.cpp:31
void char * KernelName
Definition CompilerInterfaceDevice.cpp:50
Definition JitEngineDevice.hpp:78
Definition Hashing.hpp:19
Definition JitEngineDeviceCUDA.hpp:31
std::unique_ptr< Module > extractModule(BinaryInfo &BinInfo)
Definition JitEngineDeviceCUDA.cpp:98
static JitEngineDeviceCUDA & instance()
Definition JitEngineDeviceCUDA.cpp:27
void codegenPTX(Module &M, StringRef DeviceArch, SmallVectorImpl< char > &PTXStr)
std::unique_ptr< MemoryBuffer > codegenObject(Module &M, StringRef DeviceArch)
Definition JitEngineDeviceCUDA.cpp:145
void setLaunchBoundsForKernel(Module &M, Function &F, size_t GridSize, int BlockSize)
Definition JitEngineDeviceCUDA.cpp:123
HashT getModuleHash(BinaryInfo &BinInfo)
Definition JitEngineDeviceCUDA.cpp:61
void * resolveDeviceGlobalAddr(const void *Addr)
Definition JitEngineDeviceCUDA.cpp:23
cudaError_t launchKernelFunction(CUfunction KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
Definition JitEngineDeviceCUDA.cpp:137
CUfunction getKernelFunctionFromImage(StringRef KernelName, const void *Image)
Definition JitEngineDeviceCUDA.cpp:129
Definition JitEngineDevice.hpp:176
std::string DeviceArch
Definition JitEngineDevice.hpp:385
Definition JitEngine.cpp:20
CUfunction KernelFunction_t
Definition JitEngineDeviceCUDA.hpp:28
CUstream DeviceStream_t
Definition JitEngineDeviceCUDA.hpp:27
cudaError_t DeviceError_t
Definition JitEngineDeviceCUDA.hpp:26
Definition JitEngineDevice.hpp:174