1.. Copyright (C) 2004-2009 The Trustees of Indiana University. 2 Use, modification and distribution is subject to the Boost Software 3 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 4 http://www.boost.org/LICENSE_1_0.txt) 5 6=================================== 7|Logo| Scalable R-MAT generator 8=================================== 9 10:: 11 12 template<typename ProcessGroup, typename Distribution, 13 typename RandomGenerator, typename Graph> 14 class scalable_rmat_iterator 15 { 16 public: 17 typedef std::input_iterator_tag iterator_category; 18 typedef std::pair<vertices_size_type, vertices_size_type> value_type; 19 typedef const value_type& reference; 20 typedef const value_type* pointer; 21 typedef void difference_type; 22 23 scalable_rmat_iterator(); 24 scalable_rmat_iterator(ProcessGroup pg, Distribution distrib, 25 RandomGenerator& gen, vertices_size_type n, 26 edges_size_type m, double a, double b, double c, 27 double d, bool permute_vertices = true); 28 29 // Iterator operations 30 reference operator*() const; 31 pointer operator->() const; 32 scalable_rmat_iterator& operator++(); 33 scalable_rmat_iterator operator++(int); 34 bool operator==(const scalable_rmat_iterator& other) const; 35 bool operator!=(const scalable_rmat_iterator& other) const; 36 }; 37 38This class template implements a generator for R-MAT graphs [CZF04]_, 39suitable for initializing an adjacency_list or other graph structure 40with iterator-based initialization. An R-MAT graph has a scale-free 41distribution w.r.t. vertex degree and is implemented using 42Recursive-MATrix partitioning. 43 44Where Defined 45------------- 46<``boost/graph/rmat_graph_generator.hpp``> 47 48Constructors 49------------ 50 51:: 52 53 scalable_rmat_iterator(); 54 55Constructs a past-the-end iterator. 56 57:: 58 59 scalable_rmat_iterator(ProcessGroup pg, Distribution distrib, 60 RandomGenerator& gen, vertices_size_type n, 61 edges_size_type m, double a, double b, double c, 62 double d, bool permute_vertices = true); 63 64Constructs an R-MAT generator iterator that creates a graph with ``n`` 65vertices and ``m`` edges. Inside the ``scalable_rmat_iterator`` 66processes communicate using ``pg`` to generate their local edges as 67defined by ``distrib``. ``a``, ``b``, ``c``, and ``d`` represent the 68probability that a generated edge is placed of each of the 4 quadrants 69of the partitioned adjacency matrix. Probabilities are drawn from the 70random number generator ``gen``. Vertex indices are permuted to 71eliminate locality when ``permute_vertices`` is true. 72 73Example 74------- 75 76:: 77 78 #include <boost/graph/distributed/mpi_process_group.hpp> 79 #include <boost/graph/compressed_sparse_row_graph.hpp> 80 #include <boost/graph/rmat_graph_generator.hpp> 81 #include <boost/random/linear_congruential.hpp> 82 83 using boost::graph::distributed::mpi_process_group; 84 85 typedef compressed_sparse_row_graph<directedS, no_property, no_property, no_property, 86 distributedS<mpi_process_group> > Graph; 87 typedef boost::scalable_rmat_iterator<boost::minstd_rand, Graph> RMATGen; 88 89 int main() 90 { 91 boost::minstd_rand gen; 92 mpi_process_group pg; 93 94 int N = 100; 95 96 boost::parallel::variant_distribution<ProcessGroup> distrib 97 = boost::parallel::block(pg, N); 98 99 // Create graph with 100 nodes and 400 edges 100 Graph g(RMATGen(pg, distrib, gen, N, 400, 0.57, 0.19, 0.19, 0.05), 101 RMATGen(), N, pg, distrib); 102 return 0; 103 } 104 105Bibliography 106------------ 107 108.. [CZF04] D Chakrabarti, Y Zhan, and C Faloutsos. R-MAT: A Recursive 109 Model for Graph Mining. In Proceedings of 4th International Conference 110 on Data Mining, pages 442--446, 2004. 111 112----------------------------------------------------------------------------- 113 114Copyright (C) 2009 The Trustees of Indiana University. 115 116Authors: Nick Edmonds, Brian Barrett, and Andrew Lumsdaine 117 118.. |Logo| image:: pbgl-logo.png 119 :align: middle 120 :alt: Parallel BGL 121 :target: http://www.osl.iu.edu/research/pbgl 122 123.. _Sequential connected components: http://www.boost.org/libs/graph/doc/connected_components.html 124