From 2d340f2f37a28e82323428725019f12a8538f48e Mon Sep 17 00:00:00 2001 From: mtklein Date: Sat, 6 Feb 2016 19:38:39 -0800 Subject: could not resist: fast sse float <--> u16 - generalizes the bench to float <--> {u8,u16} - must remember to implement NEON version at some point BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1676853002 CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Review URL: https://codereview.chromium.org/1676853002 --- bench/Sk4fBench.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'bench/Sk4fBench.cpp') diff --git a/bench/Sk4fBench.cpp b/bench/Sk4fBench.cpp index 712a65776d..823e14c0af 100644 --- a/bench/Sk4fBench.cpp +++ b/bench/Sk4fBench.cpp @@ -10,37 +10,47 @@ #include "SkNx.h" // Used to prevent the compiler from optimizing away the whole loop. -volatile uint32_t blackhole = 0; +volatile uint64_t blackhole = 0; // Not a great random number generator, but it's very fast. // The code we're measuring is quite fast, so low overhead is essential. -static uint32_t lcg_rand(uint32_t* seed) { +static uint64_t lcg_rand(uint64_t* seed) { *seed *= 1664525; *seed += 1013904223; return *seed; } -struct Sk4fBytesRoundtripBench : public Benchmark { - Sk4fBytesRoundtripBench() {} +template +struct Sk4fRoundtripBench : public Benchmark { + Sk4fRoundtripBench() {} + + const char* onGetName() override { + switch (sizeof(T)) { + case 1: return "Sk4f_roundtrip_u8"; + case 2: return "Sk4f_roundtrip_u16"; + } + SkASSERT(false); + return ""; + } - const char* onGetName() override { return "Sk4f_roundtrip"; } bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } void onDraw(int loops, SkCanvas* canvas) override { // Unlike blackhole, junk can and probably will be a register. - uint32_t junk = 0; - uint32_t seed = 0; + uint64_t junk = 0; + uint64_t seed = 0; for (int i = 0; i < loops; i++) { - uint32_t color = lcg_rand(&seed), + uint64_t src = lcg_rand(&seed), back; - auto f = SkNx_cast(Sk4b::Load(&color)); - SkNx_cast(f).store(&back); + auto f = SkNx_cast(SkNx<4,T>::Load(&src)); + SkNx_cast(f).store(&back); junk ^= back; } blackhole ^= junk; } }; -DEF_BENCH(return new Sk4fBytesRoundtripBench;) +DEF_BENCH(return new Sk4fRoundtripBench;) +DEF_BENCH(return new Sk4fRoundtripBench;) struct Sk4fGradientBench : public Benchmark { const char* onGetName() override { return "Sk4f_gradient"; } -- cgit v1.2.3