|
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/
