[Haskell-cafe] Haskell version of ray tracer code is much slower than the original ML

Philip Armstrong phil at kantaka.co.uk
Fri Jun 22 06:40:47 EDT 2007

On Thu, Jun 21, 2007 at 08:42:57PM +0100, Philip Armstrong wrote:
>On Thu, Jun 21, 2007 at 03:29:17PM -0400, Mark T.B. Carroll wrote:
>>Philip Armstrong <phil at kantaka.co.uk> writes:
>>>Why on earth would you use -fexcess-precision if you're using Floats?
>>>The excess precision only apples to Doubles held in registers on x86
>>>IIRC. (If you spill a Double from a register to memory, then you lose
>>>the extra precision bits in the process).
>>Some googling suggests that point 2 on
>>might have been what I was thinking of.
>That's the old wiki. The new one gives the opposite advice! (As does
>the ghc manual):
>  http://www.haskell.org/ghc/docs/latest/html/users_guide/faster.html
>  http://www.haskell.org/haskellwiki/Performance/Floating_Point

Incidentally, the latter page implies that ghc is being overly
pessimistic when compilling FP code without -fexcess-precision:

 "On x86 (and other platforms with GHC prior to version 6.4.2), use
  the -fexcess-precision flag to improve performance of floating-point
  intensive code (up to 2x speedups have been seen). This will keep
  more intermediates in registers instead of memory, at the expense of
  occasional differences in results due to unpredictable rounding."

IIRC, it is possible to issue an instruction to the x86 FP unit which
makes all operations work on 64-bit Doubles, even though there are
80-bits available internally. Which then means there's no requirement
to spill intermediate results to memory in order to get the rounding

Ideally, -fexcess-precision should just affect whether the FP unit
uses 80 or 64 bit Doubles. It shouldn't make any performance
difference, although obviously the generated results may be different.

As an aside, if you use the -optc-mfpmath=sse option, then you only
get 64-bit Doubles anyway (on x86).

cheers, Phil

http://www.kantaka.co.uk/ .oOo. public key: http://www.kantaka.co.uk/gpg.txt

More information about the Haskell-Cafe mailing list