23 std::optional<EMPTY_META_INFO> meta_info) {
32 key, item_type, device_identifier, *param_cache, lock);
34 CHECK(!cached_param->isDirty());
35 VLOG(1) <<
"[" << item_type <<
", "
37 <<
"] Recycle auto tuner parameters in cache (key: " << key <<
")";
38 return cached_param->cached_item;
45 std::optional<AutoTunerMetaInfo> item,
50 std::optional<EMPTY_META_INFO> meta_info) {
59 key, item_type, device_identifier, *param_cache, lock);
63 param_cache->emplace_back(key, item,
nullptr, meta_info);
64 VLOG(1) <<
"[" << item_type <<
", "
66 <<
"] Put auto tuner parameters to cache (key: " << key <<
")";
74 std::lock_guard<std::mutex>& lock,
75 std::optional<EMPTY_META_INFO> meta_info)
const {
82 auto candidate_it = std::find_if(
83 param_cache->begin(), param_cache->end(), [&key](
const auto& cached_item) {
84 return cached_item.key == key;
86 return candidate_it != param_cache->end();
93 std::lock_guard<std::mutex>& lock,
94 std::optional<EMPTY_META_INFO> meta_info) {
96 auto filter = [key](
auto const& item) {
return item.key == key; };
97 auto itr = std::find_if(param_cache->cbegin(), param_cache->cend(), filter);
98 if (itr == param_cache->cend()) {
101 VLOG(1) <<
"[" << item_type <<
", "
103 <<
"] remove cached item from cache (key: " << key <<
")";
104 param_cache->erase(itr);
112 if (!param_cache->empty()) {
115 <<
"] clear cache (# items: " << param_cache->size() <<
")";
116 param_cache->clear();
122 std::unordered_set<QueryPlanHash>& key_set,
131 for (
auto key : key_set) {
137 std::ostringstream oss;
138 oss <<
"A current status of the Overlaps Join Hashtable Tuning Parameter Recycler:\n";
139 oss <<
"\t# cached parameters:\n";
142 PARAM_CACHE_DEVICE_IDENTIFIER);
143 for (
auto& cache_container : *param_cache) {
144 oss <<
"\t\t\tCache_key: " << cache_container.key;
145 if (cache_container.cached_item.has_value()) {
146 oss <<
", Max_hashtable_size: " << cache_container.cached_item->max_hashtable_size
147 <<
", Bucket_threshold: " << cache_container.cached_item->bucket_threshold
148 <<
", Bucket_sizes: " <<
::toString(cache_container.cached_item->bucket_sizes)
151 oss <<
", Params info is not available\n";
std::mutex & getCacheLock() const
static std::string getDeviceIdentifierString(DeviceIdentifier device_identifier)
void removeItemFromCache(QueryPlanHash key, CacheItemType item_type, DeviceIdentifier device_identifier, std::lock_guard< std::mutex > &lock, std::optional< EMPTY_META_INFO > meta_info=std::nullopt) override
std::optional< CachedItem< std::optional< AutoTunerMetaInfo >, EMPTY_META_INFO > > getCachedItemWithoutConsideringMetaInfo(QueryPlanHash key, CacheItemType item_type, DeviceIdentifier device_identifier, CachedItemContainer &m, std::lock_guard< std::mutex > &lock)
bool hasItemInCache(QueryPlanHash key, CacheItemType item_type, DeviceIdentifier device_identifier, std::lock_guard< std::mutex > &lock, std::optional< EMPTY_META_INFO > meta_info=std::nullopt) const override
constexpr QueryPlanHash EMPTY_HASHED_PLAN_DAG_KEY
std::shared_ptr< CachedItemContainer > getCachedItemContainer(CacheItemType item_type, DeviceIdentifier device_identifier) const
void markCachedItemAsDirtyImpl(QueryPlanHash key, CachedItemContainer &m) const
bool g_enable_data_recycler
void markCachedItemAsDirty(size_t table_key, std::unordered_set< QueryPlanHash > &key_set, CacheItemType item_type, DeviceIdentifier device_identifier) override
void clearCache() override
constexpr DeviceIdentifier PARAM_CACHE_DEVICE_IDENTIFIER
virtual std::optional< AutoTunerMetaInfo > getItemFromCache(QueryPlanHash key, CacheItemType item_type, DeviceIdentifier device_identifier, std::optional< EMPTY_META_INFO > meta_info=std::nullopt)=0
std::string toString() const override
bool g_use_hashtable_cache
void putItemToCache(QueryPlanHash key, std::optional< AutoTunerMetaInfo > item, CacheItemType item_type, DeviceIdentifier device_identifier, size_t item_size, size_t compute_time, std::optional< EMPTY_META_INFO > meta_info=std::nullopt) override