[HOpenGL] GlxGears

Shawn P. Garbett listman at garbett.org
Tue Mar 16 07:08:08 EST 2004


On Tuesday 16 March 2004 3:16 am, Simon Marlow wrote:
> > 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 #-}.

Cool I'll work on these items. These are all things I understand in 
concept, but haven't got hands on experience yet.

One of my goals is to have a "naive" implementation. Then have an 
"optimized" implementation. Then both of these could be compared on a 
web page somewhere for understanding of what's required to get 
something up to speed.

An earlier version I had, was regenerating the DisplayLists every time 
(a ton of trig). This was the first and most obvious optimization. I 
may for comparison sake put that back in.

I've got an earlier array access example with optimization comparison, 
that could serve as a more trival example. I think these would be of 
help to a new developer.

Shawn


More information about the HOpenGL mailing list