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"
17
18namespace proteus {
19
20using namespace llvm;
21
23template <> struct DeviceTraits<JitEngineDeviceHIP> {
24 using DeviceError_t = hipError_t;
25 using DeviceStream_t = hipStream_t;
26 using KernelFunction_t = hipFunction_t;
27};
28
29class JitEngineDeviceHIP : public JitEngineDevice<JitEngineDeviceHIP> {
30public:
32
33 static const SmallVector<StringRef> gridDimXFnName() {
34 return {"_ZNK17__HIP_CoordinatesI13__HIP_GridDimE3__XcvjEv",
35 "llvm.amdgcn.num.workgroups.x"};
36 };
37
38 static const SmallVector<StringRef> gridDimYFnName() {
39 return {"_ZNK17__HIP_CoordinatesI13__HIP_GridDimE3__YcvjEv",
40 "llvm.amdgcn.num.workgroups.y"};
41 };
42
43 static const SmallVector<StringRef> gridDimZFnName() {
44 return {"_ZNK17__HIP_CoordinatesI13__HIP_GridDimE3__ZcvjEv",
45 "llvm.amdgcn.num.workgroups.z"};
46 };
47
48 static const SmallVector<StringRef> blockDimXFnName() {
49 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockDimE3__XcvjEv",
50 "llvm.amdgcn.workgroup.size.x"};
51 };
52
53 static const SmallVector<StringRef> blockDimYFnName() {
54 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockDimE3__YcvjEv",
55 "llvm.amdgcn.workgroup.size.y"};
56 }
57
58 static const SmallVector<StringRef> blockDimZFnName() {
59 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockDimE3__ZcvjEv",
60 "llvm.amdgcn.workgroup.size.z"};
61 };
62
63 static const SmallVector<StringRef> blockIdxXFnName() {
64 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockIdxE3__XcvjEv",
65 "llvm.amdgcn.workgroup.id.x"};
66 };
67
68 static const SmallVector<StringRef> blockIdxYFnName() {
69 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockIdxE3__YcvjEv",
70 "llvm.amdgcn.workgroup.id.y"};
71 };
72
73 static const SmallVector<StringRef> blockIdxZFnName() {
74 return {"_ZNK17__HIP_CoordinatesI14__HIP_BlockIdxE3__ZcvjEv",
75 "llvm.amdgcn.workgroup.id.z"};
76 }
77
78 static const SmallVector<StringRef> threadIdxXFnName() {
79 return {"_ZNK17__HIP_CoordinatesI15__HIP_ThreadIdxE3__XcvjEv",
80 "llvm.amdgcn.workitem.id.x"};
81 };
82
83 static const SmallVector<StringRef> threadIdxYFnName() {
84 return {"_ZNK17__HIP_CoordinatesI15__HIP_ThreadIdxE3__YcvjEv",
85 "llvm.amdgcn.workitem.id.y"};
86 };
87
88 static const SmallVector<StringRef> threadIdxZFnName() {
89 return {"_ZNK17__HIP_CoordinatesI15__HIP_ThreadIdxE3__ZcvjEv",
90 "llvm.amdgcn.workitem.id.z"};
91 };
92
93 void setKernelDims(Module &M, dim3 &GridDim, dim3 &BlockDim);
94
95 void extractModules(BinaryInfo &BinInfo);
96
97 std::unique_ptr<Module> tryExtractKernelModule(BinaryInfo &BinInfo,
98 StringRef KernelName,
99 LLVMContext &Ctx);
100
102
103 std::unique_ptr<MemoryBuffer> compileOnly(Module &M,
104 bool DisableIROpt = false);
105
106private:
110};
111
112} // namespace proteus
113
114#endif
void char * KernelName
Definition CompilerInterfaceDevice.cpp:59
Definition JitEngineDevice.h:81
Definition Hashing.h:22
Definition JitEngineDeviceHIP.h:29
static const SmallVector< StringRef > blockIdxXFnName()
Definition JitEngineDeviceHIP.h:63
void setKernelDims(Module &M, dim3 &GridDim, dim3 &BlockDim)
static const SmallVector< StringRef > threadIdxYFnName()
Definition JitEngineDeviceHIP.h:83
static const SmallVector< StringRef > threadIdxXFnName()
Definition JitEngineDeviceHIP.h:78
void extractModules(BinaryInfo &BinInfo)
Definition JitEngineDeviceHIP.cpp:309
static const SmallVector< StringRef > blockDimXFnName()
Definition JitEngineDeviceHIP.h:48
static const SmallVector< StringRef > threadIdxZFnName()
Definition JitEngineDeviceHIP.h:88
static const SmallVector< StringRef > blockDimZFnName()
Definition JitEngineDeviceHIP.h:58
static const SmallVector< StringRef > blockIdxYFnName()
Definition JitEngineDeviceHIP.h:68
static const SmallVector< StringRef > gridDimXFnName()
Definition JitEngineDeviceHIP.h:33
std::unique_ptr< Module > tryExtractKernelModule(BinaryInfo &BinInfo, StringRef KernelName, LLVMContext &Ctx)
Definition JitEngineDeviceHIP.cpp:252
static const SmallVector< StringRef > blockIdxZFnName()
Definition JitEngineDeviceHIP.h:73
static const SmallVector< StringRef > gridDimYFnName()
Definition JitEngineDeviceHIP.h:38
static const SmallVector< StringRef > gridDimZFnName()
Definition JitEngineDeviceHIP.h:43
std::unique_ptr< MemoryBuffer > compileOnly(Module &M, bool DisableIROpt=false)
Definition JitEngineDeviceHIP.cpp:376
static JitEngineDeviceHIP & instance()
Definition JitEngineDeviceHIP.cpp:29
static const SmallVector< StringRef > blockDimYFnName()
Definition JitEngineDeviceHIP.h:53
HashT getModuleHash(BinaryInfo &BinInfo)
Definition JitEngineDeviceHIP.cpp:196
Definition JitEngineDevice.h:281
Definition CompiledLibrary.h:7
Definition MemoryCache.h:27
hipFunction_t KernelFunction_t
Definition JitEngineDeviceHIP.h:26
hipError_t DeviceError_t
Definition JitEngineDeviceHIP.h:24
hipStream_t DeviceStream_t
Definition JitEngineDeviceHIP.h:25
Definition JitEngineDevice.h:279