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 std::unique_ptr<MemoryBuffer> compileOnly(Module &M,
52 bool DisableIROpt = false);
53
54private:
58
59 void extractLinkedBitcode(LLVMContext &Ctx, CUmodule &CUMod,
60 SmallVector<std::unique_ptr<Module>> &LinkedModules,
61 std::string &ModuleId);
62};
63
64} // namespace proteus
65
66#endif
void const char * ModuleId
Definition CompilerInterfaceDevice.cpp:36
void char * KernelName
Definition CompilerInterfaceDevice.cpp:54
Definition JitEngineDevice.h:81
Definition Hashing.h:21
Definition JitEngineDeviceCUDA.h:33
static JitEngineDeviceCUDA & instance()
Definition JitEngineDeviceCUDA.cpp:24
void setLaunchBoundsForKernel(Module &M, Function &F, size_t GridSize, int BlockSize)
void extractModules(BinaryInfo &BinInfo)
Definition JitEngineDeviceCUDA.cpp:108
std::unique_ptr< MemoryBuffer > compileOnly(Module &M, bool DisableIROpt=false)
Definition JitEngineDeviceCUDA.cpp:165
void codegenPTX(Module &M, StringRef DeviceArch, SmallVectorImpl< char > &PTXStr)
HashT getModuleHash(BinaryInfo &BinInfo)
Definition JitEngineDeviceCUDA.cpp:66
std::unique_ptr< Module > tryExtractKernelModule(BinaryInfo &BinInfo, StringRef KernelName, LLVMContext &Ctx)
Definition JitEngineDeviceCUDA.cpp:100
Definition JitEngineDevice.h:280
std::string DeviceArch
Definition JitEngineDevice.h:557
Definition CompiledLibrary.h:7
Definition MemoryCache.h:26
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:278