42 #include "debug/CacheComp.hh"
43 #include "params/MultiCompressor.hh"
48 std::unique_ptr<Base::CompressionData> comp_data)
81 compressor->setCache(_cache);
85 std::unique_ptr<Base::CompressionData>
92 std::unique_ptr<Base::CompressionData> compData;
94 uint8_t compressionFactor;
96 Results(
unsigned index,
97 std::unique_ptr<Base::CompressionData> comp_data,
98 Cycles decomp_lat, std::size_t blk_size)
99 :
index(
index), compData(std::move(comp_data)),
100 decompLat(decomp_lat)
102 const std::size_t size = compData->getSize();
112 compressionFactor = (size > blk_size) ? 1 :
113 ((size == 0) ? blk_size :
117 struct ResultsComparator
120 operator()(
const std::shared_ptr<Results>& lhs,
121 const std::shared_ptr<Results>& rhs)
const
123 const std::size_t lhs_cf = lhs->compressionFactor;
124 const std::size_t rhs_cf = rhs->compressionFactor;
126 if (lhs_cf == rhs_cf) {
129 return lhs->decompLat > rhs->decompLat;
131 return lhs_cf < rhs_cf;
142 std::priority_queue<std::shared_ptr<Results>,
147 auto temp_comp_data =
149 temp_comp_data->setSizeBits(temp_comp_data->getSizeBits() +
151 results.push(std::make_shared<Results>(
i, std::move(temp_comp_data),
153 max_comp_lat = std::max(max_comp_lat, comp_lat);
157 const unsigned best_index = results.top()->index;
158 std::unique_ptr<CompressionData> multi_comp_data =
159 std::unique_ptr<MultiCompData>(
160 new MultiCompData(best_index, std::move(results.top()->compData)));
161 DPRINTF(CacheComp,
"Best compressor: %d\n", best_index);
167 for (
int rank = 0; rank <
compressors.size(); rank++) {
176 return multi_comp_data;
181 uint64_t* cache_line)
186 casted_comp_data->
compData.get(), cache_line);
190 :
Stats::Group(&base_group), compressor(_compressor),
192 "Number of times each compressor had the nth best compression")
201 const std::size_t num_compressors = compressor.compressors.size();
202 ranks.init(num_compressors, num_compressors);
203 for (
unsigned compressor = 0; compressor < num_compressors; compressor++) {
205 ranks.subdesc(compressor,
"Number of times compressor " +
207 for (
unsigned rank = 0; rank < num_compressors; rank++) {