diff --git a/benchmarks/BM_filterModulation.cpp b/benchmarks/BM_filterModulation.cpp index 0edb3878..1b5d6d58 100644 --- a/benchmarks/BM_filterModulation.cpp +++ b/benchmarks/BM_filterModulation.cpp @@ -49,17 +49,18 @@ BENCHMARK_DEFINE_F(FilterFixture, OnePole_VA)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto inputIterator = input.begin(); - auto outputIterator = output.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto inputPtr = input.data(); + auto outputPtr = output.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - const auto gain = sfz::OnePoleFilter::normalizedGain(*cutoffIterator, sampleRate); + const auto gain = sfz::OnePoleFilter::normalizedGain(*cutoffPtr, sampleRate); filter.setGain(gain); - filter.processLowpass({ inputIterator.base(), step }, { outputIterator.base(), step } ); - cutoffIterator += step; - inputIterator += step; - outputIterator += step; + filter.processLowpass({ inputPtr, step }, { outputPtr, step } ); + cutoffPtr += step; + inputPtr += step; + outputPtr += step; } } } @@ -71,15 +72,16 @@ BENCHMARK_DEFINE_F(FilterFixture, OnePole_Faust)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto inputIterator = input.begin(); - auto outputIterator = output.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto inputPtr = input.data(); + auto outputPtr = output.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filter.process(&inputIterator.base(), &outputIterator.base(), *cutoffIterator, 0.0, 0.0, step); - cutoffIterator += step; - inputIterator += step; - outputIterator += step; + filter.process(&inputPtr, &outputPtr, *cutoffPtr, 0.0, 0.0, step); + cutoffPtr += step; + inputPtr += step; + outputPtr += step; } } } @@ -91,17 +93,18 @@ BENCHMARK_DEFINE_F(FilterFixture, TwoPole_Faust)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); + auto cutoffPtr = cutoff.data(); auto qIterator = q.begin(); - auto inputIterator = input.begin(); - auto outputIterator = output.begin(); - while (cutoffIterator < cutoff.end()) + auto inputPtr = input.data(); + auto outputPtr = output.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filter.process(&inputIterator.base(), &outputIterator.base(), *cutoffIterator, *qIterator, 0.0, step); + filter.process(&inputPtr, &outputPtr, *cutoffPtr, *qIterator, 0.0, step); qIterator += step; - cutoffIterator += step; - inputIterator += step; - outputIterator += step; + cutoffPtr += step; + inputPtr += step; + outputPtr += step; } } } @@ -113,19 +116,20 @@ BENCHMARK_DEFINE_F(FilterFixture, TwoPoleShelf_Faust)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); + auto cutoffPtr = cutoff.data(); auto qIterator = q.begin(); auto pkshIterator = pksh.begin(); - auto inputIterator = input.begin(); - auto outputIterator = output.begin(); - while (cutoffIterator < cutoff.end()) + auto inputPtr = input.data(); + auto outputPtr = output.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filter.process(&inputIterator.base(), &outputIterator.base(), *cutoffIterator, *qIterator, *pkshIterator, step); + filter.process(&inputPtr, &outputPtr, *cutoffPtr, *qIterator, *pkshIterator, step); qIterator += step; - cutoffIterator += step; + cutoffPtr += step; pkshIterator += step; - inputIterator += step; - outputIterator += step; + inputPtr += step; + outputPtr += step; } } } diff --git a/benchmarks/BM_filterStereoMono.cpp b/benchmarks/BM_filterStereoMono.cpp index 898b771f..b86f25f8 100644 --- a/benchmarks/BM_filterStereoMono.cpp +++ b/benchmarks/BM_filterStereoMono.cpp @@ -19,7 +19,7 @@ constexpr float sampleRate { 48000.0f }; class FilterFixture : public benchmark::Fixture { public: - void SetUp(const ::benchmark::State&) { + void SetUp(const ::benchmark::State& state) { inputLeft = std::vector(blockSize); inputRight = std::vector(blockSize); outputLeft = std::vector(blockSize); @@ -56,15 +56,16 @@ BENCHMARK_DEFINE_F(FilterFixture, OnePole_MonoOnce)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto inLIterator = inputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto inLPtr = inputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filterLeft.process( &inLIterator.base(), &outLIterator.base(), *cutoffIterator, 0.0, 0.0, step); - cutoffIterator += step; - inLIterator += step; - outLIterator += step; + filterLeft.process( &inLPtr, &outLPtr, *cutoffPtr, 0.0, 0.0, step); + cutoffPtr += step; + inLPtr += step; + outLPtr += step; } } } @@ -79,20 +80,21 @@ BENCHMARK_DEFINE_F(FilterFixture, OnePole_MonoTwice)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto inLIterator = inputLeft.begin(); - auto inRIterator = inputRight.begin(); - auto outRIterator = outputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto inLPtr = inputLeft.data(); + auto inRPtr = inputRight.data(); + auto outRPtr = outputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filterLeft.process( &inLIterator.base(), &outLIterator.base(), *cutoffIterator, 0.0, 0.0, step); - filterRight.process(&inRIterator.base(), &outRIterator.base(), *cutoffIterator, 0.0, 0.0, step); - cutoffIterator += step; - inLIterator += step; - inRIterator += step; - outLIterator += step; - outRIterator += step; + filterLeft.process( &inLPtr, &outLPtr, *cutoffPtr, 0.0, 0.0, step); + filterRight.process(&inRPtr, &outRPtr, *cutoffPtr, 0.0, 0.0, step); + cutoffPtr += step; + inLPtr += step; + inRPtr += step; + outLPtr += step; + outRPtr += step; } } } @@ -105,21 +107,22 @@ BENCHMARK_DEFINE_F(FilterFixture, OnePole_Stereo)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto inLIterator = inputLeft.begin(); - auto inRIterator = inputRight.begin(); - auto outRIterator = outputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto inLPtr = inputLeft.data(); + auto inRPtr = inputRight.data(); + auto outRPtr = outputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - float * inputs[2] = { inLIterator.base(), inRIterator.base() }; - float * outputs[2] = { outLIterator.base(), outRIterator.base() }; - filter.process(inputs, outputs, *cutoffIterator, 0.0, 0.0, step); - cutoffIterator += step; - inLIterator += step; - inRIterator += step; - outLIterator += step; - outRIterator += step; + float * inputs[2] = { inLPtr, inRPtr }; + float * outputs[2] = { outLPtr, outRPtr }; + filter.process(inputs, outputs, *cutoffPtr, 0.0, 0.0, step); + cutoffPtr += step; + inLPtr += step; + inRPtr += step; + outLPtr += step; + outRPtr += step; } } } @@ -131,17 +134,18 @@ BENCHMARK_DEFINE_F(FilterFixture, TwoPole_MonoOnce)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto qIterator = q.begin(); - auto inLIterator = inputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto qPtr = q.data(); + auto inLPtr = inputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filterLeft.process(&inLIterator.base(), &outLIterator.base(), *cutoffIterator, *qIterator, 0.0, step); - cutoffIterator += step; - qIterator += step; - inLIterator += step; - outLIterator += step; + filterLeft.process(&inLPtr, &outLPtr, *cutoffPtr, *qPtr, 0.0, step); + cutoffPtr += step; + qPtr += step; + inLPtr += step; + outLPtr += step; } } } @@ -156,22 +160,23 @@ BENCHMARK_DEFINE_F(FilterFixture, TwoPole_MonoTwice)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto qIterator = q.begin(); - auto inLIterator = inputLeft.begin(); - auto inRIterator = inputRight.begin(); - auto outRIterator = outputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto qPtr = q.data(); + auto inLPtr = inputLeft.data(); + auto inRPtr = inputRight.data(); + auto outRPtr = outputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filterLeft.process( &inLIterator.base(), &outLIterator.base(), *cutoffIterator, *qIterator, 0.0, step); - filterRight.process(&inRIterator.base(), &outRIterator.base(), *cutoffIterator, *qIterator, 0.0, step); - cutoffIterator += step; - qIterator += step; - inLIterator += step; - inRIterator += step; - outLIterator += step; - outRIterator += step; + filterLeft.process( &inLPtr, &outLPtr, *cutoffPtr, *qPtr, 0.0, step); + filterRight.process(&inRPtr, &outRPtr, *cutoffPtr, *qPtr, 0.0, step); + cutoffPtr += step; + qPtr += step; + inLPtr += step; + inRPtr += step; + outLPtr += step; + outRPtr += step; } } } @@ -184,23 +189,24 @@ BENCHMARK_DEFINE_F(FilterFixture, TwoPole_Stereo)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto qIterator = q.begin(); - auto inLIterator = inputLeft.begin(); - auto inRIterator = inputRight.begin(); - auto outRIterator = outputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto qPtr = q.data(); + auto inLPtr = inputLeft.data(); + auto inRPtr = inputRight.data(); + auto outRPtr = outputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - float * inputs[2] = { inLIterator.base(), inRIterator.base() }; - float * outputs[2] = { outLIterator.base(), outRIterator.base() }; - filter.process(inputs, outputs, *cutoffIterator, *qIterator, 0.0, step); - cutoffIterator += step; - qIterator += step; - inLIterator += step; - inRIterator += step; - outLIterator += step; - outRIterator += step; + float * inputs[2] = { inLPtr, inRPtr }; + float * outputs[2] = { outLPtr, outRPtr }; + filter.process(inputs, outputs, *cutoffPtr, *qPtr, 0.0, step); + cutoffPtr += step; + qPtr += step; + inLPtr += step; + inRPtr += step; + outLPtr += step; + outRPtr += step; } } } @@ -212,19 +218,20 @@ BENCHMARK_DEFINE_F(FilterFixture, Shelf_MonoOnce)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto qIterator = q.begin(); - auto pkshIterator = pksh.begin(); - auto inLIterator = inputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto qPtr = q.data(); + auto pkshPtr = pksh.data(); + auto inLPtr = inputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filterLeft.process(&inLIterator.base(), &outLIterator.base(), *cutoffIterator, *qIterator, *pkshIterator, step); - cutoffIterator += step; - qIterator += step; - pkshIterator += step; - inLIterator += step; - outLIterator += step; + filterLeft.process(&inLPtr, &outLPtr, *cutoffPtr, *qPtr, *pkshPtr, step); + cutoffPtr += step; + qPtr += step; + pkshPtr += step; + inLPtr += step; + outLPtr += step; } } } @@ -235,28 +242,28 @@ BENCHMARK_DEFINE_F(FilterFixture, Shelf_MonoTwice)(benchmark::State& state) { filterLeft.init(sampleRate); filterLeft.setType(sfz::FilterType::kFilterLpf2p); filterRight.init(sampleRate); - filterRight.setType(sfz::FilterType::kFilterLpf2p); for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto qIterator = q.begin(); - auto pkshIterator = pksh.begin(); - auto inLIterator = inputLeft.begin(); - auto inRIterator = inputRight.begin(); - auto outRIterator = outputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto qPtr = q.data(); + auto pkshPtr = pksh.data(); + auto inLPtr = inputLeft.data(); + auto inRPtr = inputRight.data(); + auto outRPtr = outputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - filterLeft.process( &inLIterator.base(), &outLIterator.base(), *cutoffIterator, *qIterator, *pkshIterator, step); - filterRight.process(&inRIterator.base(), &outRIterator.base(), *cutoffIterator, *qIterator, *pkshIterator, step); - cutoffIterator += step; - qIterator += step; - pkshIterator += step; - inLIterator += step; - inRIterator += step; - outLIterator += step; - outRIterator += step; + filterLeft.process( &inLPtr, &outLPtr, *cutoffPtr, *qPtr, *pkshPtr, step); + filterRight.process(&inRPtr, &outRPtr, *cutoffPtr, *qPtr, *pkshPtr, step); + cutoffPtr += step; + qPtr += step; + pkshPtr += step; + inLPtr += step; + inRPtr += step; + outLPtr += step; + outRPtr += step; } } } @@ -269,25 +276,26 @@ BENCHMARK_DEFINE_F(FilterFixture, Shelf_Stereo)(benchmark::State& state) { for (auto _ : state) { const auto step = static_cast(state.range(0)); - auto cutoffIterator = cutoff.begin(); - auto qIterator = q.begin(); - auto pkshIterator = pksh.begin(); - auto inLIterator = inputLeft.begin(); - auto inRIterator = inputRight.begin(); - auto outRIterator = outputLeft.begin(); - auto outLIterator = outputRight.begin(); - while (cutoffIterator < cutoff.end()) + auto cutoffPtr = cutoff.data(); + auto qPtr = q.data(); + auto pkshPtr = pksh.data(); + auto inLPtr = inputLeft.data(); + auto inRPtr = inputRight.data(); + auto outRPtr = outputLeft.data(); + auto outLPtr = outputRight.data(); + const auto sentinel = cutoff.data() + blockSize; + while (cutoffPtr < sentinel) { - float * inputs[2] = { inLIterator.base(), inRIterator.base() }; - float * outputs[2] = { outLIterator.base(), outRIterator.base() }; - filter.process(inputs, outputs, *cutoffIterator, *qIterator, *pkshIterator, step); - cutoffIterator += step; - qIterator += step; - pkshIterator += step; - inLIterator += step; - inRIterator += step; - outLIterator += step; - outRIterator += step; + float * inputs[2] = { inLPtr, inRPtr }; + float * outputs[2] = { outLPtr, outRPtr }; + filter.process(inputs, outputs, *cutoffPtr, *qPtr, *pkshPtr, step); + cutoffPtr += step; + qPtr += step; + pkshPtr += step; + inLPtr += step; + inRPtr += step; + outLPtr += step; + outRPtr += step; } } } @@ -302,4 +310,3 @@ BENCHMARK_REGISTER_F(FilterFixture, Shelf_MonoOnce)->RangeMultiplier(2)->Range(1 BENCHMARK_REGISTER_F(FilterFixture, Shelf_MonoTwice)->RangeMultiplier(2)->Range(1, 1 << 8); BENCHMARK_REGISTER_F(FilterFixture, Shelf_Stereo)->RangeMultiplier(2)->Range(1, 1 << 8); BENCHMARK_MAIN(); -