Hello,

            I’m testing the performance of OSG 1.2 with 2 displays (2 video cards (NVIDIA) with 1 display each and 2 CPUs dual core). I had strange results so I need help to understand. (I tested it on an application like OsgViewer). I used the stats option and some “printf()”, I got these numbers:

 

With 4 cameras with same view, 4 contexts (4 windows 640 / 512, two windows on each display). At this point, I have 4 threads for the cameras:

FPS: 19.5                    

Update: 0.29 ms

Cull: 2.4 ms       Draw: 40 ms      GPU: 32 ms      Swap Buffers: 2.5 ms

Cull: 1.9 ms       Draw: 38 ms      GPU: 34 ms      Swap Buffers: 3.2 ms

Cull: 2.3 ms       Draw: 38 ms      GPU: 26 ms      Swap Buffers: 3.9 ms

Cull: 1.9 ms       Draw: 38 ms      GPU: 26 ms      Swap Buffers: 6.4 ms

 

Total:    Cull: 2.4 ms       Draw: 40 ms      Swap Buffers: 6.4 ms     = 20.49 Hz

 

With 4 cameras with same view, 1 context (1 window 2560 / 512, half of the window on each display). At this point, I have 1 thread for the cameras:

FPS: 39.7                    

Update: 0.18 ms

Cull: 1.2 ms       Draw: 5.4 ms     GPU: 0.6 ms    

Cull: 1.3 ms       Draw: 3.5 ms     GPU: 1.4 ms    

Cull: 1.2 ms       Draw: 3.5 ms     GPU: 0.5 ms    

Cull: 1.3 ms       Draw: 3.5 ms     GPU: 0.5 ms    

 

Total:    Cull: 5 ms         Draw: 15.9 ms   Swap Buffers: 4.3 ms     = 39.7 Hz

 

Why drawing stage is ten times larger (for each camera) when the threads are used?

 

I supposed that each camera calls glCallList() and for that, the threads don’t have access to GPUs simultaneously. I tried to force the drawing stage to be sequential (I used a mutex around sh->draw( *this ) in Producer::Camera). I obtained these results:

 

With 4 cameras with same view, 4 contexts (4 windows 640 / 512, two windows on each display). At this point, I have 4 threads for the cameras:

FPS: 37                       

Update: 0.32 ms

Cull: 2.0 ms       Draw: 3.7 ms     GPU: 0.9 ms     Swap Buffers: 7.5 ms

Cull: 2.3 ms       Draw: 3.3 ms     GPU: 5.1 ms     Swap Buffers: 8.0 ms

Cull: 1.9 ms       Draw: 3.3 ms     GPU: 1.6 ms     Swap Buffers: 7.5 ms

Cull: 2.4 ms       Draw: 3.5 ms     GPU: 1.5 ms     Swap Buffers: 10.4 ms

 

Total:    Cull: 2.4 ms       Draw: 13.8 ms   Swap Buffers: 10.4 ms   = 37.6 Hz

 

Now I get better performance when the drawing stage is sequential (?!?why?!?) but the Swap Buffers take almost the double times of the initial configuration. I’m not very familiar with the SwapBuffers() function, so if someone who wants to tell me how it works (to explain why SwapBuffers() time are not always the same), it will be appreciated :)

 

Mathieu

 

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to