jfalcou / eve

Expressive Vector Engine - SIMD in C++ Goes Brrrr
https://jfalcou.github.io/eve/
Boost Software License 1.0
961 stars 58 forks source link

[BENCH REPORT] Some stuff to investigate #1776

Closed jfalcou closed 2 weeks ago

jfalcou commented 6 months ago

Nothing drastic , just here for reference. Bench have been revamped to work again, and @jtlap made some observation of thign we need to investigate

bit_ceil         scalar float double
bit_floor        scalar float double
bit_shl(eve::wide<int, eve::fixed<1ULL>>, int32)
bit_shr(eve::wide<int, eve::fixed<1ULL>>, int32)
cbrt(eve::wide<double, eve::fixed<2>>) 
cbrt(eve::wide<double, eve::fixed<1ULL>>)
exponent scalar float and double
frac scalar float and double
frexp pedantic scalar  float 
frexp regular  scalar  double and float
is_equal(eve::wide<double, eve::fixed<1ULL>>, eve::wide<double, eve::fixed<1ULL>>) + numeric
is_even scalar double float
is_finite(eve::wide<double, eve::fixed<1ULL>>)
is_finite(eve::wide<float, eve::fixed<1ULL>>)
is_flint scalar 
is_greater_equal(eve::wide<float, eve::fixed<1ULL>>, eve::wide<float, eve::fixed<1ULL>>)
is_greater_equal(eve::wide<double, eve::fixed<1ULL>>, eve::wide<double, eve::fixed<1ULL>>
is_greater
is_less 
is_less_equal (_lessgreater in float but no double !)
is_normal (eve::wide<double, eve::fixed<1ULL>>)
is_normal(eve::wide<float, eve::fixed<1ULL>>)
is_not_denormal(eve::wide<double, eve::fixed<1ULL>>)
s_not_equal(eve::wide<double, eve::fixed<1ULL>>, eve::wide<double, eve::fixed<1ULL>>
is_not_equal(eve::wide<float, eve::fixed<1ULL>>, eve::wide<float, eve::fixed<1ULL>>)
is_not_finite(eve::wide<double, eve::fixed<1ULL>>)
is_not_finite(eve::wide<float, eve::fixed<1ULL>>)
is_not_greater_equal(eve::wide<float, eve::fixed<1ULL>>, eve::wide<float, eve::fixed<1ULL>>)
is_not_greater(eve::wide<float, eve::fixed<1ULL>>, eve::wide<float, eve::fixed<1ULL>>)
is_unordered(eve::wide<double, eve::fixed<1ULL>>, eve::wide<double, eve::fixed<1ULL>>)
is_unordered(eve::wide<float, eve::fixed<1ULL>>, eve::wide<float, eve::fixed<1ULL>>)
eve::ldexp[eve::pedantic2](eve::wide<float, eve::fixed<1ULL>>, eve::wide<int, eve::fixed<1ULL>>)
max[eve::numeric2](double, double)
nearest(double)
nearest(float)
eve::pedantic(eve::next)(eve::wide<float, eve::fixed<1ULL>>, eve::wide<int, eve::fixed<1ULL>>)
popcount(eve::wide<unsigned long, eve::fixed<1ULL>>)
rem pedantic is very very bad for short ints
jtlap commented 6 months ago

These function are at least not so good versus scalar and trigo rempio2 is very slow for big inputs acosh double acsch double asecd double asecpi double asec double asinh double cos regular double cotd.half_circle.float cotd.regular.double cotd.regular.float cotpi scalarfloat/double is better than simd cot regular double (as cos) cot regular float pas terrible pow_abs.raw.double pas terrible pow_abs.regular.double pas terrible sec.regular.double as cos sincos.regular.double as cos sin.regular.double as cos tan.regular.double as cos