11#ifndef PROTEUS_JITCACHE_HPP
12#define PROTEUS_JITCACHE_HPP
17#include <llvm/ADT/StringRef.h>
35 auto It = CacheMap.find(HashValue);
36 if (It == CacheMap.end())
39 It->second.NumExecs++;
42 return It->second.FunctionPtr;
45 void insert(
HashT &HashValue, Function_t FunctionPtr, StringRef FnName) {
47 if (CacheMap.count(HashValue))
51 auto &CacheEntry = CacheMap[HashValue];
52 CacheEntry.FunctionPtr = FunctionPtr;
53 CacheEntry.NumExecs = 1;
54 CacheEntry.NumHits = 0;
57 CacheEntry.FnName = FnName.str();
62 printf(
"[proteus][%s] MemoryCache rank %s hits %lu accesses %lu\n",
63 Label.c_str(), DistributedRank.c_str(), Hits, Accesses);
64 for (
const auto &[HashValue, JCE] : CacheMap) {
65 std::cout <<
"[proteus][" << Label <<
"] MemoryCache rank "
66 << DistributedRank <<
" HashValue " << HashValue.toString()
67 <<
" NumExecs " << JCE.NumExecs <<
" NumHits " << JCE.NumHits;
69 printf(
" FnName %s", JCE.FnName.c_str());
76 struct MemoryCacheEntry {
77 Function_t FunctionPtr;
83 std::unordered_map<HashT, MemoryCacheEntry> CacheMap;
85 uint64_t Accesses = 0;
86 const std::string Label;
87 const std::string DistributedRank;
#define PROTEUS_FATAL_ERROR(x)
Definition Error.h:7
#define TIMESCOPE(x)
Definition TimeTracing.hpp:64
std::string getDistributedRank()
Definition Utils.h:32
static Config & get()
Definition Config.hpp:298
bool ProteusDebugOutput
Definition Config.hpp:314
Definition Hashing.hpp:20
Definition MemoryCache.hpp:27
void printStats()
Definition MemoryCache.hpp:61
void insert(HashT &HashValue, Function_t FunctionPtr, StringRef FnName)
Definition MemoryCache.hpp:45
MemoryCache(const std::string &Label)
Definition MemoryCache.hpp:29
Function_t lookup(HashT &HashValue)
Definition MemoryCache.hpp:31
Definition StorageCache.cpp:24