[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