Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
JitEngineInfoRegistry.h
Go to the documentation of this file.
1//===-- JitEngineInfoRegistry.h -- JIT engine info registry --===//
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// Registry for JIT engine information: tracks registered fat binaries,
9// linked binaries, functions, and variables used by Proteus JIT engines.
10//===----------------------------------------------------------------------===//
11
12#ifndef PROTEUS_JIT_ENGINE_INFO_REGISTRY_H
13#define PROTEUS_JIT_ENGINE_INFO_REGISTRY_H
14
16
17#include <llvm/ADT/SmallVector.h>
18
19#include <cstdint>
20#include <unordered_map>
21
22namespace proteus {
23
25 void *Handle;
26 const void *HostAddr;
27 const char *VarName;
28 uint64_t VarSize;
29};
30
33 const char *ModuleId;
34};
35
37 void *Handle;
38 void *Kernel;
40 ArrayRef<RuntimeConstantInfo *> RCInfoArray;
41};
42
44 void *Handle;
46 const char *ModuleId;
47
48 SmallVector<RegisterVarInfo> Vars;
49 SmallVector<RegisterLinkedBinaryInfo> LinkedBinaries;
50 SmallVector<RegisterFunctionInfo> Functions;
51
54};
55
57public:
59 static JitEngineInfoRegistry Instance;
60 return Instance;
61 }
62
63 std::unordered_map<void *, RegisterFatBinaryInfo> FatbinaryMap;
64 SmallVector<RegisterLinkedBinaryInfo> RegisteredLinkedBinaries;
65
66 void registerFatBinary(void *Handle, void *FatbinWrapper,
67 const char *ModuleId) {
68 FatbinaryMap.emplace(
70 }
71
72 // Register linked binary is CUDA specific.
76
77 void registerFunction(void *Handle, void *Kernel, char *KernelName,
78 ArrayRef<RuntimeConstantInfo *> RCInfoArray) {
79 auto &FatbinInfo = FatbinaryMap.at(Handle);
80 FatbinInfo.Functions.push_back({Handle, Kernel, KernelName, RCInfoArray});
81 }
82
83 void registerVar(void *Handle, const void *HostAddr, const char *VarName,
84 uint64_t VarSize) {
85 auto &FatbinInfo = FatbinaryMap.at(Handle);
86 FatbinInfo.Vars.push_back({Handle, HostAddr, VarName, VarSize});
87 }
88
89 void registerFatBinaryEnd(void *Handle) {
90 // CUDA specific: associate any registered linked binary with this fat
91 // binary.
92 auto &FatbinInfo = FatbinaryMap.at(Handle);
93 FatbinInfo.LinkedBinaries = RegisteredLinkedBinaries;
95 }
96
97private:
98 JitEngineInfoRegistry() = default;
99};
100
101} // namespace proteus
102
103#endif
void const char * ModuleId
Definition CompilerInterfaceDevice.cpp:36
void * FatbinWrapper
Definition CompilerInterfaceDevice.cpp:35
const void const char * VarName
Definition CompilerInterfaceDevice.cpp:24
void char * KernelName
Definition CompilerInterfaceDevice.cpp:54
void * Kernel
Definition CompilerInterfaceDevice.cpp:54
const void const char uint64_t VarSize
Definition CompilerInterfaceDevice.cpp:25
const void * HostAddr
Definition CompilerInterfaceDevice.cpp:23
ArrayRef< RuntimeConstantInfo * > RCInfoArray
Definition CompilerInterfaceHost.cpp:26
Definition JitEngineInfoRegistry.h:56
void registerFunction(void *Handle, void *Kernel, char *KernelName, ArrayRef< RuntimeConstantInfo * > RCInfoArray)
Definition JitEngineInfoRegistry.h:77
std::unordered_map< void *, RegisterFatBinaryInfo > FatbinaryMap
Definition JitEngineInfoRegistry.h:63
void registerVar(void *Handle, const void *HostAddr, const char *VarName, uint64_t VarSize)
Definition JitEngineInfoRegistry.h:83
static JitEngineInfoRegistry & instance()
Definition JitEngineInfoRegistry.h:58
void registerFatBinaryEnd(void *Handle)
Definition JitEngineInfoRegistry.h:89
void registerFatBinary(void *Handle, void *FatbinWrapper, const char *ModuleId)
Definition JitEngineInfoRegistry.h:66
void registerLinkedBinary(void *FatbinWrapper, const char *ModuleId)
Definition JitEngineInfoRegistry.h:73
SmallVector< RegisterLinkedBinaryInfo > RegisteredLinkedBinaries
Definition JitEngineInfoRegistry.h:64
Definition MemoryCache.h:26
Definition JitEngineInfoRegistry.h:43
SmallVector< RegisterVarInfo > Vars
Definition JitEngineInfoRegistry.h:48
SmallVector< RegisterLinkedBinaryInfo > LinkedBinaries
Definition JitEngineInfoRegistry.h:49
RegisterFatBinaryInfo(void *Handle, void *FatbinWrapper, const char *ModuleId)
Definition JitEngineInfoRegistry.h:52
const char * ModuleId
Definition JitEngineInfoRegistry.h:46
void * Handle
Definition JitEngineInfoRegistry.h:44
void * FatbinWrapper
Definition JitEngineInfoRegistry.h:45
SmallVector< RegisterFunctionInfo > Functions
Definition JitEngineInfoRegistry.h:50
Definition JitEngineInfoRegistry.h:36
ArrayRef< RuntimeConstantInfo * > RCInfoArray
Definition JitEngineInfoRegistry.h:40
char * KernelName
Definition JitEngineInfoRegistry.h:39
void * Handle
Definition JitEngineInfoRegistry.h:37
void * Kernel
Definition JitEngineInfoRegistry.h:38
Definition JitEngineInfoRegistry.h:31
const char * ModuleId
Definition JitEngineInfoRegistry.h:33
void * FatbinWrapper
Definition JitEngineInfoRegistry.h:32
Definition JitEngineInfoRegistry.h:24
uint64_t VarSize
Definition JitEngineInfoRegistry.h:28
void * Handle
Definition JitEngineInfoRegistry.h:25
const char * VarName
Definition JitEngineInfoRegistry.h:27
const void * HostAddr
Definition JitEngineInfoRegistry.h:26