As Christoph points out, this refers to the semantic difference between
std::min and minf (and similar for max*) in the presence of NaN arguments.
As you can see in the bugs Christoph linked, we agree that it would be nice
to have packet ops for the various behaviors (possibly chosen using a
template argument), but currently Eigen follows the std::min semantics,
which are equivalent to the ternary expression
template<class T>
const T& min(const T& a, const T& b)
{
return (b < a) ? b : a;
}
See https://en.cppreference.com/w/cpp/algorithm/min
On Fri, Jan 17, 2020 at 8:45 AM Christoph Hertzberg <
[email protected]> wrote:
> Hi!
>
> Which IEEE754 version are you referring to?
>
> In IEEE754-1985, there was no min/max, then the 2008 draft suggested
> introducing minNum/maxNum which propagate numbers, and the 2019 draft
> suggests replacing those by
> {min,max}imum{,Number,Magnitude,MagnitudeNumber} which either propagate
> NaNs or numbers. (All to the best of my knowledge, please correct me, if
> I'm wrong).
>
> Eigen follows the `std::min`/`std::max` convention of propagating the
> first argument, if one argument is NaN. SSE/AVX propagates the first,
> which is why we change the order for those.
> I'm really no expert on Altivec/PPC, so no idea if there is a more
> efficient instruction consistent with `std::min/max`.
>
> For reference: Here is the commit which introduced the lines you are
> referring to:
>
> https://gitlab.com/libeigen/eigen/commit/e91e314347c14774206307a91d1b427e49f9b3e2
>
> Also, check these issues for further discussion on the topic:
>
> https://gitlab.com/libeigen/eigen/issues/564
> https://gitlab.com/libeigen/eigen/issues/1373
> https://gitlab.com/libeigen/eigen/issues/1494
>
>
> Cheers,
> Christoph
>
>
>
> On 17/01/2020 16.50, Everton Rufino Constantino1 wrote:
> > Hi,
> > looking at the implementation of pmin and pmax for Packet4f on
> > Altivec/PacketMath.h I came across the following statement to justify
> not using
> > VSX's intrinsics:
> > "// NOTE: about 10% slower than vec_min, but consistent with std::min
> and SSE regarding NaN"
> > I fail to understand the reasoning, afaik ppc and stdlib both are IEEE
> > compatible right? Can somebody please clarify the statement? I think
> sometime in
> > the past ppc had a non-IEEE mode that you could turn on or off but
> that's gone
> > for a while now.
> > Best regards,
> > Everton Constantino
> > <[email protected]>
> >
>
> --
> Dr.-Ing. Christoph Hertzberg
>
> Besuchsadresse der Nebengeschäftsstelle:
> DFKI GmbH
> Robotics Innovation Center
> Robert-Hooke-Straße 5
> 28359 Bremen, Germany
>
> Postadresse der Hauptgeschäftsstelle Standort Bremen:
> DFKI GmbH
> Robotics Innovation Center
> Robert-Hooke-Straße 1
> 28359 Bremen, Germany
>
> Tel.: +49 421 178 45-4021 <+49%20421%20178454021>
> Zentrale: +49 421 178 45-0
> E-Mail: [email protected]
>
> Weitere Informationen: http://www.dfki.de/robotik
> -------------------------------------------------------------
> Deutsches Forschungszentrum für Künstliche Intelligenz GmbH
> Trippstadter Straße 122, D-67663 Kaiserslautern, Germany
>
> Geschäftsführung:
> Prof. Dr. Antonio Krüger (Vorsitzender)
> Dr. Walter Olthoff
>
> Vorsitzender des Aufsichtsrats:
> Dr. Gabriël Clemens
> Amtsgericht Kaiserslautern, HRB 2313
> -------------------------------------------------------------
>
>
>
>