Boost logo

Boost Users :

Subject: [Boost-users] [Parallel Boost Graph Library] General Questions and Redistribution Questions
From: Jun Kudo (junkudo18_at_[hidden])
Date: 2016-05-24 16:40:39


Hi everyone,
I've been playing around with the Parallel Boost Graph Library in hopes of
using it for a distributed mesh with redistribution capabilities.
Unfortunately, I've been having a lot of issues and I was hoping to get
some clarification from the community on some points.

I am trying to construct a distributed graph that represents a mesh. The
idealized plan is to use this library to create a mesh class that allows
for the easy introduction of new vertices and edges as well as
repartitioning/data migration capabilities. For this effort, I created a
simple struct called Cell that is attached as an interior vertex property
and identified the cell id value as the key for indexing. I've attached a
short program to really quickly demonstrate what I've been trying to
prototype. At this point, I have some questions regarding some things
about the library that I can't seem to figure out.

1. How do you control the initial distribution of the names? That is, how
do you control which processes own what vertex names when you dynamically
add named vertices?

2. How do you create a VertexProcessorMap to use with the redistribution
function? The test adjlist_redist_test.cpp looks like it creates a
property_map of the vertex_rank but I'm not sure how to do something
similar when I have named graph.

3. Is there any way and any point to accomplish what I'm trying to do
without using named graphs? I started down this route because the
referenced test did not use named graphs. I quickly ran into a situation
where I did not know how to grab a vertex descriptor for an off-process
vertex without using the vertex(vertices_size_type n, const adjacency_list&
g) function or without knowing a priori where that vertex lived. Similar
to the named graph situation, I want to be able to dynamically add numbered
vertices (which according to the documentation invalidates the use of
vertex()) on different processes and then define edges between them based
on these numbers. Does the fact that I'm trying to use a global numbering
system as a name convention make this question silly?

Sorry about the wall of text and I hope my questions are not too
nonsensical!
Thanks in advance for all the help.

Sincerely,
Jun





Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net