Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
JitEngineDeviceHIP.h
Go to the documentation of this file.
1//===-- JitEngineDeviceHIP.h -- JIT Engine Device for HIP 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_JITENGINEDEVICEHIP_H
12#define PROTEUS_JITENGINEDEVICEHIP_H
13
15#include "proteus/impl/Utils.h"
16
17namespace proteus {
18
19using namespace llvm;
20
22template <> struct DeviceTraits<JitEngineDeviceHIP> {
23 using DeviceError_t = hipError_t;
24 using DeviceStream_t = hipStream_t;
25 using KernelFunction_t = hipFunction_t;
26};
27
28class JitEngineDeviceHIP : public JitEngineDevice<JitEngineDeviceHIP> {
29public:
31
32 static const SmallVector<StringRef> gridDimXFnName() {
33 return {"_ZNK17__HIP_CoordinatesI13__HIP_GridDimE3__XcvjEv",
34 "llvm.amdgcn.num.workgroups.x"};
35 };
36
37 static const SmallVector<StringRef> gridDimYFnName() {
38 return {"_ZNK17__HIP_CoordinatesI13__HIP_GridDimE3__YcvjEv",
39 "llvm.amdgcn.num.workgroups.y"};
40 };
41
42 static const SmallVector<StringRef> gridDimZFnName() {
43 return {"_ZNK17__HIP_CoordinatesI13__HIP_GridDimE3__ZcvjEv",
44 "llvm.amdgcn.num.workgroups.z"};
45 };
46
47 static const SmallVector<StringRef> blockDimXFnName() {
48 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockDimE3__XcvjEv",
49 "llvm.amdgcn.workgroup.size.x"};
50 };
51
52 static const SmallVector<StringRef> blockDimYFnName() {
53 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockDimE3__YcvjEv",
54 "llvm.amdgcn.workgroup.size.y"};
55 }
56
57 static const SmallVector<StringRef> blockDimZFnName() {
58 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockDimE3__ZcvjEv",
59 "llvm.amdgcn.workgroup.size.z"};
60 };
61
62 static const SmallVector<StringRef> blockIdxXFnName() {
63 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockIdxE3__XcvjEv",
64 "llvm.amdgcn.workgroup.id.x"};
65 };
66
67 static const SmallVector<StringRef> blockIdxYFnName() {
68 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockIdxE3__YcvjEv",
69 "llvm.amdgcn.workgroup.id.y"};
70 };
71
72 static const SmallVector<StringRef> blockIdxZFnName() {
73 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockIdxE3__ZcvjEv",
74 "llvm.amdgcn.workgroup.id.z"};
75 }
76
77 static const SmallVector<StringRef> threadIdxXFnName() {
78 return {"_ZNK17__HIP_CoordinatesI15__HIP_ThreadIdxE3__XcvjEv",
79 "llvm.amdgcn.workitem.id.x"};
80 };
81
82 static const SmallVector<StringRef> threadIdxYFnName() {
83 return {"_ZNK17__HIP_CoordinatesI15__HIP_ThreadIdxE3__YcvjEv",
84 "llvm.amdgcn.workitem.id.y"};
85 };
86
87 static const SmallVector<StringRef> threadIdxZFnName() {
88 return {"_ZNK17__HIP_CoordinatesI15__HIP_ThreadIdxE3__ZcvjEv",
89 "llvm.amdgcn.workitem.id.z"};
90 };
91
92 void setKernelDims(Module &M, dim3 &GridDim, dim3 &BlockDim);
93
94 void extractModules(BinaryInfo &BinInfo);
95
96 std::unique_ptr<Module> tryExtractKernelModule(BinaryInfo &BinInfo,
97 StringRef KernelName,
98 LLVMContext &Ctx);
99
101
102 std::unique_ptr<MemoryBuffer> compileOnly(Module &M,
103 bool DisableIROpt = false);
104
105private:
109};
110
111} // namespace proteus
112
113#endif
void char * KernelName
Definition CompilerInterfaceDevice.cpp:54
Definition JitEngineDevice.h:81
Definition Hashing.h:21
Definition JitEngineDeviceHIP.h:28
static const SmallVector< StringRef > blockIdxXFnName()
Definition JitEngineDeviceHIP.h:62
void setKernelDims(Module &M, dim3 &GridDim, dim3 &BlockDim)
static const SmallVector< StringRef > threadIdxYFnName()
Definition JitEngineDeviceHIP.h:82
static const SmallVector< StringRef > threadIdxXFnName()
Definition JitEngineDeviceHIP.h:77
void extractModules(BinaryInfo &BinInfo)
Definition JitEngineDeviceHIP.cpp:304
static const SmallVector< StringRef > blockDimXFnName()
Definition JitEngineDeviceHIP.h:47
static const SmallVector< StringRef > threadIdxZFnName()
Definition JitEngineDeviceHIP.h:87
static const SmallVector< StringRef > blockDimZFnName()
Definition JitEngineDeviceHIP.h:57
static const SmallVector< StringRef > blockIdxYFnName()
Definition JitEngineDeviceHIP.h:67
static const SmallVector< StringRef > gridDimXFnName()
Definition JitEngineDeviceHIP.h:32
std::unique_ptr< Module > tryExtractKernelModule(BinaryInfo &BinInfo, StringRef KernelName, LLVMContext &Ctx)
Definition JitEngineDeviceHIP.cpp:248
static const SmallVector< StringRef > blockIdxZFnName()
Definition JitEngineDeviceHIP.h:72
static const SmallVector< StringRef > gridDimYFnName()
Definition JitEngineDeviceHIP.h:37
static const SmallVector< StringRef > gridDimZFnName()
Definition JitEngineDeviceHIP.h:42
std::unique_ptr< MemoryBuffer > compileOnly(Module &M, bool DisableIROpt=false)
Definition JitEngineDeviceHIP.cpp:369
static JitEngineDeviceHIP & instance()
Definition JitEngineDeviceHIP.cpp:29
static const SmallVector< StringRef > blockDimYFnName()
Definition JitEngineDeviceHIP.h:52
HashT getModuleHash(BinaryInfo &BinInfo)
Definition JitEngineDeviceHIP.cpp:193
Definition JitEngineDevice.h:280
Definition CompiledLibrary.h:7
Definition MemoryCache.h:26
hipFunction_t KernelFunction_t
Definition JitEngineDeviceHIP.h:25
hipError_t DeviceError_t
Definition JitEngineDeviceHIP.h:23
hipStream_t DeviceStream_t
Definition JitEngineDeviceHIP.h:24
Definition JitEngineDevice.h:278