[vtkusers] vtkDistributedDataFilter::SingleProcessExecute()

Kilian Werner kwerner at rhrk.uni-kl.de
Mon Nov 13 10:25:42 EST 2017


Dear list,

for a distributed contour tree computation I am currently 
trying to split vtk data among mutliple nodes (that do not 
have shared memory).
I am reading data from a file with a 
vtkXMLUnstructuredGridReader, there are no 
overlappings/ghost cells in the data at this point.
The result should be a vtkUnstructuredGrid of one 
spatially contiguous part of the data per node including 
one layer of ghost cells.

While vtkDistributedDataFilter seems to be doing just what 
I want, I do not use MPI for communication between nodes, 
but a task-parallel framework (called HPX).
Because of the task parallel nature, I explicitly do not 
want the data splitting to require messages between nodes.
Therefore the usual usage of vtkDistributedDataFilter with 
setController and implicit call of execute() through 
pipeline demands is not suitable for me.

There is however word of  "an explicit execution mode" in 
the documentation 
https://www.vtk.org/doc/nightly/html/classvtkDistributedDataFilter.html 
and I somewhat suspect that this involves a direct call to 
SingleProcessExecute();

With this however I have two(three) questions:

0.) Are my assumptions about SingleProcessExecute() and 
"an explicit execution mode" correct? Is there a way to 
perform data segmentation with vtkDistributedDataFilter 
"offline" as in not using the communication controller and 
not sending any mpi messages?

1.) If this offline segmentation is possible, how do I let 
vtkDistributedDataFilter know how many segments should be 
created and which one of them should be outputted? I do 
have that information per node even without using MPI, but 
where do I put the numbers, now that there is no 
communication controller?

2.) How do I request Ghost Cells, when not using the 
typical downstream pipeline demands? I assume that 
SingleProcessExecute() will not wait for any update() of 
any pipeline but start immediately, how to assure it 
creates ghost cells at that moment?
Is it enough to extend vtkDistributedDataFilter with a 
custom class that overrides RequestData() and increases 
the ghost cells info? Or will this info be ignored by 
SingleProcessExecute() since it does not generate Output 
in the pipeline sense?

Thank you in advance for your time,

Kilian Werner

P.S.: Maybe I could achieve the same results with an 
vtkOBBDicer + vtkThresholdFilter but how would I make the 
ThresholdFilter output ghost cells in this scenario?


More information about the vtkusers mailing list