Article: AMD's Jaguar Microarchitecture
By: Michael S (already5chosen.delete@this.yahoo.com), April 7, 2014 12:42 pm
Room: Moderated Discussions
UnmaskedUnderflow (unmasked.delete@this.unmasked.org) on April 7, 2014 12:26 pm wrote:
> > Wilco (Wilco.Dijkstra.delete@this.ntlworld.com) on April 7, 2014 3:27 am wrote:
> > > >
> > > > The real problem is more exotic - x87 precision control can reduce the precision of
> > > > mantissa, but it can't reduce the range of exponent. So, results of x87 computations
> > > > with single or double precision remain the same as specified by IEEE only as long as
> > > > you stay within official range. Which sounds nearly impossible in practice.
> > >
> > > You can store to memory after every operation to get the exponent right - this is still
> > > not IEEE compliant as denormals suffer from double rounding. Of course doing this causes
> > > another performance penalty but at least it gives more consistent results than variables
> > > whose values suddenly change due to needing to be spilled to memory by the compiler.
> > >
> > >
> > > Basically you cannot get IEEE results from x87. Quite ironic since
> > > x87 was supposed to be the first IEEE implementation...
> > >
> >
>
> This part of the conversation is confusing details. x87 precision will correctly round
> once if you set it to DP/SP and produce the correct memory result internally.
>
> It is ONLY if you set precision to EP, then store it as a DP to memory. You
> are turning it into two operations -- operation then store/convert. That's the
> famous "double-round" bit. Per operation, that is exactly IEEE compliant.
>
IMHO, Wilco is correct.
Even when x87 precision is set correctly, double rounded still happens when *denormal* result is stored to memory.
It happens because, as mentioned several times above, x87 in-register DP format is not IEEE standard 1.11.52 DP, but 1.15.(1).52 chimera.
> > Wilco (Wilco.Dijkstra.delete@this.ntlworld.com) on April 7, 2014 3:27 am wrote:
> > > >
> > > > The real problem is more exotic - x87 precision control can reduce the precision of
> > > > mantissa, but it can't reduce the range of exponent. So, results of x87 computations
> > > > with single or double precision remain the same as specified by IEEE only as long as
> > > > you stay within official range. Which sounds nearly impossible in practice.
> > >
> > > You can store to memory after every operation to get the exponent right - this is still
> > > not IEEE compliant as denormals suffer from double rounding. Of course doing this causes
> > > another performance penalty but at least it gives more consistent results than variables
> > > whose values suddenly change due to needing to be spilled to memory by the compiler.
> > >
> > >
> > > Basically you cannot get IEEE results from x87. Quite ironic since
> > > x87 was supposed to be the first IEEE implementation...
> > >
> >
>
> This part of the conversation is confusing details. x87 precision will correctly round
> once if you set it to DP/SP and produce the correct memory result internally.
>
> It is ONLY if you set precision to EP, then store it as a DP to memory. You
> are turning it into two operations -- operation then store/convert. That's the
> famous "double-round" bit. Per operation, that is exactly IEEE compliant.
>
IMHO, Wilco is correct.
Even when x87 precision is set correctly, double rounded still happens when *denormal* result is stored to memory.
It happens because, as mentioned several times above, x87 in-register DP format is not IEEE standard 1.11.52 DP, but 1.15.(1).52 chimera.