Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
DispatcherHost.h
Go to the documentation of this file.
1#ifndef PROTEUS_FRONTEND_DISPATCHER_HOST_H
2#define PROTEUS_FRONTEND_DISPATCHER_HOST_H
3
11
12namespace proteus {
13
14class DispatcherHost : public Dispatcher {
15public:
17 static DispatcherHost D{"DispatcherHost", JitEngineHost::instance()};
18 return D;
19 }
20
21 DispatcherHost(const std::string &Label, JitEngineHost &Jit)
22 : Dispatcher(Label, TargetModelType::HOST), Jit(Jit), CodeCache(Label) {}
23
24 std::unique_ptr<MemoryBuffer>
25 compileModule(Module &M, const CodeGenerationConfig &CGConfig) override {
27 return Jit.compileOnly(M, CGConfig);
28 }
29
30 DispatchResult launch(void *, LaunchDims, LaunchDims, void *[], uint64_t,
31 void *) override {
32 reportFatalError("Host does not support launch");
33 }
34
35 StringRef getDeviceArch() const override {
36 reportFatalError("Host dispatcher does not implement getDeviceArch");
37 }
38
39 void *lookupFunction(StringRef BaseName, const HashT &ModuleHash) override {
40 HashT FuncHash = hash(BaseName, ModuleHash);
41 return CodeCache.lookup(FuncHash);
42 }
43
44 void *insertFunction(const KernelName &Name, const HashT &ModuleHash,
45 CompiledLibrary &Library) override {
47 const std::string MangledName = Name.mangled();
48 HashT FuncHash = hash(StringRef(Name.base()), ModuleHash);
49
50 if (!Library.IsLoaded) {
51 Jit.loadCompiledLibrary(Library);
52 Library.IsLoaded = true;
53 }
54
55 void *FuncAddr = Jit.getFunctionAddress(MangledName, Library);
56 if (!FuncAddr)
57 reportFatalError("Failed to find address for function " + MangledName);
58
59 CodeCache.insert(FuncHash, FuncAddr, Name.base());
60
61 return FuncAddr;
62 }
63
64 void registerDynamicLibrary(const HashT &HashValue,
65 const std::string &Path) override {
66 auto Buf = MemoryBuffer::getFileAsStream(Path);
67 if (!Buf)
68 reportFatalError("Failed to read dynamic library: " + Path);
69 ObjectCache->store(HashValue,
70 CacheEntry::sharedObject((*Buf)->getMemBufferRef()));
71 }
72
74 if (Config::get().traceCacheStats())
75 CodeCache.printStats();
76 CodeCache.printKernelTrace();
78 }
79
80protected:
81 explicit DispatcherHost(const std::string &Label, JitEngineHost &Jit,
83 : Dispatcher(Label, TM), Jit(Jit), CodeCache(Label) {}
84
85private:
86 JitEngineHost &Jit;
87 MemoryCache<void *> CodeCache;
88};
89
90} // namespace proteus
91
92#endif // PROTEUS_FRONTEND_DISPATCHER_HOST_H
#define TIMESCOPE(...)
Definition TimeTracing.h:66
Definition Config.h:167
static Config & get()
Definition Config.h:371
Definition DispatcherHost.h:14
std::unique_ptr< MemoryBuffer > compileModule(Module &M, const CodeGenerationConfig &CGConfig) override
Definition DispatcherHost.h:25
static DispatcherHost & instance()
Definition DispatcherHost.h:16
void * lookupFunction(StringRef BaseName, const HashT &ModuleHash) override
Definition DispatcherHost.h:39
StringRef getDeviceArch() const override
Definition DispatcherHost.h:35
DispatchResult launch(void *, LaunchDims, LaunchDims, void *[], uint64_t, void *) override
Definition DispatcherHost.h:30
void * insertFunction(const KernelName &Name, const HashT &ModuleHash, CompiledLibrary &Library) override
Definition DispatcherHost.h:44
DispatcherHost(const std::string &Label, JitEngineHost &Jit)
Definition DispatcherHost.h:21
~DispatcherHost()
Definition DispatcherHost.h:73
DispatcherHost(const std::string &Label, JitEngineHost &Jit, TargetModelType TM)
Definition DispatcherHost.h:81
void registerDynamicLibrary(const HashT &HashValue, const std::string &Path) override
Definition DispatcherHost.h:64
Definition Dispatcher.h:79
const std::string Label
Definition Dispatcher.h:82
void printObjectCacheStats()
Definition Dispatcher.cpp:83
Definition Hashing.h:27
Definition JitEngineHost.h:34
std::unique_ptr< MemoryBuffer > compileOnly(Module &M, const CodeGenerationConfig &CGConfig)
Definition JitEngineHost.cpp:282
void loadCompiledLibrary(CompiledLibrary &Library)
Definition JitEngineHost.cpp:314
void * getFunctionAddress(StringRef FnName, CompiledLibrary &Library)
Definition JitEngineHost.cpp:350
static JitEngineHost & instance()
Definition JitEngineHost.cpp:64
Definition KernelName.h:18
const std::string & base() const
Definition KernelName.h:30
std::string mangled() const
Definition KernelName.h:36
Definition MemoryCache.h:31
void printStats()
Definition MemoryCache.h:62
void insert(HashT &HashValue, Function_t FunctionPtr, StringRef FnName)
Definition MemoryCache.h:49
void printKernelTrace()
Definition MemoryCache.h:76
Function_t lookup(HashT &HashValue)
Definition MemoryCache.h:35
Definition ObjectCache.h:39
virtual void store(const HashT &HashValue, const CacheEntry &Entry)=0
Definition MemoryCache.h:27
TargetModelType
Definition TargetModel.h:8
HashT hash(FirstT &&First, RestTs &&...Rest)
Definition Hashing.h:268
void reportFatalError(const llvm::Twine &Reason, const char *FILE, unsigned Line)
Definition Error.cpp:14
Definition Dispatcher.h:25
static CacheEntry sharedObject(MemoryBufferRef Buf)
Definition ObjectCache.h:33
Definition CompiledLibrary.h:21
bool IsLoaded
Definition CompiledLibrary.h:27
Definition Dispatcher.h:57