Cosmetics

This commit is contained in:
paulfd 2019-09-14 09:42:31 +02:00
parent 74c49c2c8c
commit 2aa086d971
4 changed files with 15 additions and 14 deletions

View file

@ -29,12 +29,12 @@
#include <iostream> #include <iostream>
#include "../sfizz/SIMDHelpers.h" #include "../sfizz/SIMDHelpers.h"
class CumsumArray : public benchmark::Fixture { class CumArray : public benchmark::Fixture {
public: public:
void SetUp(const ::benchmark::State& state) { void SetUp(const ::benchmark::State& state) {
std::random_device rd { }; std::random_device rd { };
std::mt19937 gen { rd() }; std::mt19937 gen { rd() };
std::uniform_real_distribution<float> dist { 0, 1 }; std::uniform_real_distribution<float> dist { 0.1, 1 };
input = std::vector<float>(state.range(0)); input = std::vector<float>(state.range(0));
output = std::vector<float>(state.range(0)); output = std::vector<float>(state.range(0));
std::generate(input.begin(), input.end(), [&]() { return dist(gen); }); std::generate(input.begin(), input.end(), [&]() { return dist(gen); });
@ -49,36 +49,37 @@ public:
}; };
BENCHMARK_DEFINE_F(CumsumArray, Scalar)(benchmark::State& state) { BENCHMARK_DEFINE_F(CumArray, Sum_Scalar)(benchmark::State& state) {
for (auto _ : state) for (auto _ : state)
{ {
cumsum<float, false>(input, absl::MakeSpan(output)); cumsum<float, false>(input, absl::MakeSpan(output));
} }
} }
BENCHMARK_DEFINE_F(CumsumArray, SIMD)(benchmark::State& state) { BENCHMARK_DEFINE_F(CumArray, Sum_SIMD)(benchmark::State& state) {
for (auto _ : state) for (auto _ : state)
{ {
cumsum<float, true>(input, absl::MakeSpan(output)); cumsum<float, true>(input, absl::MakeSpan(output));
} }
} }
BENCHMARK_DEFINE_F(CumsumArray, Scalar_Unaligned)(benchmark::State& state) { BENCHMARK_DEFINE_F(CumArray, Sum_Scalar_Unaligned)(benchmark::State& state) {
for (auto _ : state) for (auto _ : state)
{ {
cumsum<float, false>(absl::MakeSpan(input).subspan(1), absl::MakeSpan(output).subspan(1)); cumsum<float, false>(absl::MakeSpan(input).subspan(1), absl::MakeSpan(output).subspan(1));
} }
} }
BENCHMARK_DEFINE_F(CumsumArray, SIMD_Unaligned)(benchmark::State& state) { BENCHMARK_DEFINE_F(CumArray, Sum_SIMD_Unaligned)(benchmark::State& state) {
for (auto _ : state) for (auto _ : state)
{ {
cumsum<float, true>(absl::MakeSpan(input).subspan(1), absl::MakeSpan(output).subspan(1)); cumsum<float, true>(absl::MakeSpan(input).subspan(1), absl::MakeSpan(output).subspan(1));
} }
} }
BENCHMARK_REGISTER_F(CumsumArray, Scalar)->RangeMultiplier(4)->Range(1 << 2, 1 << 12);
BENCHMARK_REGISTER_F(CumsumArray, SIMD)->RangeMultiplier(4)->Range(1 << 2, 1 << 12); BENCHMARK_REGISTER_F(CumArray, Sum_Scalar)->RangeMultiplier(4)->Range(1 << 2, 1 << 12);
BENCHMARK_REGISTER_F(CumsumArray, Scalar_Unaligned)->RangeMultiplier(4)->Range(1 << 2, 1 << 12); BENCHMARK_REGISTER_F(CumArray, Sum_SIMD)->RangeMultiplier(4)->Range(1 << 2, 1 << 12);
BENCHMARK_REGISTER_F(CumsumArray, SIMD_Unaligned)->RangeMultiplier(4)->Range(1 << 2, 1 << 12); BENCHMARK_REGISTER_F(CumArray, Sum_Scalar_Unaligned)->RangeMultiplier(4)->Range(1 << 2, 1 << 12);
BENCHMARK_REGISTER_F(CumArray, Sum_SIMD_Unaligned)->RangeMultiplier(4)->Range(1 << 2, 1 << 12);
BENCHMARK_MAIN(); BENCHMARK_MAIN();

View file

@ -691,7 +691,7 @@ void cumsum<float, true>(absl::Span<const float> input, absl::Span<float> output
while (in < lastAligned) { while (in < lastAligned) {
auto mmOffset = _mm_load_ps(in); auto mmOffset = _mm_load_ps(in);
mmOffset = _mm_add_ps(mmOffset, _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(mmOffset), 4))); mmOffset = _mm_add_ps(mmOffset, _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(mmOffset), 4)));
mmOffset = _mm_add_ps(mmOffset, _mm_shuffle_ps(_mm_setzero_ps(), mmOffset, 0x40)); mmOffset = _mm_add_ps(mmOffset, _mm_shuffle_ps(_mm_setzero_ps(), mmOffset, _MM_SHUFFLE(1, 0, 0, 0)));
mmOutput = _mm_add_ps(mmOutput, mmOffset); mmOutput = _mm_add_ps(mmOutput, mmOffset);
_mm_store_ps(out, mmOutput); _mm_store_ps(out, mmOutput);
mmOutput = _mm_shuffle_ps(mmOutput, mmOutput, _MM_SHUFFLE(3, 3, 3, 3)); mmOutput = _mm_shuffle_ps(mmOutput, mmOutput, _MM_SHUFFLE(3, 3, 3, 3));