22#ifdef RANS_PARALLEL_STL
27#include <benchmark/benchmark.h>
31#ifdef ENABLE_VTUNE_PROFILER
43template <
typename source_T>
46 std::vector<source_T>
result(nelems, 0);
48 std::uniform_int_distribution<source_T> dist(
min,
max);
50#ifdef RANS_PARALLEL_STL
51 std::generate(std::execution::par_unseq,
result.begin(),
result.end(), [&dist, &mt]() { return dist(mt); });
53 std::generate(
result.begin(),
result.end(), [&dist, &mt]() { return dist(mt); });
58static void copyBenchmark(benchmark::State& state)
60 std::vector<source_type>
src = makeRandomUniformVector<source_type>(
MessageSize);
62 for (
auto _ :
state) {
63 std::copy(
src.begin(),
src.end(),
dst.begin());
69static void unpackingBenchmark(benchmark::State& state)
71 size_t packingBits =
state.range(0);
73 std::vector<source_type>
src = makeRandomUniformVector<source_type>(
MessageSize, 0, utils::pow2(packingBits) - 1);
83 for (
auto _ :
state) {
85 for (
size_t i = 0;
i <
src.size(); ++
i) {
86 unpacked[
i] = internal::unpack<uint32_t>(iter, packingBits);
92 state.SetBytesProcessed(
src.size() *
sizeof(uint32_t) *
state.iterations());
94 if (!std::equal(unpacked.begin(), unpacked.end(),
src.begin())) {
95 state.SkipWithError(
"error in packing");
constexpr size_t MessageSize
std::vector< source_T > makeRandomUniformVector(size_t nelems, source_T min=std::numeric_limits< source_T >::max(), source_T max=std::numeric_limits< source_T >::max())
preprocessor defines to enable features based on CPU architecture
common functionality for rANS benchmarks.
BitPtr pack(BitPtr pos, uint64_t data, size_t packingWidth)