[HOpenGL] GlxGears

Simon Marlow simonmar at microsoft.com
Tue Mar 16 09:16:57 EST 2004


 
> Shawn P. Garbett wrote:
> > [...]
> > Haskell Version on my laptop, FPS = 103
> > C Version on my laptop, FPS = 192
> > [...]
> 
> I just gave your example a quick try on my PC, the results do 
> not differ
> that much for my setup (SuSE x86 Linux 8.2, 3GHz P4, NVIDIA FX 5900):
> 
>     Haskell version: 6000 FPS
>     C version: 7165 FPS
> 
> Curiously, using -O for the Haskell compilation doesn't make 
> any difference.
> I'll take a closer look with GHC's profiler and the ltrace 
> tool when I get
> some time.
> 
> Thanks for the conversion BTW, I'd like to place this example 
> into GLUT'S
> "Misc" example directory, with a BSD-like license. Would that be OK?

There's a performance problem we discovered recently in GHC where code
like this:

   case _ccall_ f ... of
        (# s, r #) ->  ...

would result in an out-of-line call to f instead of the expected inline
call.  This might affect you.  Also, make sure that HOpenGL doesn't use
the FFI facility to specify include files in a foreign import
declaration: this prevents cross-module inlining of the call in GHC.

Otherwise, the usual tricks apply: looks like the code has lots of
Floats sloshing around, so try to get them unboxed as much as possible.
If you store Floats/Doubles in a data structure, try using ! {-# UNPACK
#-}.

Cheers,
	Simon


More information about the HOpenGL mailing list