From 06719ae42f10d4152780b75173e32fb6f4bb7633 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Wed, 12 Jul 2017 14:09:59 +0300 Subject: [PATCH] [benchmark] Add a benchmark for our dtoa implementation Make sure it is faster than std::to_value(). And it is, by ~30% for the normal use case, and much faster when close to the double limits. util::dtoa also offers a much better precision. --- benchmark/fixtures/api/cache.db | Bin 1298432 -> 1298432 bytes benchmark/util/dtoa.benchmark.cpp | 66 ++++++++++++++++++++++++++++++ cmake/benchmark-files.cmake | 3 ++ 3 files changed, 69 insertions(+) create mode 100644 benchmark/util/dtoa.benchmark.cpp diff --git a/benchmark/fixtures/api/cache.db b/benchmark/fixtures/api/cache.db index c2ada1fbd5b738eae732ff87ad0fac3ff6f6ed24..6a1d60421f8d0ff10f9ec399642b39cf7af8c148 100644 GIT binary patch delta 1886 zcmZvcO;B4^6vuPly^n+!%6kOUPZ8SEmh$1S)s~jleqg`AwzTTFz!}GdE5@BOB&4N% z{Q`Y4rPPgvwlsx)VoWX;onhtH)ESqKIF1_^4qF%y|NoE|UAVZvbMC$8ocllbz9f~5_*SS|aEB|ouVBM^H>wCXojZN5MtI#x9= zw!GGc-%Tq<3q~`RzsH!x$YR{YNMU@A@iIm|MgvA8hO6K6M8*~kTFvwLMrfklsZ}SA zpODHCJ4$KWBsTw6Y-)f}hI5XlBQu`QNuH*N6cjw6Yy189r&_o2;7 z*aKSiRW954d8C?~5IBS~47`9I5s;A%6dcm3fmv5zDd7~(;QXjo30#EeLRDkg=0R~B z8$`i`8mJN*bZl5%l;&1!T*U>;wU`q*#jKNf2ikL}N_z&Wtl9%jl<*cLh{bxmS`7KU zh~lfAg+N4QWP|01^IElYaTJy%F5%ijIK7`Lx48+^O;qF)LDdeyj2pxew2x6F2%CUK zJcVDz4RLD(J)vT77B9xOzk{;y-!}eqAQg@_yzmPa ziYJq;+DL?7)U$jt`6?ub7mGXj{>a){ZXxUzs@%dlw@~dCY`5U#3pGYs8*^ddXxSer WYK!N+i1hFxs-brEE3t)k+5QJDh{AgS delta 1876 zcmZvb%TrTV9LIC+IhQ0i!o6Tqd?8T@rJyu@tg6^ZReTd4Xz6sOEcyqq?F>o;4L+bv zj1{}7p^B-f6^zNzsx!=V#;uHn`2j7TEoU|xl9kHI+K-3w4ho@h286q|j zn~5z%0}%#98~wiGvMK$u)7`(HW{}uHw3&dU&jj%a_jVEO#7^#gL~9SRm*`lz!DW;< zNE~vb(ArLP5;5W^@iB2+Re`%{b`dAjcd8%vH`DARP7`N{exi{P-5v+H93;*W=ZOR{ zL|h=^!~x* zh2;ddxObPhM`ZDWwI6sk(#{c&h&*wY(8N{Zz8i;Dfq0h7uC6hx<;^Gj6w-4+^MAx= zc%J7Lf^`#>IeWq$vq$X_d(i$eR~_xL+x=1*-Jf4-l&WkQe=J)@*%E*Gq!RQCmJO?H zQk>)r-=AMzgLT}TA- z4x|;b719D}hBU$dDdZt!3Ni_K0J#Hs6H*IV16iv-ONy*5Hffb%zRl1qbcC>u5E!v5U!Hzn!sz*3DVy8Q`>ZRU| zj^R?6MQ(Esybi(vF|yJz96&kZI3~boUATfth`ptec9cfCuQ*co0phA}mDsLN532!b zVqBifXoGDXLfH&*SgRT8n+VEwt|2H(jv*NJQ3Rttrd0&>Y3cY{su+4I^-72n*yZhU zG{#a+;x>nI3MEnhfZKj_)63Ai5^*yTuPDU5Dgr-r$tj#c0bZQ;V^$V)9Bb-JC;&Pu zd;E?VM76BqoK_A)oyVFwfxKoh&Japr2^X-%`xjAyRXq9zJ!4DDNMQMChOx)ABS=e~ zL^>}jonefo!mRI>DMEVuPv57OIe;=#=!AY(keM!N+^4>ZPMGcq_5<#GR&tCYHfMbu zEy-dj-{uwPmB}ky&dQ{}M~uPCS3Lb5NqqD5#b3vij<}mu5euJ4oT;+-G^l^X7YUu0 zE14dk3dATRtqz|!qW4|5UYO#5w!gFHgc(Ko_wc-Yko%Yt^-oz93Lx;DHDCT%CrfWP zReHOJe7lu2{5>D#6?@I&6{rgcO8pE4Q9s7$1OM9Em<;@5yG5y7w?;TaawY&-1*wEoL2QVl + +#include + +#include +#include + +using namespace mbgl; + +static void Util_dtoa(::benchmark::State& state) { + while (state.KeepRunning()) { + util::dtoa(0.); + util::dtoa(M_E); + util::dtoa(M_LOG2E); + util::dtoa(M_LOG10E); + util::dtoa(M_LN2); + util::dtoa(M_LN10); + util::dtoa(M_PI); + util::dtoa(M_PI_2); + util::dtoa(M_PI_4); + util::dtoa(M_1_PI); + util::dtoa(M_2_PI); + util::dtoa(M_2_SQRTPI); + util::dtoa(M_SQRT2); + util::dtoa(M_SQRT1_2); + } +} + +static void Util_standardDtoa(::benchmark::State& state) { + while (state.KeepRunning()) { + std::to_string(0.); + std::to_string(M_E); + std::to_string(M_LOG2E); + std::to_string(M_LOG10E); + std::to_string(M_LN2); + std::to_string(M_LN10); + std::to_string(M_PI); + std::to_string(M_PI_2); + std::to_string(M_PI_4); + std::to_string(M_1_PI); + std::to_string(M_2_PI); + std::to_string(M_2_SQRTPI); + std::to_string(M_SQRT2); + std::to_string(M_SQRT1_2); + } +} + +static void Util_dtoaLimits(::benchmark::State& state) { + while (state.KeepRunning()) { + util::dtoa(DBL_MIN); + util::dtoa(DBL_MAX); + } +} + +static void Util_standardDtoaLimits(::benchmark::State& state) { + while (state.KeepRunning()) { + std::to_string(DBL_MIN); + std::to_string(DBL_MAX); + } +} + +BENCHMARK(Util_dtoa); +BENCHMARK(Util_standardDtoa); + +BENCHMARK(Util_dtoaLimits); +BENCHMARK(Util_standardDtoaLimits); diff --git a/cmake/benchmark-files.cmake b/cmake/benchmark-files.cmake index 35931a6b5..6fb9a80d5 100644 --- a/cmake/benchmark-files.cmake +++ b/cmake/benchmark-files.cmake @@ -19,4 +19,7 @@ set(MBGL_BENCHMARK_FILES benchmark/src/mbgl/benchmark/benchmark.cpp benchmark/src/mbgl/benchmark/util.cpp benchmark/src/mbgl/benchmark/util.hpp + + # util + benchmark/util/dtoa.benchmark.cpp )