42 #include "debug/CacheComp.hh"
43 #include "params/MultiCompressor.hh"
52 std::unique_ptr<Base::CompressionData> comp_data)
85 compressor->setCache(_cache);
89 std::unique_ptr<Base::CompressionData>
96 std::unique_ptr<Base::CompressionData> compData;
98 uint8_t compressionFactor;
100 Results(
unsigned index,
101 std::unique_ptr<Base::CompressionData> comp_data,
102 Cycles decomp_lat, std::size_t blk_size)
103 :
index(
index), compData(std::move(comp_data)),
104 decompLat(decomp_lat)
106 const std::size_t size = compData->getSize();
116 compressionFactor = (size > blk_size) ? 1 :
117 ((size == 0) ? blk_size :
121 struct ResultsComparator
124 operator()(
const std::shared_ptr<Results>& lhs,
125 const std::shared_ptr<Results>& rhs)
const
127 const std::size_t lhs_cf = lhs->compressionFactor;
128 const std::size_t rhs_cf = rhs->compressionFactor;
130 if (lhs_cf == rhs_cf) {
133 return lhs->decompLat > rhs->decompLat;
135 return lhs_cf < rhs_cf;
146 std::priority_queue<std::shared_ptr<Results>,
151 auto temp_comp_data =
153 temp_comp_data->setSizeBits(temp_comp_data->getSizeBits() +
155 results.push(std::make_shared<Results>(
i, std::move(temp_comp_data),
157 max_comp_lat = std::max(max_comp_lat, comp_lat);
161 const unsigned best_index = results.top()->index;
162 std::unique_ptr<CompressionData> multi_comp_data =
163 std::unique_ptr<MultiCompData>(
164 new MultiCompData(best_index, std::move(results.top()->compData)));
165 DPRINTF(CacheComp,
"Best compressor: %d\n", best_index);
171 for (
int rank = 0; rank <
compressors.size(); rank++) {
180 return multi_comp_data;
185 uint64_t* cache_line)
190 casted_comp_data->
compData.get(), cache_line);
194 : statistics::
Group(&base_group), compressor(_compressor),
196 "Number of times each compressor had the nth best compression")
205 const std::size_t num_compressors = compressor.compressors.size();
206 ranks.init(num_compressors, num_compressors);
207 for (
unsigned compressor = 0; compressor < num_compressors; compressor++) {
209 ranks.subdesc(compressor,
"Number of times compressor " +
211 for (
unsigned rank = 0; rank < num_compressors; rank++) {