Graph#
-
template<memory_space_t space, typename vertex_t, typename edge_t, typename weight_t, class ...graph_view_t>
class graph_t : public gunrock::graph::graph_view_t# Variadic inheritence based graph class, inherit only what you need from the formats implemented. See detail/base.hxx for the graph_base_t implementation. Things to consider:
Coordinate graph view is equivalent to an edge list.
Compressed sparse row/column view are equivalent to each other in terms of complexity.
Operation
Adjacency Matrix
COO
Adj. List
CSR/CSC
scan
O(n^2)
O(m)
O(m+n)
O(m+n)
get neighbors
O(n)
O(m)
O(d)
O(d)
is edge
O(1)
O(m)
O(d)
O(d)
insert edge
O(1)
O(1)
O(1) or O(d)
O(m+n)
delete edge
O(1)
O(m)
O(d)
O(m+n)
- Template Parameters:
space – memory space to use for the graph (device or host).
vertex_t – index type of the vertices, must be integral type.
edge_t – index type of the edges, must be integral type.
weight_t – type of the edge weights.
graph_view_t – internal view of the graph, must be a class from among the valid implementations, see graph/csr.hxx, graph/csc.hxx, graph/coo.hxx.
-
template<typename vertex_t>
struct vertex_pair_t# vertex pair of source and destination, accessed using .source and .destination;
- Template Parameters:
vertex_t – vertex type.
-
template<typename edge_t>
struct edge_pair_t# - Todo:
: Cannot remember what this is for.
Properties#
-
struct graph_properties_t#
define graph properties, this includes is the graph directed? is the graph weighted? Add more properties that we should support. I can think of graph types (multigraph, cyclic, …), or negative edge support, etc.
Functions on Graph#
-
template<typename graph_type>
__host__ __device__ double gunrock::graph::get_average_degree(graph_type const &G)# Get the average degree of a graph.
- Template Parameters:
graph_type – graph type.
- Parameters:
G – graph to get the average degree.
- Returns:
double average degree of the graph.
-
template<typename graph_type>
__host__ __device__ double gunrock::graph::get_degree_standard_deviation(graph_type const &G)# Get the degree standard deviation of a graph. This method uses population standard deviation, therefore measuring the standard deviation over the entire population (all nodes). This can be sped up by only taking a small sample and using sqrt(accum / graph.get_number_of_vertices() - 1) as the result.
- Template Parameters:
graph_type – graph type.
- Parameters:
G – graph to get the degree standard deviation.
- Returns:
double degree standard deviation of the graph.
-
template<typename graph_type, typename histogram_t>
void gunrock::graph::build_degree_histogram(graph_type const &G, histogram_t *histogram, gcuda::stream_t stream = 0)# build a log-scale degree histogram of a graph.
- Todo:
maybe a faster implementation will maybe be creating a segment array (which is just number of neighbors per vertex), and then sort and find the end of each bin of values using an upper_bound search. Once that is achieved, compute the adjacent_difference of the cumulative histogram.
- Template Parameters:
graph_type – graph type.
histogram_t – histogram type.
- Parameters:
G – graph to build the histogram.
histogram – histogram pointer to build.
stream – execution stream to use.
-
template<typename graph_type>
void gunrock::graph::remove_self_loops(graph_type &G)# Utility to remove self-loops, so, if we have an edge between vertex_0 and vertex_0, that edge will be removed as it is a self-loop.
- Todo:
need an implementation.
- Template Parameters:
graph_type – graph type.
- Parameters:
G – graph to remove self-loops.
Graph Builder#
-
template<memory_space_t space, typename edge_t, typename vertex_t, typename weight_t>
auto gunrock::graph::build(graph::graph_properties_t properties, format::csr_t<space, vertex_t, edge_t, weight_t> &csr)# Builds a graph using CSR object.
- Template Parameters:
space – memory space for the graph (host or device).
edge_t – Edge type of the graph.
vertex_t – Vertex type of the graph.
weight_t – Weight type of the graph.
- Parameters:
properties – Graph properties.
csr – csr_t format with graph’s data.
- Returns:
graph_t the graph itself.
-
template<memory_space_t space, typename edge_t, typename vertex_t, typename weight_t>
auto gunrock::graph::build(graph::graph_properties_t properties, format::coo_t<space, vertex_t, edge_t, weight_t> &coo)# Builds a graph using COO object.
- Template Parameters:
space – memory space for the graph (host or device).
edge_t – Edge type of the graph.
vertex_t – Vertex type of the graph.
weight_t – Weight type of the graph.
- Parameters:
properties – Graph properties.
coo – coo_t format with graph’s data.
- Returns:
graph_t the graph itself.
-
template<memory_space_t space, typename edge_t, typename vertex_t, typename weight_t>
auto gunrock::graph::build(graph::graph_properties_t properties, format::csc_t<space, vertex_t, edge_t, weight_t> &csc)# Builds a graph using CSC object.
- Template Parameters:
space – memory space for the graph (host or device).
edge_t – Edge type of the graph.
vertex_t – Vertex type of the graph.
weight_t – Weight type of the graph.
- Parameters:
properties – Graph properties.
csc – csc_t format with graph’s data.
- Returns:
graph_t the graph itself.
-
template<memory_space_t space, typename edge_t, typename vertex_t, typename weight_t>
auto gunrock::graph::build(graph::graph_properties_t properties, format::coo_t<space, vertex_t, edge_t, weight_t> &coo, format::csr_t<space, vertex_t, edge_t, weight_t> &csr)# Builds a graph that supports COO and CSR.
- Template Parameters:
space – memory space for the graph (host or device).
edge_t – Edge type of the graph.
vertex_t – Vertex type of the graph.
weight_t – Weight type of the graph.
- Parameters:
properties – Graph properties.
coo – coo_t format with graph’s data.
csr – csr_t format with graph’s data.
- Returns:
graph_t the graph itself.
-
template<memory_space_t space, typename edge_t, typename vertex_t, typename weight_t>
auto gunrock::graph::build(graph::graph_properties_t properties, format::csc_t<space, vertex_t, edge_t, weight_t> &csc, format::csr_t<space, vertex_t, edge_t, weight_t> &csr)# Builds a graph that supports CSC and CSR.
- Template Parameters:
space – memory space for the graph (host or device).
edge_t – Edge type of the graph.
vertex_t – Vertex type of the graph.
weight_t – Weight type of the graph.
- Parameters:
properties – Graph properties.
csc – csc_t format with graph’s data.
csr – csr_t format with graph’s data.
- Returns:
graph_t the graph itself.
-
template<memory_space_t space, typename edge_t, typename vertex_t, typename weight_t>
auto gunrock::graph::build(graph::graph_properties_t properties, format::coo_t<space, vertex_t, edge_t, weight_t> &coo, format::csc_t<space, vertex_t, edge_t, weight_t> &csc)# Builds a graph that supports COO and CSC.
- Template Parameters:
space – memory space for the graph (host or device).
edge_t – Edge type of the graph.
vertex_t – Vertex type of the graph.
weight_t – Weight type of the graph.
- Parameters:
properties – Graph properties.
coo – coo_t format with graph’s data.
csc – csc_t format with graph’s data.
- Returns:
graph_t the graph itself.
-
template<memory_space_t space, typename edge_t, typename vertex_t, typename weight_t>
auto gunrock::graph::build(graph::graph_properties_t properties, format::coo_t<space, vertex_t, edge_t, weight_t> &coo, format::csc_t<space, vertex_t, edge_t, weight_t> &csc, format::csr_t<space, vertex_t, edge_t, weight_t> &csr)# Builds a graph that supports COO, CSC and CSR.
- Template Parameters:
space – memory space for the graph (host or device).
edge_t – Edge type of the graph.
vertex_t – Vertex type of the graph.
weight_t – Weight type of the graph.
- Parameters:
properties – Graph properties.
coo – coo_t format with graph’s data.
csc – csc_t format with graph’s data.
csr – csr_t format with graph’s data.
- Returns:
graph_t the graph itself.