16#ifndef RANS_INTERNAL_METRICS_SIZEESTIMATE_H_
17#define RANS_INTERNAL_METRICS_SIZEESTIMATE_H_
22#include <fairlogger/Logger.h>
33template <CoderTag tag_V = defaults::DefaultTag, size_t lowerBound_V = defaults::CoderPreset<tag_V>::renormingLowerBound>
38 constexpr size_t minSize = nStreams *
sizeof(state_type);
39 constexpr size_t overhead =
utils::toBytes(lowerBound_V * nStreams);
41 return std::max(minSize, sizeB + overhead);
44template <
typename source_T>
52 template <
typename source_T>
56 template <
typename T = u
int8_t>
58 template <
typename T = u
int8_t>
60 template <
typename T = u
int8_t>
62 template <
typename T = u
int8_t>
68 size_t mEntropySizeB{};
69 size_t mCompressedDatasetSizeB{};
70 size_t mCompressedDictionarySizeB{};
71 size_t mIncompressibleSizeB{};
72 size_t mPackedDatasetSizeB{};
75template <
typename source_T>
78 const auto& datasetProperties =
metrics.getDatasetProperties();
79 const auto& coderProperties =
metrics.getCoderProperties();
80 const auto& nSamples = datasetProperties.numSamples;
83 mEntropySizeB =
utils::toBytes(datasetProperties.entropy * nSamples);
84 mCompressedDatasetSizeB = addEncoderOverheadEstimateB<>(mEntropySizeB);
85 mCompressedDictionarySizeB = coderProperties.dictSizeEstimate.getSizeB(datasetProperties.nUsedAlphabetSymbols,
86 *coderProperties.renormingPrecisionBits);
87 mIncompressibleSizeB =
utils::toBytes(datasetProperties.alphabetRangeBits * (*coderProperties.nIncompressibleSamples));
88 mPackedDatasetSizeB =
utils::toBytes(datasetProperties.alphabetRangeBits * nSamples);
92 mCompressedDatasetSizeB = 0;
93 mCompressedDictionarySizeB = 0;
94 mIncompressibleSizeB = 0;
95 mPackedDatasetSizeB = 0;
101 return mEntropySizeB;
107 return utils::nBytesTo<T>(std::ceil(mCompressedDatasetSizeB * safetyFactor));
113 constexpr size_t MaxOverhead = 8;
114 return utils::nBytesTo<T>(std::ceil(mCompressedDictionarySizeB * safetyFactor) + MaxOverhead);
120 return utils::nBytesTo<T>(std::ceil(mIncompressibleSizeB * safetyFactor));
126 return utils::nBytesTo<T>(std::ceil(mPackedDatasetSizeB * safetyFactor));
132 return (mPackedDatasetSizeB *
weight) <= (mCompressedDatasetSizeB +
133 mCompressedDictionarySizeB +
134 mIncompressibleSizeB);
Computes and provides essential metrics on the dataset used for parameter and size estimates by other...
common helper classes and functions
size_t getEntropySizeB() const
size_t getIncompressibleSize(double_t safetyFactor=1.2) const
size_t getCompressedDatasetSize(double_t safetyFactor=1.2) const
bool preferPacking(double_t weight=1) const
size_t getCompressedDictionarySize(double_t safetyFactor=2) const
size_t getPackedDatasetSize(double_t safetyFactor=1) const
sane compile time defaults for encoders/decoders
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLuint GLuint GLfloat weight
typename CoderTraits< tag_V >::template type< lowerBound_V > CoderTraits_t
constexpr size_t toBytes(size_t bits) noexcept
constexpr size_t addEncoderOverheadEstimateB(size_t sizeB) noexcept
manipulation of types at compile time