diff --git a/benchmarks/BM_readInterleaved.cpp b/benchmarks/BM_readInterleaved.cpp index 65bfcc8d..2255e98f 100644 --- a/benchmarks/BM_readInterleaved.cpp +++ b/benchmarks/BM_readInterleaved.cpp @@ -18,7 +18,8 @@ static void Scalar(benchmark::State& state) { std::iota(input.begin(), input.end(), 1.0f); for (auto _ : state) { - sfz::readInterleaved(input, absl::MakeSpan(outputLeft), absl::MakeSpan(outputRight)); + sfz::setSIMDOpStatus(sfz::SIMDOps::readInterleaved, false); + sfz::readInterleaved(input, absl::MakeSpan(outputLeft), absl::MakeSpan(outputRight)); } } @@ -29,7 +30,8 @@ static void SSE(benchmark::State& state) { std::iota(input.begin(), input.end(), 1.0f); for (auto _ : state) { - sfz::readInterleaved(input, absl::MakeSpan(outputLeft), absl::MakeSpan(outputRight)); + sfz::setSIMDOpStatus(sfz::SIMDOps::readInterleaved, true); + sfz::readInterleaved(input, absl::MakeSpan(outputLeft), absl::MakeSpan(outputRight)); } } @@ -39,7 +41,12 @@ static void Scalar_Unaligned(benchmark::State& state) { sfz::Buffer outputRight (state.range(0)); std::iota(input.begin(), input.end(), 1.0f); for (auto _ : state) { - sfz::readInterleaved(absl::MakeSpan(input).subspan(2), absl::MakeSpan(outputLeft), absl::MakeSpan(outputRight)); + sfz::setSIMDOpStatus(sfz::SIMDOps::readInterleaved, false); + sfz::readInterleaved( + absl::MakeSpan(input).subspan(2), + absl::MakeSpan(outputLeft), + absl::MakeSpan(outputRight) + ); } } @@ -49,7 +56,12 @@ static void SSE_Unaligned(benchmark::State& state) { sfz::Buffer outputRight (state.range(0)); std::iota(input.begin(), input.end(), 1.0f); for (auto _ : state) { - sfz::readInterleaved(absl::MakeSpan(input).subspan(2), absl::MakeSpan(outputLeft), absl::MakeSpan(outputRight)); + sfz::setSIMDOpStatus(sfz::SIMDOps::readInterleaved, true); + sfz::readInterleaved( + absl::MakeSpan(input).subspan(2), + absl::MakeSpan(outputLeft), + absl::MakeSpan(outputRight) + ); } } @@ -59,7 +71,12 @@ static void Scalar_Unaligned_2(benchmark::State& state) { sfz::Buffer outputRight (state.range(0)); std::iota(input.begin(), input.end(), 1.0f); for (auto _ : state) { - sfz::readInterleaved(absl::MakeSpan(input).subspan(2), absl::MakeSpan(outputLeft).subspan(1), absl::MakeSpan(outputRight).subspan(3)); + sfz::setSIMDOpStatus(sfz::SIMDOps::readInterleaved, false); + sfz::readInterleaved( + absl::MakeSpan(input).subspan(2), + absl::MakeSpan(outputLeft).subspan(1), + absl::MakeSpan(outputRight).subspan(3) + ); } } @@ -69,7 +86,12 @@ static void SSE_Unaligned_2(benchmark::State& state) { sfz::Buffer outputRight (state.range(0)); std::iota(input.begin(), input.end(), 1.0f); for (auto _ : state) { - sfz::readInterleaved(absl::MakeSpan(input).subspan(2), absl::MakeSpan(outputLeft).subspan(1), absl::MakeSpan(outputRight).subspan(3)); + sfz::setSIMDOpStatus(sfz::SIMDOps::readInterleaved, true); + sfz::readInterleaved( + absl::MakeSpan(input).subspan(2), + absl::MakeSpan(outputLeft).subspan(1), + absl::MakeSpan(outputRight).subspan(3) + ); } } diff --git a/benchmarks/BM_writeInterleaved.cpp b/benchmarks/BM_writeInterleaved.cpp index e22f3d7f..f7612fa9 100644 --- a/benchmarks/BM_writeInterleaved.cpp +++ b/benchmarks/BM_writeInterleaved.cpp @@ -19,7 +19,8 @@ static void Interleaved_Write(benchmark::State& state) { std::iota(inputRight.begin(), inputRight.end(), 1.0f); for (auto _ : state) { - sfz::writeInterleaved(inputLeft, inputRight, absl::MakeSpan(output)); + sfz::setSIMDOpStatus(sfz::SIMDOps::writeInterleaved, false); + sfz::writeInterleaved(inputLeft, inputRight, absl::MakeSpan(output)); } } @@ -30,8 +31,8 @@ static void Interleaved_Write_SSE(benchmark::State& state) { std::iota(inputLeft.begin(), inputLeft.end(), 1.0f); std::iota(inputRight.begin(), inputRight.end(), 1.0f); for (auto _ : state) { - sfz::writeInterleaved(inputLeft, inputRight, absl::MakeSpan(output)); - benchmark::DoNotOptimize(output); + sfz::setSIMDOpStatus(sfz::SIMDOps::writeInterleaved, true); + sfz::writeInterleaved(inputLeft, inputRight, absl::MakeSpan(output)); } } @@ -42,8 +43,12 @@ static void Unaligned_Interleaved_Write(benchmark::State& state) { std::iota(inputLeft.begin(), inputLeft.end(), 1.0f); std::iota(inputRight.begin(), inputRight.end(), 1.0f); for (auto _ : state) { - sfz::writeInterleaved(absl::MakeSpan(inputLeft).subspan(1) , absl::MakeSpan(inputRight).subspan(1), absl::MakeSpan(output).subspan(2)); - benchmark::DoNotOptimize(output); + sfz::setSIMDOpStatus(sfz::SIMDOps::writeInterleaved, false); + sfz::writeInterleaved( + absl::MakeSpan(inputLeft).subspan(1), + absl::MakeSpan(inputRight).subspan(1), + absl::MakeSpan(output).subspan(2) + ); } } @@ -54,8 +59,12 @@ static void Unaligned_Interleaved_Write_SSE(benchmark::State& state) { std::iota(inputLeft.begin(), inputLeft.end(), 1.0f); std::iota(inputRight.begin(), inputRight.end(), 1.0f); for (auto _ : state) { - sfz::writeInterleaved(absl::MakeSpan(inputLeft).subspan(1) , absl::MakeSpan(inputRight).subspan(1), absl::MakeSpan(output).subspan(2)); - benchmark::DoNotOptimize(output); + sfz::setSIMDOpStatus(sfz::SIMDOps::writeInterleaved, true); + sfz::writeInterleaved( + absl::MakeSpan(inputLeft).subspan(1), + absl::MakeSpan(inputRight).subspan(1), + absl::MakeSpan(output).subspan(2) + ); } } @@ -66,8 +75,12 @@ static void Unaligned_Interleaved_Write_2(benchmark::State& state) { std::iota(inputLeft.begin(), inputLeft.end(), 1.0f); std::iota(inputRight.begin(), inputRight.end(), 1.0f); for (auto _ : state) { - sfz::writeInterleaved(absl::MakeSpan(inputLeft) , absl::MakeSpan(inputRight).subspan(1), absl::MakeSpan(output).subspan(2)); - benchmark::DoNotOptimize(output); + sfz::setSIMDOpStatus(sfz::SIMDOps::writeInterleaved, false); + sfz::writeInterleaved( + absl::MakeSpan(inputLeft), + absl::MakeSpan(inputRight).subspan(1), + absl::MakeSpan(output).subspan(2) + ); } } @@ -78,8 +91,12 @@ static void Unaligned_Interleaved_Write_SSE_2(benchmark::State& state) { std::iota(inputLeft.begin(), inputLeft.end(), 1.0f); std::iota(inputRight.begin(), inputRight.end(), 1.0f); for (auto _ : state) { - sfz::writeInterleaved(absl::MakeSpan(inputLeft) , absl::MakeSpan(inputRight).subspan(1), absl::MakeSpan(output).subspan(2)); - benchmark::DoNotOptimize(output); + sfz::setSIMDOpStatus(sfz::SIMDOps::writeInterleaved, true); + sfz::writeInterleaved( + absl::MakeSpan(inputLeft), + absl::MakeSpan(inputRight).subspan(1), + absl::MakeSpan(output).subspan(2) + ); } } diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 53aa801a..adf8d001 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -18,7 +18,7 @@ if(SAMPLERATE_LIBRARY AND SAMPLERATE_INCLUDE_DIR) endif() add_library(bm_simd STATIC ${BENCHMARK_SIMD_SOURCES}) -target_link_libraries(bm_simd PRIVATE absl::span) +target_link_libraries(bm_simd PRIVATE absl::span sfizz-cpuid) target_include_directories(bm_simd PRIVATE ../src/external) add_library(bm_ftz STATIC ../src/sfizz/ScopedFTZ.cpp)