Distribution class for the stapl::graph container. More...
Public Member Functions | |
graph_distribution_static (directory_type const &directory, container_manager_type const &bcmangr) | |
Creates a distribution with the specified directory and base container manager. More... | |
graph_distribution_static (partition_type const &partition, mapper_type const &mapper) | |
Copy construction of this distribution. More... | |
graph_distribution_static (partition_type const &partition, mapper_type const &mapper, value_type const &default_value) | |
Create a distribution with an initial value for elements. More... | |
graph_distribution_static (partition_type const &partition) | |
Create a distribution with default constructed elements and a default mapper. More... | |
bool | is_directed (void) const |
template<typename Frontier > | |
void | set_frontier (Frontier *frontier) |
Set the frontier for the current traversal on this graph. | |
template<typename Frontier > | |
Frontier * | get_frontier () |
Get the frontier for the current traversal on this graph. | |
void | sort_edges_ascending (void) |
Sorts edges of each vertex in ascending order of target-vertex-id. More... | |
void | sort_edges_locality (void) |
Sorts edges of each vertex by home-location of target-vertex. More... | |
template<typename Comp > | |
void | sort_edges (Comp const &comp) |
Sorts edges of each vertex by user-defined comparison function. More... | |
template<typename Pred > | |
void | erase_edges_if (Pred &&pred) |
Erases all edges that match a user-defined predicate. More... | |
void | remove_duplicate_edges () |
Removes all duplicate edges with the same (source, target) pair. | |
iterator | begin (void) |
const_iterator | begin (void) const |
iterator | end (void) |
const_iterator | end (void) const |
void | reserve_adjacency (vertex_descriptor const &gid, size_t num_adjacents) |
vertex_descriptor | add_vertex (vertex_property const &vp) |
Adds a vertex to the pGraph with the given property. More... | |
vertex_descriptor | add_vertex (vertex_descriptor const &gid, vertex_property const &vp) |
Adds a vertex to the pGraph with the given property and descriptor. More... | |
bool | delete_vertex (vertex_descriptor const &gid) |
Deletes a vertex from the pGraph with the given descriptor. This method is asynchronous. More... | |
iterator | find_vertex (vertex_descriptor const &gid) |
iterator | find (vertex_descriptor const &gid) |
edge_descriptor | add_edge (edge_descriptor const &ed) |
edge_descriptor | add_edge (edge_descriptor const &ed, edge_property const &ep) |
void | add_edge_async (edge_descriptor const &ed) |
void | add_edge_async (edge_descriptor const &ed, edge_property const &ep, bool sister=false) |
template<typename Comp > | |
edge_descriptor | insert_edge (edge_descriptor const &ed, edge_property const &ep, Comp const &comp) |
template<typename Comp > | |
void | insert_edge_async (edge_descriptor const &ed, edge_property const &ep, Comp const &comp, bool sister=false) |
void | delete_edge (edge_descriptor const &ed) |
void | clear (void) |
void | clear_edges (void) |
size_t | num_local_edges (void) const |
size_t | num_local_self_edges (void) const |
Returns the number of local self edges in the base container. More... | |
size_t | num_edges (void) const |
Returns the number of edges in the specified STAPL sequential graph. More... | |
size_t | num_self_edges (void) const |
Returns the total number of self edges in the pGraph. More... | |
size_t | num_edges_collective (void) const |
size_t | num_self_edges_collective (void) const |
Returns the number of self edges in the pGraph. More... | |
template<typename FCont > | |
void | aggregate_vp_apply_async (FCont const &fcont) |
Applies functors to respective vertex-properties on this location. All elements must be local. For internal use by Aggregators. More... | |
template<typename FCont > | |
void | aggregate_vp_apply_async (size_t loc, FCont const &fcont) |
template<typename Cont , typename F > | |
void | aggregate_async (Cont const &cont, F const &f) |
Applies a functor on this location. All elements must be local. For internal use by Aggregators. More... | |
template<typename Cont , typename F > | |
void | aggregate_async (size_t loc, Cont const &cont, F const &f) |
template<typename F > | |
void | vp_apply_async (vertex_descriptor const &gid, F const &f) |
template<typename F > | |
F::result_type | vp_apply (gid_type const &gid, F const &f) |
template<typename F > | |
F::result_type | vp_apply (gid_type const &gid, F const &f) const |
template<typename Functor > | |
void | ep_apply_async (edge_descriptor const &ed, Functor const &f) |
template<typename Functor > | |
Functor::result_type | ep_apply (edge_descriptor const &ed, Functor const &f) |
template<typename Functor > | |
void | ep_apply_promise (edge_descriptor const &ed, Functor const &f, promise< typename Functor::result_type > p) |
Applies a function to the specified edge and populates a promise with the result. Used by ep_apply. More... | |
template<typename Functor > | |
bool | ep_find_apply (edge_descriptor const &ed, Functor const &f) |
Applies a functor f on the property of the specified edge, if it exists. More... | |
template<typename Functor > | |
void | ep_find_apply_promise (edge_descriptor const &ed, Functor const &f, promise< bool > p) |
Applies the given functor on the property of the specified edge, if it exists. Populates a promise variable with true if the edge was found, or false otherwise. More... | |
iterator | make_iterator (gid_type const &gid) |
const_iterator | make_iterator (gid_type const &gid) const |
iterator | make_iterator (domain_type const &domain, gid_type const &gid) |
Creates an iterator to the specified gid, which is restricted to the provided domain. More... | |
reference | make_reference (index_type const &gid) |
const_reference | make_reference (index_type const &gid) const |
local_return_type | metadata (void) |
Returns the metadata information for the base-containers on this location. More... | |
size_t | num_base_containers (void) |
Returns the global number of base-containers in this distribution. | |
future< bool > | has_edge (vertex_descriptor const &source, vertex_descriptor const &target) |
Determines whether there exists an edge between two vertices. More... | |
void | aggregate_apply_async (Cont &&cont, F &&f) |
Applies a functor on this location. More... | |
void | aggregate_apply_async (size_t loc, Cont const &cont, F const &f) |
void | guarded_aggregate_apply_async (size_t loc, Cont const &cont, F const &f) |
void | guarded_apply_set (vertex_descriptor const &gid, F &&f) |
Apply a functor to the element at a given GID in a non-concurrent manner. That is, if the graph is already in an apply_set, then this apply_set will be deferred until the one in progress has ended. More... | |
void | guarded_unordered_apply (vertex_descriptor const &gid, F &&f) |
Apply a functor to the element at a given GID in a non-concurrent manner. That is, if the graph is already in an unordered_apply, then this unordered_apply will be deferred until the one in progress has ended. More... | |
size_t | size (void) const |
domain_type const & | domain (void) const |
partition_type & | partition () |
partition_type const & | partition () const |
mapper_type & | mapper () |
directory_type & | directory (void) |
directory_type const & | directory (void) const |
container_manager_type & | container_manager (void) |
container_manager_type const & | container_manager (void) const |
container_type * | container (void) |
container_type const * | container (void) const |
bool | is_local (Indices const &... i) const |
void | defer_metadata_at (gid_type const &gid, promise< dom_info_type > p) |
Returns the metadata associated with the given gid by setting the value of the promise. More... | |
future< dom_info_type > | metadata_at (gid_type const &gid) |
Returns the metadata associated with the given index . | |
dom_info_type | metadata_of (cid_type const &cid) |
Return the metadata associated with the specified component. More... | |
void | redistribute (std::shared_ptr< DistSpecView > dist_view, typename std::enable_if< is_distribution_view< DistSpecView >::value >::type *=0) |
Redistribute data to match the distribution specification provided. More... | |
void | update (std::vector< std::tuple< std::pair< gid_type, gid_type >, cid_type, location_type >> const &updates) |
Add information on the distribution of elements not yet in the container. Use in dynamic containers with view-based distributions to allow element distribution to be based on computation. More... | |
void | set_element (gid_type const &gid, value_type const &val) |
Update the element at a GID by replacing it with a given value. More... | |
void | set_elements (gid_type gid, SourceView &&source_view) |
Update a range of contiguous elements in the container, starting at gid . A total of view.size() elements will be updated with the values in view . More... | |
void | set_elements (gid_type gid, View &&view) |
Signature of set_elements used when underlying base container is not supported. Fall back to iterative use of set_element. | |
value_type | get_element (gid_type const &gid) const |
Return a copy of the element at a specific GID. Note that this is a blocking operation. More... | |
future< value_type > | get_element_split (gid_type const &gid) |
Return a future of the element at a specific GID. This is a non-blocking operation. More... | |
void | apply_set (gid_type const &gid, Functor const &f) |
Apply a function object to the element with the given GID. More... | |
void | unordered_apply_set (gid_type const &gid, Functor &&f) |
Apply a function object to the element with the given GID, disregarding RMI causal ordering. More... | |
void | unordered_apply (gid_type const &gid, Functor &&f) |
Apply a function object to the element with the given GID, passing along the distribution pointer and disregarding RMI causal ordering. More... | |
boost::result_of< Functor(value_type &)>::type | apply_get (gid_type const &gid, Functor const &f) |
Apply a function object to the element with the given GID and return the result. More... | |
boost::result_of< Functor(value_type &)>::type | apply_get (gid_type const &gid, Functor const &f) const |
Apply a function object to the element with the given GID and return the result. More... | |
Public Types | |
using | base_type = detail::graph_distribution_base< Container, graph_distribution_static< Container > > |
typedef Container | container_type |
typedef base_type::directory_type | directory_type |
typedef base_type::container_manager_type | container_manager_type |
typedef directory_type::partition_type | partition_type |
typedef directory_type::mapper_type | mapper_type |
typedef container_manager_type::base_container_type | base_container_type |
typedef directory_type::key_type | gid_type |
typedef gid_type | index_type |
typedef partition_type::value_type | domain_type |
typedef base_container_type::value_type | value_type |
typedef base_container_type::cid_type | cid_type |
typedef base_container_type::vertex_descriptor | vertex_descriptor |
typedef base_container_type::edge_descriptor | edge_descriptor |
typedef container_traits< container_type >::vertex_property | vertex_property |
typedef container_traits< container_type >::edge_property | edge_property |
typedef base_container_type::edgelist_type | edgelist_type |
typedef base_container_type::edge_iterator | edge_iterator |
typedef mapper_type::value_type | location_type |
typedef graph_accessor< graph_distribution_static > | accessor_type |
typedef proxy< value_type, accessor_type > | reference |
typedef const_graph_accessor< graph_distribution_static > | const_accessor_type |
typedef const proxy< value_type, const_accessor_type > | const_reference |
typedef metadata::static_container_extractor< graph_distribution_static > | loc_dist_metadata |
typedef container_iterator< graph_distribution_static, accessor_type > | iterator |
typedef const_container_iterator< graph_distribution_static, const_accessor_type > | const_iterator |
typedef iterator | vertex_iterator |
typedef const_iterator | const_vertex_iterator |
typedef reference::adj_edge_iterator | adj_edge_iterator |
typedef const_reference::const_adj_edge_iterator | const_adj_edge_iterator |
typedef metadata_entry< domain_type, base_container_type * > | dom_info_type |
typedef std::vector< dom_info_type > | local_return_type |
typedef mapper_type::domain_type | map_dom_t |
Protected Member Functions | |
void | add_edge_promise (edge_descriptor const &ed, edge_property const &ep, promise< edge_descriptor > p, bool sister=false) |
used by add_edge method to populate a promise so that the edge descriptor may be returned for the synchronous method. More... | |
template<typename Comp > | |
void | insert_edge_promise (edge_descriptor const &ed, edge_property const &ep, Comp const &comp, promise< edge_descriptor > p, bool sister=false) |
used by insert_edge method to populate a promise so that the edge descriptor may be returned for the synchronous method. More... | |
void | update_impl (std::vector< std::tuple< std::pair< gid_type, gid_type >, cid_type, location_type >> const &updates) |
Protected Types | |
enum | edge_sortedness { not_sorted, ascending, locality, custom } |
Protected Attributes | |
edge_sortedness | m_edge_sortedness |
void * | m_current_frontier |
container_manager_type | m_container_manager |
Manages and owns the base-containers on this location. Base-containers store the actual data. Container manager also handles the mapping from gid to base-container. | |
Distribution class for the stapl::graph container.
Container | Type of the container that is managing this distribution. |
stapl::graph_distribution_static< Container >::graph_distribution_static | ( | directory_type const & | directory, |
container_manager_type const & | bcmangr | ||
) |
Creates a distribution with the specified directory and base container manager.
directory | The specified directory for this distribution. |
bcmngr | The base container manager for this distribution. |
stapl::graph_distribution_static< Container >::graph_distribution_static | ( | partition_type const & | partition, |
mapper_type const & | mapper | ||
) |
Copy construction of this distribution.
other | Another distribution to copy from |
stapl::graph_distribution_static< Container >::graph_distribution_static | ( | partition_type const & | partition, |
mapper_type const & | mapper, | ||
value_type const & | default_value | ||
) |
Create a distribution with an initial value for elements.
partition | Partition used by the container |
mapper | Mapper used by the container |
default_value | The value that the elements in this distribution will be initialized with |
stapl::graph_distribution_static< Container >::graph_distribution_static | ( | partition_type const & | partition | ) |
Create a distribution with default constructed elements and a default mapper.
partition | Partition used by the container |
void stapl::graph_distribution_static< Container >::sort_edges_ascending | ( | void | ) |
Sorts edges of each vertex in ascending order of target-vertex-id.
void stapl::graph_distribution_static< Container >::sort_edges_locality | ( | void | ) |
Sorts edges of each vertex by home-location of target-vertex.
void stapl::graph_distribution_static< Container >::sort_edges | ( | Comp const & | comp | ) |
Sorts edges of each vertex by user-defined comparison function.
void stapl::graph_distribution_static< Container >::erase_edges_if | ( | Pred && | pred | ) |
Erases all edges that match a user-defined predicate.
pred | A unary predicate that receives a single edge |
void stapl::graph_distribution_static< Container >::reserve_adjacency | ( | vertex_descriptor const & | gid, |
size_t | num_adjacents | ||
) |
vertex_descriptor stapl::graph_distribution_static< Container >::add_vertex | ( | vertex_property const & | vp | ) |
Adds a vertex to the pGraph with the given property.
vp | Property of the vertex. |
Vertex-descriptor is assigned automatically by the pGraph. This method is asynchronous. The vertex is added at the calling location, which is also the home location for the vertex.
vertex_descriptor stapl::graph_distribution_static< Container >::add_vertex | ( | vertex_descriptor const & | gid, |
vertex_property const & | vp | ||
) |
Adds a vertex to the pGraph with the given property and descriptor.
gid | descriptor of the vertex. |
vp | Property of the vertex. |
This method is asynchronous. The vertex is added at the calling location. An async is sent to the home-location of the vertex.
bool stapl::graph_distribution_static< Container >::delete_vertex | ( | vertex_descriptor const & | gid | ) |
Deletes a vertex from the pGraph with the given descriptor. This method is asynchronous.
gid | descriptor of the vertex. |
iterator stapl::graph_distribution_static< Container >::find_vertex | ( | vertex_descriptor const & | gid | ) |
iterator stapl::graph_distribution_static< Container >::find | ( | vertex_descriptor const & | gid | ) |
edge_descriptor stapl::graph_distribution_static< Container >::add_edge | ( | edge_descriptor const & | ed | ) |
edge_descriptor stapl::graph_distribution_static< Container >::add_edge | ( | edge_descriptor const & | ed, |
edge_property const & | ep | ||
) |
void stapl::graph_distribution_static< Container >::add_edge_async | ( | edge_descriptor const & | ed | ) |
void stapl::graph_distribution_static< Container >::add_edge_async | ( | edge_descriptor const & | ed, |
edge_property const & | ep, | ||
bool | sister = false |
||
) |
sibling | Used to indicate if the edge is the second sibling in an undirected edge-pair. |
edge_descriptor stapl::graph_distribution_static< Container >::insert_edge | ( | edge_descriptor const & | ed, |
edge_property const & | ep, | ||
Comp const & | comp | ||
) |
void stapl::graph_distribution_static< Container >::insert_edge_async | ( | edge_descriptor const & | ed, |
edge_property const & | ep, | ||
Comp const & | comp, | ||
bool | sister = false |
||
) |
sibling | Used to indicate if the edge is the second sibling in an undirected edge-pair. |
|
protected |
used by add_edge method to populate a promise so that the edge descriptor may be returned for the synchronous method.
ed | The edge descriptor of the edge being added. |
ep | The property of the edge being added. |
p | The promise object used to return the edge descriptor. |
sibling | Used to indicate if the edge is the second sibling in an undirected edge-pair. |
|
protected |
used by insert_edge method to populate a promise so that the edge descriptor may be returned for the synchronous method.
ed | The edge descriptor of the edge being added. |
ep | The property of the edge being added. |
comp | Passed internal to std::lower_bound to find the spot to insert the new edge. |
p | The promise object used to return the edge descriptor. |
sibling | Used to indicate if the edge is the second sibling in an undirected edge-pair. |
void stapl::graph_distribution_static< Container >::delete_edge | ( | edge_descriptor const & | ed | ) |
void stapl::graph_distribution_static< Container >::clear | ( | void | ) |
void stapl::graph_distribution_static< Container >::clear_edges | ( | void | ) |
size_t stapl::graph_distribution_static< Container >::num_local_edges | ( | void | ) | const |
size_t stapl::graph_distribution_static< Container >::num_local_self_edges | ( | void | ) | const |
Returns the number of local self edges in the base container.
size_t stapl::graph_distribution_static< Container >::num_edges | ( | void | ) | const |
Returns the number of edges in the specified STAPL sequential graph.
g | A STAPL sequential graph. |
size_t stapl::graph_distribution_static< Container >::num_self_edges | ( | void | ) | const |
Returns the total number of self edges in the pGraph.
size_t stapl::graph_distribution_static< Container >::num_edges_collective | ( | void | ) | const |
size_t stapl::graph_distribution_static< Container >::num_self_edges_collective | ( | void | ) | const |
Returns the number of self edges in the pGraph.
void stapl::graph_distribution_static< Container >::aggregate_vp_apply_async | ( | FCont const & | fcont | ) |
Applies functors to respective vertex-properties on this location. All elements must be local. For internal use by Aggregators.
f | Container of functors to be applied. Each element of f should provide a target() method that returns the descriptor of the target vertex. Each element of f is given the property of its corresponding vertex. |
void stapl::graph_distribution_static< Container >::aggregate_vp_apply_async | ( | size_t | loc, |
FCont const & | fcont | ||
) |
void stapl::graph_distribution_static< Container >::aggregate_async | ( | Cont const & | cont, |
F const & | f | ||
) |
Applies a functor on this location. All elements must be local. For internal use by Aggregators.
v | Container of elements to be passed-in to f. |
f | Functor to be applied to each element of v on the desired location. f is passed an element of v as well as a pointer to the pGraph. |
void stapl::graph_distribution_static< Container >::aggregate_async | ( | size_t | loc, |
Cont const & | cont, | ||
F const & | f | ||
) |
void stapl::graph_distribution_static< Container >::vp_apply_async | ( | vertex_descriptor const & | gid, |
F const & | f | ||
) |
F::result_type stapl::graph_distribution_static< Container >::vp_apply | ( | gid_type const & | gid, |
F const & | f | ||
) |
F::result_type stapl::graph_distribution_static< Container >::vp_apply | ( | gid_type const & | gid, |
F const & | f | ||
) | const |
void stapl::graph_distribution_static< Container >::ep_apply_async | ( | edge_descriptor const & | ed, |
Functor const & | f | ||
) |
Functor::result_type stapl::graph_distribution_static< Container >::ep_apply | ( | edge_descriptor const & | ed, |
Functor const & | f | ||
) |
void stapl::graph_distribution_static< Container >::ep_apply_promise | ( | edge_descriptor const & | ed, |
Functor const & | f, | ||
promise< typename Functor::result_type > | p | ||
) |
Applies a function to the specified edge and populates a promise with the result. Used by ep_apply.
ed | Descriptor of the edge. |
f | Functor to be applied to the target edge's property. |
bool stapl::graph_distribution_static< Container >::ep_find_apply | ( | edge_descriptor const & | ed, |
Functor const & | f | ||
) |
Applies a functor f on the property of the specified edge, if it exists.
ed | The descriptor of the edge on which the functor will be applied. |
f | The functor to be applied. |
void stapl::graph_distribution_static< Container >::ep_find_apply_promise | ( | edge_descriptor const & | ed, |
Functor const & | f, | ||
promise< bool > | p | ||
) |
Applies the given functor on the property of the specified edge, if it exists. Populates a promise variable with true if the edge was found, or false otherwise.
ed | Descriptor of the edge. |
f | Functor to be applied to the target edge's property. |
iterator stapl::graph_distribution_static< Container >::make_iterator | ( | gid_type const & | gid | ) |
const_iterator stapl::graph_distribution_static< Container >::make_iterator | ( | gid_type const & | gid | ) | const |
iterator stapl::graph_distribution_static< Container >::make_iterator | ( | domain_type const & | domain, |
gid_type const & | gid | ||
) |
Creates an iterator to the specified gid, which is restricted to the provided domain.
domain | The domain to which the iterator will be restricted. |
gid | The gid of the vertex to which the iterator will point. |
reference stapl::graph_distribution_static< Container >::make_reference | ( | index_type const & | gid | ) |
const_reference stapl::graph_distribution_static< Container >::make_reference | ( | index_type const & | gid | ) | const |
local_return_type stapl::graph_distribution_static< Container >::metadata | ( | void | ) |
Returns the metadata information for the base-containers on this location.
|
inherited |
Determines whether there exists an edge between two vertices.
|
inherited |
Applies a functor on this location.
All elements must be local. For internal use by Aggregators.
v | Container of elements to be passed-in to f. |
f | Functor to be applied to each element of v on the desired location. f is passed an element of v. |
|
inherited |
|
inherited |
|
inherited |
Apply a functor to the element at a given GID in a non-concurrent manner. That is, if the graph is already in an apply_set, then this apply_set will be deferred until the one in progress has ended.
gid | The GID of the vertex |
f | The functor to apply |
|
inherited |
Apply a functor to the element at a given GID in a non-concurrent manner. That is, if the graph is already in an unordered_apply, then this unordered_apply will be deferred until the one in progress has ended.
gid | The GID of the vertex |
f | The functor to apply |
|
inherited |
Returns if the element with the specified gid is stored on this location.
i | components of a gid if it is multidimensional, otherwise i is the gid. |
|
inherited |
Returns the metadata associated with the given gid
by setting the value of the promise.
gid | Id of the element of interest |
p | Promise that will return the locality information to the location that invoked the method. |
|
inherited |
Return the metadata associated with the specified component.
cid | id of the base container for which metadata is requested. |
|
inherited |
Redistribute data to match the distribution specification provided.
dist_view | View-based specification of the distribution that the container elements will match after method completion. |
|
inherited |
Add information on the distribution of elements not yet in the container. Use in dynamic containers with view-based distributions to allow element distribution to be based on computation.
updates | Explicit mapping information of sets of contiguous GIDs to partition ids and location ids. |
|
inherited |
Update the element at a GID by replacing it with a given value.
gid | GID of the element to replace |
val | The new value for the element |
|
inherited |
Update a range of contiguous elements in the container, starting at gid
. A total of view.size()
elements will be updated with the values in view
.
|
inherited |
Return a copy of the element at a specific GID. Note that this is a blocking operation.
gid | GID of the element to retrieve |
|
inherited |
Return a future of the element at a specific GID. This is a non-blocking operation.
gid | GID of the element to retrieve |
|
inherited |
Apply a function object to the element with the given GID.
gid | GID of the element for which we want to apply the function object. |
f | Function object to apply to the element. |
f
has to be const
qualified.
|
inherited |
Apply a function object to the element with the given GID, disregarding RMI causal ordering.
gid | GID of the element for which we want to apply the function object. |
f | Function object to apply to the element. |
f
has to be const
qualified.
|
inherited |
Apply a function object to the element with the given GID, passing along the distribution pointer and disregarding RMI causal ordering.
gid | GID of the element for which we want to apply the function object. |
f | Function object to apply to the element. |
f
has to be const
qualified.
|
inherited |
Apply a function object to the element with the given GID and return the result.
gid | GID of the element for which we want to apply the function object and return the result. |
f | Function object to apply to the element. |
f
to the element.Functor
reflects a public type result_type
and that the invocation of its function operator returns a value that is convertible to result_type. The function operator of f
has to be const
qualified.
|
inherited |
Apply a function object to the element with the given GID and return the result.
gid | GID of the element for which we want to apply the function object and return the result. |
f | Function object to apply to the element. |
f
to the element.Functor
reflects a public type result_type
and that the invocation of its function operator returns a value that is convertible to result_type. The function operator of f
has to be const
qualified.