Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Parallel BGL Minimum Spanning Tree

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Parallel BGL Minimum Spanning Tree

Параллельный BGL содержит четыреминимальных пролетных дерева.Алгоритмы[DG98]для использования на ненаправленных, взвешенных, распределенных графиках. Графики не обязательно должны быть подключены: каждый алгоритм будет вычислять минимальный охват леса (MSF) при условии наличия несвязанного графа.

Интерфейс каждого из четырех алгоритмов аналогичен реализации алгоритма Крускаля в последовательном BGL. Каждый принимает, как минимум, график, карту веса и итератор вывода. Края MST (или MSF) будут выводиться через итератор вывода на процессе 0: другие процессы могут получать края на своих итераторах вывода, но набор может быть не полным, в зависимости от алгоритма. Параметры алгоритма задокументированы вместе, потому что они не сильно различаются. Смотрите разделВыбор алгоритма MSTСоветы по выбору алгоритма.

График должен смоделироватьГрафик списка VertexКонцепт и концепция Распределенного Графа Края. Поскольку наиболее распространенная распределенная графовая структура,распределённый список смежностей, только моделирует концепцию Распределённого графа списка Vertex, он может использоваться с этими алгоритмами только при обертывании в подходящий адаптер, такой какvertex_list_adaptor..

Where Defined

<boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp>

Parameters

IN: Graph& g
The graph type must be a model of Vertex List Graph and Distributed Edge List Graph.
IN/OUT: WeightMap weight
The weight map must be a Distributed Property Map and a Readable Property Map whose key type is the edge descriptor of the graph and whose value type is numerical.
IN/OUT: OutputIterator out
The output iterator through which the edges of the MSF will be written. Must be capable of accepting edge descriptors for output.
IN: VertexIndexMap index

A mapping from vertex descriptors to indices in the range [0, num_vertices(g)). This must be a Readable Property Map whose key type is a vertex descriptor and whose value type is an integral type, typically the vertices_size_type of the graph.

Default: get(vertex_index, g)

IN/UTIL: RankMap rank_map

Stores the rank of each vertex, which is used for maintaining union-find data structures. This must be a Read/Write Property Map whose key type is a vertex descriptor and whose value type is an integral type.

Default: An iterator_property_map built from an STL vector of the vertices_size_type of the graph and the vertex index map.

IN/UTIL: ParentMap parent_map

Stores the parent (representative) of each vertex, which is used for maintaining union-find data structures. This must be a Read/Write Property Map whose key type is a vertex descriptor and whose value type is also a vertex descriptor.

Default: An iterator_property_map built from an STL vector of the vertex_descriptor of the graph and the vertex index map.

IN/UTIL: SupervertexMap supervertex_map

Stores the supervertex index of each vertex, which is used for maintaining the supervertex list data structures. This must be a Read/Write Property Map whose key type is a vertex descriptor and whose value type is an integral type.

Default: An iterator_property_map built from an STL vector of the vertices_size_type of the graph and the vertex index map.

dense_boruvka_minimum_spanning_tree

namespace graph {
  template<typename Graph, typename WeightMap, typename OutputIterator,
           typename VertexIndexMap, typename RankMap, typename ParentMap,
           typename SupervertexMap>
  OutputIterator
  dense_boruvka_minimum_spanning_tree(const Graph& g, WeightMap weight_map,
                                    OutputIterator out,
                                    VertexIndexMap index,
                                    RankMap rank_map, ParentMap parent_map,
                                    SupervertexMap supervertex_map);
  template<typename Graph, typename WeightMap, typename OutputIterator,
           typename VertexIndex>
  OutputIterator
  dense_boruvka_minimum_spanning_tree(const Graph& g, WeightMap weight_map,
                                    OutputIterator out, VertexIndex index);
  template<typename Graph, typename WeightMap, typename OutputIterator>
  OutputIterator
  dense_boruvka_minimum_spanning_tree(const Graph& g, WeightMap weight_map,
                                    OutputIterator out);
}

Description

Плотный алгоритм распределенного минимального пролетного дерева Борувки представляет собой прямую параллелизацию последовательного алгоритма MST Борувки. Алгоритм сначала создаетсупервертексиз каждой вершины. Затем, в каждой итерации, он находит наименьший вес краевого инцидента к каждой вершине, разрушает супервертикали вдоль этих краев и удаляет все самопетли. Единственное различие между последовательными и параллельными алгоритмами заключается в том, что параллельный алгоритм выполняет операцию полного сокращения, так что все процессы имеют глобальный минимальный набор краев.

В отличие от других трех алгоритмов, этот алгоритм излучает полный список краев в минимальном лесу через итератор вывода на всех процессах. Следовательно, он может быть более полезным, чем другие, при параллелизации последовательных программ BGL.

Complexity

Распределенный алгоритм требуетO(log n)Супершаги BSP, каждый из которых требуетO(m/p + n)время иO(n)связь в процессе.

Performance

Следующие диаграммы иллюстрируют производительность этого алгоритма на различных случайных графиках. Мы видим, что алгоритм масштабирует до 64 или 128 процессоров, в зависимости от типа графа, для плотных графов. Однако для разреженных графов производительность сужается по мере того, как число процессоров сужаетсям/н, т.е. средняя степень (что составляет 30 для этого графа). Такое поведение ожидается от алгоритма.

chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_5.png chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_5_speedup_1.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_5.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_5_speedup_1.png

merge_local_minimum_spanning_trees

namespace graph {
  template<typename Graph, typename WeightMap, typename OutputIterator,
           typename VertexIndexMap>
  OutputIterator
  merge_local_minimum_spanning_trees(const Graph& g, WeightMap weight,
                                     OutputIterator out,
                                     VertexIndexMap index);
  template<typename Graph, typename WeightMap, typename OutputIterator>
  inline OutputIterator
  merge_local_minimum_spanning_trees(const Graph& g, WeightMap weight,
                                     OutputIterator out);
}

Description

Сливающийся локальный алгоритм MST работает, вычисляя минимум лесов с краев, хранящихся в каждом процессе. Затем процессы сливаются их краевые списки вдоль дерева. Узлы ребенка перестают участвовать в вычислениях, но родительские узлы пересчитывают MSF из вновь приобретенных краев. В заключительном раунде корень дерева вычисляет глобальные MSF, получая кромки кандидатов от каждого другого процесса через дерево.

Complexity

Этот алгоритм требуетO(log_D p)Сверхшаги BSP (гдеD- это число детей на дереве, и в настоящее время фиксируется на уровне 3). Каждый супершаг требуетO((m/p) log (m/p) + n)времени иO(m/p)связи в процессе.

Performance

Следующие диаграммы иллюстрируют производительность этого алгоритма на различных случайных графиках. Алгоритм хорошо масштабируется только для очень плотных графиков, где большая часть работы выполняется на начальной стадии, а на более поздних стадиях очень мало работы.

chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_6.png chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_6_speedup_1.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_6.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_6_speedup_1.png

boruvka_then_merge

namespace graph {
  template<typename Graph, typename WeightMap, typename OutputIterator,
           typename VertexIndexMap, typename RankMap, typename ParentMap,
           typename SupervertexMap>
  OutputIterator
  boruvka_then_merge(const Graph& g, WeightMap weight, OutputIterator out,
                     VertexIndexMap index, RankMap rank_map,
                     ParentMap parent_map, SupervertexMap
                     supervertex_map);
  template<typename Graph, typename WeightMap, typename OutputIterator,
           typename VertexIndexMap>
  inline OutputIterator
  boruvka_then_merge(const Graph& g, WeightMap weight, OutputIterator out,
                      VertexIndexMap index);
  template<typename Graph, typename WeightMap, typename OutputIterator>
  inline OutputIterator
  boruvka_then_merge(const Graph& g, WeightMap weight, OutputIterator out);
}

Description

Этот алгоритм применяет как этапы Борувки, так и локальные этапы слияния MSF для достижения лучшей асимптотической производительности, чем любой другой алгоритм. Сначала он выполняет шаги Борувки до тех пор, пока не останутся толькоn/(log_d p)^2супервертикали, а затем завершает вычисление MSF, выполняя локальное слияние MSF на оставшихся краях и супервертикалях.

Complexity

Этот алгоритм требуетlog_D p+log log_D pсупершагов BSP. Время, необходимое для каждого супершага, зависит от типа выполняемого супершага; см. Распределенная Борувка или слияние локальных алгоритмов MSFS для деталей.

Performance

Следующие диаграммы иллюстрируют производительность этого алгоритма на различных случайных графиках. Мы видим, что алгоритм масштабирует до 64 или 128 процессоров, в зависимости от типа графа, для плотных графов. Однако для разреженных графов производительность сужается по мере того, как число процессоров сужаетсям/н, т.е. средняя степень (что составляет 30 для этого графа). Такое поведение ожидается от алгоритма.

chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_7.png chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_7_speedup_1.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_7.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_7_speedup_1.png

boruvka_mixed_merge

namespace {
  template<typename Graph, typename WeightMap, typename OutputIterator,
           typename VertexIndexMap, typename RankMap, typename ParentMap,
           typename SupervertexMap>
  OutputIterator
  boruvka_mixed_merge(const Graph& g, WeightMap weight, OutputIterator out,
                      VertexIndexMap index, RankMap rank_map,
                      ParentMap parent_map, SupervertexMap
                      supervertex_map);
  template<typename Graph, typename WeightMap, typename OutputIterator,
           typename VertexIndexMap>
  inline OutputIterator
  boruvka_mixed_merge(const Graph& g, WeightMap weight, OutputIterator out,
                      VertexIndexMap index);
  template<typename Graph, typename WeightMap, typename OutputIterator>
  inline OutputIterator
  boruvka_mixed_merge(const Graph& g, WeightMap weight, OutputIterator out);
}

Description

Этот алгоритм применяет как этапы Борувки, так и локальные этапы слияния MSF для достижения лучшей асимптотической производительности, чем любой другой метод. В каждой итерации алгоритм сначала выполняет этап Борувки, а затем объединяет локальные MSF, вычисленные на основе графа супервертекса.

Complexity

Этот алгоритм требуетlog_D pсупершагов BSP. Время, необходимое для каждого супершага, зависит от типа выполняемого супершага; см. Распределенная Борувка или слияние локальных алгоритмов MSFS для деталей. Однако алгоритм является коммуникационно-необязательным (требующимO(n)связи в целом), когда график достаточно плотный, то естьm/n >= p.

Performance

Следующие диаграммы иллюстрируют производительность этого алгоритма на различных случайных графиках. Мы видим, что алгоритм масштабирует до 64 или 128 процессоров, в зависимости от типа графа, для плотных графов. Однако для разреженных графов производительность сужается по мере того, как число процессоров сужаетсям/н, т.е. средняя степень (что составляет 30 для этого графа). Такое поведение ожидается от алгоритма.

chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_8.png chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_8_speedup_1.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_8.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_8_speedup_1.png

Selecting an MST algorithm

Дене и Готц сообщили[DG98]о смешанных результатах при оценке этих четырех алгоритмов. Ни один конкретный алгоритм не был лучше других во всех случаях. Однако асимптотически лучший алгоритмboruvka_mixed_merge, казалось, выполнялся в своих тестах хуже, чем другие алгоритмы, основанные на слиянии. Следующие диаграммы производительности иллюстрируют производительность этих четырех минимальных реализаций дерева охвата.

В целом,dense_boruvka_minimum_spanning_treeдает наиболее последовательную производительность и масштабируемость для графов, которые мы тестировали. Кроме того, он может быть более подходящим для последовательных программ, которые распараллеливаются, потому что он испускает полные списки краев MSF через итераторы вывода в каждом процессе.

Performance on Dense Graphs

chart_php_generator_ER_dataset_TimeDense_columns_5_6_7_8.png chart_php_generator_ER_dataset_TimeDense_columns_5_6_7_8_speedup_1.png chart_php_generator_SF_dataset_TimeDense_columns_5_6_7_8.png chart_php_generator_SF_dataset_TimeDense_columns_5_6_7_8_speedup_1.png chart_php_generator_SW_dataset_TimeDense_columns_5_6_7_8.png chart_php_generator_SW_dataset_TimeDense_columns_5_6_7_8_speedup_1.png

Copyright (C) 2004 Попечители Университета Индианы.

Авторы: Дуглас Грегор и Эндрю Лумсдейн

[DG98]1,2Фрэнк Дене и Сильвия Готц.Практические параллельные алгоритмы для минимальных деревьев. Symposium on Reliable Distributed Systems, pages 366-371, 1998.

Статья Parallel BGL Minimum Spanning Tree раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 10:39:13/0.0082919597625732/0