Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
JitEngineDeviceCUDA.h
Go to the documentation of this file.
1//===-- JitEngineDeviceCUDA.h -- 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_H
12#define PROTEUS_JITENGINEDEVICECUDA_H
13
15#include "proteus/impl/Utils.h"
16
17#include <llvm/ADT/DenseMap.h>
18#include <llvm/ADT/SmallVector.h>
19
20#include <memory>
21
22namespace proteus {
23
24using namespace llvm;
25
27template <> struct DeviceTraits<JitEngineDeviceCUDA> {
28 using DeviceError_t = cudaError_t;
29 using DeviceStream_t = CUstream;
30 using KernelFunction_t = CUfunction;
31};
32
33class JitEngineDeviceCUDA : public JitEngineDevice<JitEngineDeviceCUDA> {
34public:
36
37 void setLaunchBoundsForKernel(Module &M, Function &F, size_t GridSize,
38 int BlockSize);
39
40 void extractModules(BinaryInfo &BinInfo);
41
42 std::unique_ptr<Module> tryExtractKernelModule(BinaryInfo &BinInfo,
43 StringRef KernelName,
44 LLVMContext &Ctx);
45
46 void codegenPTX(Module &M, StringRef DeviceArch,
47 SmallVectorImpl<char> &PTXStr);
48
50
51 // CUDA codegen never runs the Proteus pipeline itself.
52 static bool optimizesBeforeCodegen(CodegenOption) { return true; }
53
54 std::unique_ptr<MemoryBuffer>
55 codegenObject(Module &M, SmallPtrSetImpl<void *> &GlobalLinkedBinaries,
56 const CodeGenerationConfig &CGConfig);
57
58 std::unique_ptr<Dispatcher> createDispatcher();
59
60private:
64
65 void extractLinkedBitcode(LLVMContext &Ctx, CUmodule &CUMod,
66 SmallVector<std::unique_ptr<Module>> &LinkedModules,
67 std::string &ModuleId);
68};
69
70} // namespace proteus
71
72#endif
void const char * ModuleId
Definition CompilerInterfaceDevice.cpp:44
Definition JitEngineDevice.h:84
Definition Config.h:167
Definition Hashing.h:27
Definition JitEngineDeviceCUDA.h:33
static JitEngineDeviceCUDA & instance()
Definition JitEngineDeviceCUDA.cpp:25
void setLaunchBoundsForKernel(Module &M, Function &F, size_t GridSize, int BlockSize)
void extractModules(BinaryInfo &BinInfo)
Definition JitEngineDeviceCUDA.cpp:111
static bool optimizesBeforeCodegen(CodegenOption)
Definition JitEngineDeviceCUDA.h:52
void codegenPTX(Module &M, StringRef DeviceArch, SmallVectorImpl< char > &PTXStr)
std::unique_ptr< MemoryBuffer > codegenObject(Module &M, SmallPtrSetImpl< void * > &GlobalLinkedBinaries, const CodeGenerationConfig &CGConfig)
Definition JitEngineDeviceCUDA.cpp:171
std::unique_ptr< Dispatcher > createDispatcher()
Definition JitEngineDeviceCUDA.cpp:179
HashT getModuleHash(BinaryInfo &BinInfo)
Definition JitEngineDeviceCUDA.cpp:68
std::unique_ptr< Module > tryExtractKernelModule(BinaryInfo &BinInfo, StringRef KernelName, LLVMContext &Ctx)
Definition JitEngineDeviceCUDA.cpp:103
Definition JitEngineDevice.h:312
SmallPtrSet< void *, 8 > GlobalLinkedBinaries
Definition JitEngineDevice.h:488
std::string DeviceArch
Definition JitEngineDevice.h:566
Definition KernelName.h:18
Definition CompiledLibrary.h:8
Definition MemoryCache.h:27
CodegenOption
Definition Config.h:19
CUfunction KernelFunction_t
Definition JitEngineDeviceCUDA.h:30
CUstream DeviceStream_t
Definition JitEngineDeviceCUDA.h:29
cudaError_t DeviceError_t
Definition JitEngineDeviceCUDA.h:28
Definition JitEngineDevice.h:310