Skip to content

[2/3] vtkCellArray: Allow different types of connectivity and offset arrays

  • Depends on !10768 (merged)
  • This merge request is prerequisite for GPU-resident Catalyst2 ParaView pipelines.
  • Allows different types of vtkDataArray instances for the connectivity and offsets in a vtkCellArray with vtkCellArray::SetData(vtkDataArray* offsets, vtkDataArray* conn)without VTK deep copying the data arrays.
  • The already written unit test TestCellArrayTraversal.cxx was used to benchmark insertions and cell traversal for 32-bit, 64-bit and the new generic storage mechanisms.
vtkCellArray performance in VTK master branch (release build)
=== vtkIdType is: 64 bits ===

=== Test performance of new vtkCellArray: 32-bit storage ===
Insert triangles: 0.00650096
   500000 triangles inserted
   Memory used: 10240 kb
Traverse cell array (legacy GetNextCell()): 0.00633001
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdType&, vtkIdType const*&)): 0.00484991
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdList*)): 0.00345111
   500000 triangles visited
Iterator traversal: 0.00448799
   500000 triangles visited

=== Test performance of new vtkCellArray: 64-bit storage ===
Insert triangles: 0.0158331
   500000 triangles inserted
   Memory used: 20480 kb
Traverse cell array (legacy GetNextCell()): 0.00509095
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdType&, vtkIdType const*&)): 0.00367498
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdList*)): 0.00581717
   500000 triangles visited
Iterator traversal: 0.00511384
   500000 triangles visited
vtkCellArray performance in merge request !10769 (release build)
=== vtkIdType is: 64 bits ===

=== Test performance of new vtkCellArray: 32-bit storage ===
Insert triangles: 0.0123701
   500000 triangles inserted
   Memory used: 10240 kb
Traverse cell array (legacy GetNextCell()): 0.0150111
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdType&, vtkIdType const*&)): 0.00833321
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdList*)): 0.00542688
   500000 triangles visited
Iterator traversal: 0.00471711
   500000 triangles visited

=== Test performance of new vtkCellArray: 64-bit storage ===
Insert triangles: 0.00846791
   500000 triangles inserted
   Memory used: 20480 kb
Traverse cell array (legacy GetNextCell()): 0.00213885
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdType&, vtkIdType const*&)): 0.00148582
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdList*)): 0.00397396
   500000 triangles visited
Iterator traversal: 0.00213099
   500000 triangles visited

=== Test performance of new vtkCellArray: generic storage ===
Insert triangles: 0.0203838
   500000 triangles inserted
   Memory used: 2049 kb
Traverse cell array (legacy GetNextCell()): 0.0210679
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdType&, vtkIdType const*&)): 0.02091
   500000 triangles visited
Traverse cell array (new GetCellAtId(vtkIdType, vtkIdList*)): 0.019032
   500000 triangles visited
Iterator traversal: 0.020035
   500000 triangles visited
Edited by Jaswant Panchumarti (Kitware)

Merge request reports