22#ifdef RANS_PARALLEL_STL
27#include <benchmark/benchmark.h>
32#ifdef ENABLE_VTUNE_PROFILER
42template <
typename source_T>
49 std::uniform_int_distribution<source_T> dist(0,
max);
50 const size_t sourceSize = messageSize /
sizeof(
source_T) + 1;
51 mSourceMessage.resize(sourceSize);
52#ifdef RANS_PARALLEL_STL
53 std::generate(std::execution::par_unseq, mSourceMessage.begin(), mSourceMessage.end(), [&dist, &mt]() { return dist(mt); });
55 std::generate(mSourceMessage.begin(), mSourceMessage.end(), [&dist, &mt]() { return dist(mt); });
59 const auto&
get()
const {
return mSourceMessage; };
60 size_t getMax()
const {
return mMax; };
64 std::vector<source_T> mSourceMessage{};
73 size_t max = utils::pow2(
st.range(0));
85 const auto renormedHistogram =
renorm(histogram,
metrics, RenormingPolicy::Auto, 10);
91#ifdef ENABLE_VTUNE_PROFILER
95 decoder.process(encodeBuffer.encodeBufferEnd,
decodeBuffer.buffer.data(),
inputData.size(), encoder.getNStreams());
97#ifdef ENABLE_VTUNE_PROFILER
102 st.SkipWithError(
"Missmatch between encoded and decoded Message");
105 const auto& datasetProperties =
metrics.getDatasetProperties();
106 st.SetItemsProcessed(
static_cast<int64_t
>(
inputData.size()) *
static_cast<int64_t
>(
st.iterations()));
107 st.SetBytesProcessed(
static_cast<int64_t
>(
inputData.size()) *
sizeof(
source_type) *
static_cast<int64_t
>(
st.iterations()));
108 st.counters[
"AlphabetRangeBits"] = datasetProperties.alphabetRangeBits;
109 st.counters[
"nUsedAlphabetSymbols"] = datasetProperties.nUsedAlphabetSymbols;
110 st.counters[
"SymbolTablePrecision"] = renormedHistogram.getRenormingBits();
111 st.counters[
"Entropy"] = datasetProperties.entropy;
114 st.counters[
"CompressedSize"] = std::distance(encodeBuffer.buffer.data(), encodeBuffer.encodeBufferEnd) *
sizeof(
typename decltype(encoder)
::stream_type);
115 st.counters[
"Compression"] =
st.counters[
"SourceSize"] /
static_cast<double>(
st.counters[
"CompressedSize"]);
116 st.counters[
"LowerBound"] =
inputData.size() * (
static_cast<double>(
st.counters[
"Entropy"]) / 8);
117 st.counters[
"CompressionWRTEntropy"] =
st.counters[
"CompressedSize"] /
st.counters[
"LowerBound"];
std::vector< o2::mid::ColumnData > inputData
constexpr size_t MessageSize
void ransDecodeBenchmark(benchmark::State &st)
SourceMessageUniform< uint32_t > sourceMessage
BENCHMARK(ransDecodeBenchmark) -> DenseRange(8, 27, 1)
static constexpr decltype(auto) fromRenormed(const RenormedHistogramConcept< container_T > &renormed)
static constexpr decltype(auto) fromRenormed(const RenormedDenseHistogram< source_T > &renormed)
preprocessor defines to enable features based on CPU architecture
static factory classes for building histograms, encoders and decoders.
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
common functionality for rANS benchmarks.
public interface for building and renorming histograms from source data.
double_t computeExpectedCodewordLength(const DenseHistogram< source_T > &histogram, const RenormedDenseHistogram< source_T > &rescaledHistogram)
decltype(auto) renorm(histogram_T histogram, size_t newPrecision, RenormingPolicy renormingPolicy=RenormingPolicy::Auto, size_t lowProbabilityCutoffBits=0)
static decltype(auto) fromSamples(source_IT begin, source_IT end, typename std::iterator_traits< source_IT >::value_type min, typename std::iterator_traits< source_IT >::value_type max)
std::string decodeBuffer(int feeId, gsl::span< const std::byte > buffer)