Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: Performance problem with Haskell/OpenGL/GLFW
(Jesper S?rnesj?)
2. Re: Performance problem with Haskell/OpenGL/GLFW
(Jesper S?rnesj?)
----------------------------------------------------------------------
Message: 1
Date: Sun, 10 Mar 2013 16:46:58 +1100
From: Jesper S?rnesj? <[email protected]>
Subject: Re: [Haskell-beginners] Performance problem with
Haskell/OpenGL/GLFW
To: [email protected]
Message-ID:
<calex+wgnlfgepmh4zrzqobuqh4qdvu6+4mo49o5ggybu8ur...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
On Fri, Mar 8, 2013 at 11:25 PM, Jesper S?rnesj? <[email protected]> wrote:
> The program's CPU usage is quite high in general, and increases with
> the number of pixels redrawn per frame. It uses OpenGL 3.2, does most
> of its work on the GPU, and should do a constant amount of work per
> frame on the CPU, so this makes little sense.
>
> I've created a smaller program (still 91 lines, though), which renders
> a single triangle, but still reproduces this problem. If I make the
> triangle smaller (by editing vertexData), CPU usage goes down, and if
> I make it bigger, CPU usage goes up. [1]
>
> I've also created a C program which does the same thing (as far as
> possible), but which does not exhibit this problem. CPU usage is far
> lower, and stays constant regardless of the number of pixels redrawns
> per frame. [2]
I've figured out what the problem is: the Haskell program is using a
software implementation of OpenGL, so rendering *does* in fact happen
on the CPU.
This seems to happen because I request a renderer conforming to the
OpenGL 3.2 Core profile, while running on Mac OS X 10.8.2 [3]. If I
remove those lines from displayOptions, the program receives a
hardware-accelerated renderer. Of course, then I can't use features
from OpenGL 3.2, so that's hardly a solution.
It would appear that there is in fact some relevant difference between
the Haskell [1] and C [2] versions of my program, or possibly some way
in which the bindings from the GLFW-b package are different from the C
library.
I've updated my programs to check for hardware acceleration and also
print the GLFW and OpenGL versions. [4]
--
Jesper S?rnesj?
http://jesper.sarnesjo.org/
[1] https://gist.github.com/sarnesjo/5116084#file-test-hs
[2] https://gist.github.com/sarnesjo/5116084#file-test-c
[3]
http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_pixelformats/opengl_pixelformats.html
[4] https://gist.github.com/sarnesjo/5116084/revisions
------------------------------
Message: 2
Date: Sun, 10 Mar 2013 20:38:07 +1100
From: Jesper S?rnesj? <[email protected]>
Subject: Re: [Haskell-beginners] Performance problem with
Haskell/OpenGL/GLFW
To: [email protected]
Message-ID:
<calex+wi0p2ag2fdiangrcafhbm43gz3n5zwzfcmfvgpfi80...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
On Sun, Mar 10, 2013 at 4:46 PM, Jesper S?rnesj? <[email protected]> wrote:
> I've figured out what the problem is: the Haskell program is using a
> software implementation of OpenGL, so rendering *does* in fact happen
> on the CPU.
>
> It would appear that there is in fact some relevant difference between
> the Haskell and C versions of my program, or possibly some way
> in which the bindings from the GLFW-b package are different from the C
> library.
To remove any possibility of the problem being in GLFW-b or OpenGLRaw,
I created two new programs, one in Haskell [1] and one in C [2], that
don't import or include anything related to OpenGL, and that simply
create a context, check if it is hardware accelerated, and then exit.
That is all. And still, the Haskell program receives a software
renderer, while the C program receives a hardware one:
$ ghc -O2 Test2.hs -lglfw -framework OpenGL -fforce-recomp && ./Test2
[1 of 1] Compiling Main ( Test2.hs, Test2.o )
Linking Test2 ...
software
(2,7,7)
(3,2,0)
$ gcc -O2 test2.c -lglfw -framework OpenGL && ./a.out
hardware
2.7.7
3.2.0
I haven't had the chance to run these programs on any OS other than
Mac OS X 10.8.2, so I don't know if this problem is Mac-specific.
Still, it's really weird that the system would differentiate between
Haskell and C programs in this way.
If anyone has any ideas about what's going on here, I'd very much like
to hear them.
--
Jesper S?rnesj?
http://jesper.sarnesjo.org/
[1] https://gist.github.com/sarnesjo/5116084#file-test2-hs
[2] https://gist.github.com/sarnesjo/5116084#file-test2-c
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 57, Issue 9
****************************************