Hi John,

This is odd but it sounds bit like swap buffers of the windows are somehow waiting for each other. I believe that WGL_NV_swap_group extension is not used by OSG. This extension could possible help you there.

But I could be wrong on above. It is not really my main point I wanted to mention. Instead I wanted to suggest you check SLI mosaic mode. We have done some experiments on 4 channels on Linux / Nvidia QuadroPlex D2 in the past. At first we tried to go the same path as you describe. But later we have read somewhere that fastest method is to use one window filing whole desktop and split this window into 4 screen quarter slave views. Each slave view could be positioned so that it covers one monitor output. Such 4 monitor setup is possible with QP D2 drivers in SLI mosaic mode.

Using producer config files one may easily create a .cfg that could be passed from command line to osgViewer and set 4 channel slaves on single window. Best thing with using one window is that all four views use the same context so GL resources are shared and all four are swaped at once with single SwapBuffer call.

In our project we ended up with 4 channel rendering using SLI mosaic and we were pleasently surprised how fast it was performing in comparison to separate gl contexts on 4 windows. You may check SLI mosaic if you haven't done this before....

Hope this helps,
Wojtek Lewandowski
--------------------------------------------------
From: "John Kelso" <[email protected]>
Sent: Thursday, October 07, 2010 9:35 PM
To: <[email protected]>
Subject: [osg-users] OSG seems to have a problem scaling to multiple windows on multiple graphics cards

Hi all,

Our immersive system is a single host computer with 8 cores and 4 graphics
cards running Linux. (1)  We are using OSG 2.8.3.

We are having a heck of a hard time getting OSG to take advantage of
our multiple graphics cards.  Help!

Here's what we did:

If we load a fairly large model into our test program we can get a frame
rate of about 150 FPS when displaying in a single window. (2) We are
running single-threaded, and assign to a specific core.

When we background this and run a second copy of the program to another
graphics card and core then both programs run at 150 FPS.  Same thing for
running three and four copies at once.

That is, four processes using four graphics cards on four cores run just as
fast as a single process.  All four cores are at near 100% CPU utilization
according to top.  So far, so good.

Now we modify the program to load the model and create multiple windows on
multiple cards.  There's one window per card and each uses a different
core. (3)

The threading model is "CullThreadPerCameraDrawThreadPerContext", the
default chosen by OSG. The environment variable OSG_SERIALIZE_DRAW_DISPATCH
is not set, so it defaults to ON, which we think means draw in serial.

If we draw to four windows on four different cards we get about 36 FPS.
There are four different cores being used, and each has about 25% of the
CPU. This probably this makes sense as the draws are in serial. 150 FPS/4 is about 36 FPS. As expected, we get nearly identical results if we create
four windows on a single card using four different cores.

If we set OSG_SERIALIZE_DRAW_DISPATCH=OFF we hope to see better performance, but with four windows on four graphics cards we only get 16 FPS! There are
four different cores bring used, one at about 82%, and the other three at
75%, but what are they doing?  Again, we get nearly identical results if
using four windows on a single card.

So....

How can we get OSG to draw to four windows on four cards in one process as
fast as running four separate processes?

Any pointers or suggestions are welcome.

Thanks,

John


1 - Our immersive system consists of 3 projectors and a console each driven
    by an Nvidia FX5800 graphics card all genlocked for 3D stereo
    display. The four graphics cards are in two QuardoPlex Model D2 units
    connected to the host.  The host computer is an 8 core Dell Precision
    T5400 running 64 bit Linux (CentOS 5.5). We are using Nvidia driver
    version 195.36.24

2 - the program is attached- it uses only OSG.  We run our tests with
    _GL_SYNC_TO_VBLANK=0 to get the maximum frame rate.

3 - one graphics context per window and one camera per window



_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to