Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
CoreDeviceHIP.hpp
Go to the documentation of this file.
1#ifndef CORE_HIP_HPP
2#define CORE_HIP_HPP
3
4#include <unordered_map>
5
6#include <llvm/ADT/StringRef.h>
7
8#include "proteus/Error.h"
10#include "proteus/UtilsHIP.h"
11
12// NOTE: HIP_SYMBOL is defined only if HIP compilation is enabled (-x hip),
13// although it shouldn't be necessary since HIP RTC can JIT compile code. Also,
14// HIP_SYMBOL is defined differently depending on whether ROCm compiles for AMD
15// or NVIDIA. We repeat the AMD definition here for non-HIP compilation.
16#ifndef HIP_SYMBOL
17#define HIP_SYMBOL(x) x
18#endif
19
20namespace proteus {
21
22using namespace llvm;
23
24inline void *resolveDeviceGlobalAddr(const void *Addr) {
25 void *DevPtr = nullptr;
27 assert(DevPtr && "Expected non-null device pointer for global");
28
29 return DevPtr;
30}
31
33 dim3 BlockDim, void **KernelArgs,
35 return hipLaunchKernel(KernelFunc, GridDim, BlockDim, KernelArgs, ShmemSize,
36 Stream);
37}
38
40 StringRef KernelName, const void *Image, bool RelinkGlobalsByCopy,
41 const std::unordered_map<std::string, GlobalVarInfo> &VarNameToGlobalInfo) {
44
46 if (RelinkGlobalsByCopy) {
47 for (auto &[GlobalName, GVI] : VarNameToGlobalInfo) {
48 if (!GVI.DevAddr)
49 PROTEUS_FATAL_ERROR("Cannot copy to Global Var " + GlobalName +
50 " without a concrete device address");
51
53 size_t Bytes;
55 (GlobalName + "$ptr").c_str()));
56
57 uint64_t PtrVal = (uint64_t)GVI.DevAddr;
59 }
60 }
63
64 return KernelFunc;
65}
66
68 dim3 BlockDim, void **KernelArgs,
70 return hipModuleLaunchKernel(KernelFunc, GridDim.x, GridDim.y, GridDim.z,
71 BlockDim.x, BlockDim.y, BlockDim.z, ShmemSize,
72 Stream, KernelArgs, nullptr);
73}
74
75} // namespace proteus
76
77#endif
void char * KernelName
Definition CompilerInterfaceDevice.cpp:52
#define HIP_SYMBOL(x)
Definition CoreDeviceHIP.hpp:17
#define PROTEUS_FATAL_ERROR(x)
Definition Error.h:7
#define proteusHipErrCheck(CALL)
Definition UtilsHIP.h:18
Definition Helpers.h:142
Definition ObjectCacheChain.cpp:25
cudaError_t launchKernelDirect(void *KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
Definition CoreDeviceCUDA.hpp:21
T getRuntimeConstantValue(void *Arg)
Definition CompilerInterfaceRuntimeConstantInfo.h:114
cudaError_t launchKernelFunction(CUfunction KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
Definition CoreDeviceCUDA.hpp:56
void * resolveDeviceGlobalAddr(const void *Addr)
Definition CoreDeviceCUDA.hpp:13
CUfunction getKernelFunctionFromImage(StringRef KernelName, const void *Image, bool RelinkGlobalsByCopy, const std::unordered_map< std::string, GlobalVarInfo > &VarNameToGlobalInfo)
Definition CoreDeviceCUDA.hpp:28