[vtkusers] How to visualize thousands of actors with good performance

Bill Lorensen bill.lorensen at gmail.com
Wed Sep 29 08:57:52 EDT 2010


Do you build these in Release configuration?

On Wed, Sep 29, 2010 at 3:24 AM, Affolter Martin <martin.affolter at ntb.ch> wrote:
> Sean
>
> Thanks for your reply.
>
> First some information on our Hard- and Software:
> VTK: v 5.6
> OS: Windows XP SP3
> CPU: Intel Core2 Quad 2.83 GHz
> RAM: 3.25 GB
> GPU: ATI radeon HD 3400 series (latest drivers)
>
> We're developing in Visual Studio 2010 which comes with a profiler. I profiled the application in "sample-mode" which means, the profiler looks at the stack in certain intervals and sums up the occurrence of the functions on the stack. Inclusive samples means the function is on the stack, exclusive samples means the function is being processed by the cpu.
>
> Following recorded data is during rotation only, using static mappers. The first part is the "hot path" shown in the summary. Subpaths (A) and (B) are listed in detail below:
>
>
> ----------------------------------Profiling results------------------------------->
>
> Function Name   Inclusive Samples       Exclusive Samples       Module Name
>
> ARinnotech.exe  9'232   0
> __CorExeMain_Exported at 0 9'230   0       mscoree.dll
> Unknown Frame(s)        9'194   0       UNKNOWN
> (A) ClassCAD.ManVTKView.HandleWindowMessage(native int,int32,native int,native int)     2'979   0       DotNetInterface.dll
> (B) vtkRenderWindow::DoStereoRender(void)       2'321   0       vtkRendering.dll
> (C) [atioglxx.dll]      1'004   165     atioglxx.dll
>
> (A) ClassCAD.ManVTKView.HandleWindowMessage(native int,int32,native int,native int)     2'979   0       DotNetInterface.dll
> StubHelpers::SetLastError(void) 2'979   0       clr.dll
> ClassCAD::VTKView::HandleWindowMessage(struct HWND__ *,unsigned int,unsigned int,long)  2'979   0       VTKGrEditor.dll
> ClassCAD::ClassCadInteractor::HandleWindowMessage(struct HWND__ *,unsigned int,unsigned int,long)       2'979   0       VTKGrEditor.dll
> vtkWin32RenderWindowInteractor::OnMouseMove(struct HWND__ *,unsigned int,int,int)       2'979   0       vtkRendering.dll
> vtkObject::InvokeEvent(unsigned long,void *)    2'978   0       vtkCommon.dll
> vtkSubjectHelper::InvokeEvent(unsigned long,void *,class vtkObject *)   2'978   0       vtkCommon.dll
> vtkCallbackCommand::Execute(class vtkObject *,unsigned long,void *)     2'977   0       vtkCommon.dll
> ClassCAD::InteractorStyleTrackballSelection::OnMouseMove(void)  2'977   0       VTKGrEditor.dll
> ClassCAD::InteractorStyleTrackballSelection::Rotate(void)       2'721   0       VTKGrEditor.dll
> vtkRenderer::ResetCameraClippingRange(void)     2'036   0       vtkRendering.dll
> vtkRenderWindowInteractor::Render(void) 684     0       vtkRendering.dll
> vtkRenderWindow::Render(void)   683     0       vtkRendering.dll
> vtkObject::InvokeEvent(unsigned long,void *)    673     0       vtkCommon.dll
> vtkSubjectHelper::InvokeEvent(unsigned long,void *,class vtkObject *)   673     504     vtkCommon.dll
>
> (B) vtkRenderWindow::DoStereoRender(void)       2'321   0       vtkRendering.dll
> vtkRendererCollection::Render(void)     2'321   0       vtkRendering.dll
> vtkRenderer::Render(void)       2'321   88      vtkRendering.dll
> vtkRenderer::AllocateTime(void) 2'223   38      vtkRendering.dll
> vtkFrustumCoverageCuller::Cull(class vtkRenderer *,class vtkProp * *,int &,int &)       2'163   151     vtkRendering.dll
> vtkActor::GetBounds(void)       2'000   129     vtkRendering.dll
> vtkPainterPolyDataMapper::GetBounds(void)       1'776   69      vtkRendering.dll
> vtkPainter::UpdateBounds(double * const)        570     488     vtkRendering.dll
> vtkPolyDataMapper::GetInput(void)       548     3       vtkRendering.dll
> vtkExecutive::GetNumberOfInputConnections(int)  289     106     vtkFiltering.dll
> vtkExecutive::InputPortIndexInRange(int,char const *)   144     69      vtkFiltering.dll
> vtkAlgorithm::GetNumberOfInputPorts(void)       75      75      vtkFiltering.dll
>
> <---------------------------------Profiling results-------------------------------
>
> Your stack trace and subpath B seem to start off identically but then different functions are consuming more cpu time... Maybe that's because of the static mappers. Do you see anything suspicious?
>
> What vtk Version do you use and how is the performance rotating your 10'000 actors scene?
>
> Regards
> Martin Affolter
>
> -----Ursprüngliche Nachricht-----
> Von: Sean McBride [mailto:sean at rogue-research.com]
> Gesendet: Dienstag, 28. September 2010 19:03
> An: Affolter Martin; 'Bill Lorensen'
> Cc: vtkusers at vtk.org
> Betreff: Re: [vtkusers] How to visualize thousands of actors with good performance
>
> On Tue, 28 Sep 2010 15:04:54 +0200, Affolter Martin said:
>
>>Thanks for your suggestion. I had tried static mappers before,
>>unfortunately without the Update()-call. Now I understand why the faces
>>didn't show the first time (only edges and vertices). Anyway I tried it
>>again just now. There is a slight performance increase noticable, but
>>still no match to the performance in VTK 4.4., where the scene (8000
>>actors) can be rotated smoothly.
>
> Have you tried profiling your app?  Where are the bottlenecks?
>
> (What OS are you on?  If Mac OS X, you can use Instruments.app to
> measure where your bottlenecks are.  I'm sure other OSes have similar tools.)
>
> In our case, when we have about 10000 actors, and rotate the scene, the
> heaviest stack trace is:
>
> main
> ...
> -[vtkCocoaGLView drawRect:]
> vtkRenderWindow::Render()
> vtkRenderWindow::DoAARender()
> vtkRenderWindow::DoFDRender()
> vtkRenderWindow::DoStereoRender()
> vtkRendererCollection::Render()
> vtkRenderer::Render()
> vtkOpenGLRenderer::DeviceRender()
> vtkRenderer::UpdateGeometry()
> vtkActor::RenderOpaqueGeometry(vtkViewport*)
> vtkOpenGLActor::Render(vtkRenderer*, vtkMapper*)
> vtkPolyDataMapper::Render(vtkRenderer*, vtkActor*)
> vtkPainterPolyDataMapper::RenderPiece(vtkRenderer*, vtkActor*)
> vtkDefaultPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::RenderInternal(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkOpenGLScalarsToColorsPainter::RenderInternal(vtkRenderer*, vtkActor*,
> unsigned long, bool)
> vtkPainter::RenderInternal(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkOpenGLClipPlanesPainter::RenderInternal(vtkRenderer*, vtkActor*,
> unsigned long, bool)
> vtkPainter::RenderInternal(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkOpenGLDisplayListPainter::RenderInternal(vtkRenderer*, vtkActor*,
> unsigned long, bool)
> gleCallList
>
> --
> ____________________________________________________________
> Sean McBride, B. Eng                 sean at rogue-research.com
> Rogue Research                        www.rogue-research.com
> Mac Software Developer              Montréal, Québec, Canada
>
>
>



More information about the vtkusers mailing list