[vtk-developers] vtkPKdTree algorihm
Biddiscombe, John A.
biddisco at cscs.ch
Mon Apr 19 03:30:14 EDT 2010
Thanks Ken, the Floyd and Rivest paper was what I was basically after.
[If you know of explicit publications of parallelized versions of it, please say. If someone has formally done it, it'd be nice to know]
JB
> -----Original Message-----
> From: Moreland, Kenneth [mailto:kmorel at sandia.gov]
> Sent: 16 April 2010 00:09
> To: Biddiscombe, John A.; vtk-developers at vtk.org
> Subject: Re: [vtk-developers] vtkPKdTree algorihm
>
> Lee Ann (now Riesen after getting married) left our group many years ago and
> has not looked at the code for a long time. If you want to email her, her
> address is lriesen at sandia.gov, but she probably won't remember much.
>
> We wrote a paper on the parallel rendering in ParaView, which used the then
> newly created vtkPKdTree. Section 4.4 has some scant details on the
> algorithms in that class. You can get the paper from my web site.
>
>
>
> http://www.cs.unm.edu/~kmorel/documents/ParallelVolRen.html
>
>
>
> The overall algorithm is straightforward: iteratively pick axis-aligned
> planes to divide the data. The most interesting part is how it picks the
> coordinate value on which to split. It uses a parallelization of the
> "select" algorithm by Floyd and Rivest (referenced in our paper) to find the
> plane that splits cells into two regions with the same number of cells. The
> select algorithm does this in less than O(n log n) time on average (where n
> is the number of cells).
>
> I've considered trying to make performance improvements to vtkPKdTree, but
> I've never had the time. If you are interested, here are some of the areas
> that would have the biggest impact. Consider each of these prefixed with
> the words "I think" because it has been a while since I have looked at the
> code myself.
>
>
>
> * The select algorithm's complexity is measured in terms of
> comparisons, but data copies are ignored. In parallel, the data copies are
> typically expensive whereas comparisons are cheap. The current parallel
> select algorithm performs several rounds of data transfer before settling on
> the middle value. You might be able to make it faster holding off any data
> transfer until the end.
> * At each stage in the algorithm, all processes participate in the
> division of each region, even if those regions have no data involved with
> the region. It would be much more efficient, for example, if after making
> the first division half the processes recursed in one region while the other
> half recursed in the other region concurrently. This behavior is probably
> to support the number of regions being created may not be equal to or a
> multiple of the number of processes. However the most common (probably
> only) real use case is to evenly break up the data for the processes
> generating the tree.
> * vtkPKdTree is only able to make a number of partitions that is a
> power of 2. This is because the cells are always divided in half. However,
> it would be fairly trivial to support any number of partitions. When
> dividing a region, check to see that the number of remaining regions is
> evenly divisible by 2. If not, assign a number of regions to each side that
> differ by one, and then select a plane that divides the cells proportionally
> rather than exactly evenly. This itself won't make vtkPKdTree faster, but
> it is probably necessary to implement the previous suggestion. It would
> also make D3 work a lot better on non power of 2 process counts.
> * The select algorithm finds the the exact location to split to get
> even cell counts. However, I can't think of a real situation where it is
> that important to have exactly the same number of cells in each region. If
> the select algorithm were only required to get "close enough" to the optimal
> value (say, off by 10%), perhaps several iterations could be shaved off and
> it might go faster.
>
>
>
> -Ken
>
>
> On 4/15/10 3:18 AM, "Biddiscombe, John A." <biddisco at cscs.ch> wrote:
>
>
>
> Looks as though "Lee Ann Fisk" from sandia was responsible - does
> anyone have a valid email address for her(?)
>
> thanks
>
> JB
>
> > -----Original Message-----
> > From: vtk-developers-bounces at vtk.org [mailto:vtk-developers-
> bounces at vtk.org]
> > On Behalf Of Biddiscombe, John A.
> > Sent: 13 April 2010 09:29
> > To: vtk-developers at vtk.org
> > Subject: [vtk-developers] vtkPKdTree algorihm
> >
> > Does anyone on the list know in any detail what algorithm(s) are
> made us of
> > within the PKdTree code. I'd like to make customizations of some of
> the
> > parallelization aspects, but before I start I'd like to fully
> understand the
> > code.
> >
> >
> >
> > If there are any references I can look up, it'd help greatly.
> >
> >
> >
> > Thanks
> >
> >
> >
> > JB
> >
> >
> >
> > --
> >
> > John Biddiscombe, email:biddisco @
> cscs.ch
> >
> > http://www.cscs.ch/ <http://www.cscs.ch/>
> >
> > CSCS, Swiss National Supercomputing Centre | Tel: +41 (91)
> 610.82.07
> >
> > Via Cantonale, 6928 Manno, Switzerland | Fax: +41 (91)
> 610.82.82
> >
> >
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
>
>
>
>
>
> **** Kenneth Moreland
> *** Sandia National Laboratories
> ***********
> *** *** *** email: kmorel at sandia.gov
> ** *** ** phone: (505) 844-8919
> *** web: http://www.cs.unm.edu/~kmorel
>
More information about the vtk-developers
mailing list