[Paraview] Some D3 and MPI questions
John Biddiscombe
biddisco at cscs.ch
Mon Nov 20 03:32:41 EST 2006
Part 1 : D3
I'd like to add the DistributedDataFilter into one of our readers. It
cannot necessarily partition the data well at read time due to the
format of the data so having the readers do the distribution using D3 is
my best bet.
When the TimeStep changes, the geometry changes. I'd like to use the
"// Enhancement: You can set the k-d tree decomposition, rather than
// have D3 compute it. This allows you to divide a dataset using
// the decomposition computed for another dataset. Obtain a description
// of the k-d tree cuts this way:"
Capability, to generate the BSP tree when the first time step is loaded,
and then re-use it when successive steps are loaded. However, I'm
slightly uncertain about one (actually more) thing.
It goes on to say
" // When this filter executes, it creates a vtkPKdTree (K-d tree)
// data structure in parallel which divides the total distributed
// data set into spatial regions. The K-d tree object also creates
// tables describing which processes have data for which
// regions. Only then does this filter redistribute
// the data according to the region assignment scheme."
Now as each time step is produced, one part of the mesh is rotating, it
occupies the same space, so the BSP partition should be fine (providing
some small tolerance is allowed for), but the partitioning/allocation of
cells between the spatial regions is going to be changing. I don';t want
the BSP tree to store the partitioning of cells between processors, only
the spatial regions themselves.
If I save the BSPCuts (vtkBSPCuts *cuts =
D3Object1->GetKdtree()->GetCuts()) and re-use it on later time steps, is
there a way I can tell the D3 filter to not re-use the cell allocation
between processors, but instead to recompute it using the cuts provided.
Perhaps it will do this if I SetRetainKdtree(0), but supply the Cuts
from above.
Have I understood this correctly. If not, is there a way of achieving
what I want.
Part 2 : MPI/D3
If I create a D3 filter with an instantiation in each process as part of
the reader, I will assign the MPI controller using the
SetController(this->Controller) and this Controller was taken from
MPIController::GetGlobalController - but this seems dangerous, because
if I later turn on ordered compositing, or perhaps use a D3 filter in
the pipeline, how does the MPI controller know which D3 filter belongs
to which part of the pipeline. There will be two D3 filters per process
one in the reader and one later in the pipeline and they both have the
same RMI signatures. What should I do to ensure that the D3 in the
reader doesn't send data to the D3 in the compositor and vice versa.
Previously when I've used the MPI communicator, there has been only one
of my filters per process so no possible conflict.
Thanks
JB
--
John Biddiscombe, email:biddisco @ cscs.ch
http://www.cscs.ch/about/BJohn.php
CSCS, Swiss National Supercomputing Centre | Tel: +41 (91) 610.82.07
Via Cantonale, 6928 Manno, Switzerland | Fax: +41 (91) 610.82.82
More information about the ParaView
mailing list