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

Parallel BGL Connected Components

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 Connected Components

namespace graph {
  // Default constructed ParentMap
  template<typename Graph, typename ComponentMap, typename ParentMap>
  typename property_traits<ComponentMap>::value_type
  connected_components( const Graph& g, ComponentMap c);
  // User supplied ParentMap
  template<typename Graph, typename ComponentMap, typename ParentMap>
  typename property_traits<ComponentMap>::value_type
  connected_components( const Graph& g, ComponentMap c, ParentMap p);
}

Connected_components()функция вычисляет связанные компоненты ненаправленного графа. Алгоритм распределенных подключенных компонентов использует последовательную версию алгоритма подключенных компонентов для вычисления подключенных компонентов локального подграфа, а затем выполняет параллельную фазу алгоритма. Параллельная часть алгоритма связанных компонентов слабо основана на работе Годдарда, Кумара и Принса. Интерфейс представляет собой набор интерфейса для алгоритма BGLпоследовательных подключенных компонентов.

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

Параллельная фаза алгоритма распределенных связанных компонентов состоит из серии супершагов. На каждом супершаге каждый корень пытается подключиться к члену его списка смежности, назначая его родительский указатель на эту вершину. Крюк ограничен вершинами, которые логически меньше текущей вершины, чтобы предотвратить зацикливание. Вертикали, которые крючок успешно удаляют из списка корней и помещают в другой список завершенных вершин. Все завершенные вершины теперь выполняют шаг прыжка указателя, пока каждая завершенная вершина не будет иметь в качестве своего родителя корень компонента. Этот шаг прыжка указателя может быть дополнительно оптимизирован добавлением правил сокращения цикла (CR), разработанных Джонсоном и Метаксасом, однако текущие оценки производительности показывают, что это окажет незначительное влияние на общую производительность алгоритма. Эти правила CR уменьшают количество шагов прыжка указателя сO(n)доO(log n). Следуя этому шагу прыжка указателя, корни, которые зацепились за эту фазу, передают свой список смежности своему новому родителю. Остальные корни получают эти края и выполняют обрезку на своих списках смежности, чтобы удалить вершины, которые теперь являются членами их компонента. Параллельная фаза алгоритма завершается, когда корень успешно не зацепляется. После завершения параллельной фазы на всех вершинах выполняется заключительный шаг прыжка указателя, чтобы назначить родительские указатели листьев исходных локальных компонентов подграфа их окончательному родителю, который теперь определен.

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

Where Defined

<boost/graph/connected_components.hpp>

Parameters

IN: Graph& g
The graph typed must be a model of Distributed Graph.
OUT: ComponentMap c
The algorithm computes how many connected components are in the graph, and assigns each component an integer label. The algorithm then records to which component each vertex in the graph belongs by recording the component number in the component property map. The ComponentMap type must be a Distributed Property Map. The value type must be the vertices_size_type of the graph. The key type must be the graph's vertex descriptor type. If you do not wish to compute component numbers, pass dummy_property_map as the component map and parent information will be provided in the parent map.
UTIL: ParentMap p
A parent map may be supplied to the algorithm, if not supplied the parent map will be constructed automatically. The ParentMap type must be a Distributed Property Map. The value type and key type must be the graph's vertex descriptor type.
OUT: property_traits<ComponentMap>::value_type
The number of components found will be returned as the value type of the component map.

Complexity

Локальная фаза алгоритма составляетO(V + E). Параллельная фаза алгоритма требует максимумO(d)супершагов, гдеd— число начальных корней.дв лучшем случаеО(V), но становится значительно меньше по мере увеличенияЕ. Фаза прыжка указателя в пределах каждого супершага требует максимумO(c)шагов на каждом из завершенных корней, гдеcявляется длиной самого длинного цикла. Применение правил CR может уменьшить это доO(log c).

Performance

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

chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_9.png chart_php_generator_ER_SF_SW_dataset_TimeSparse_columns_9_speedup_1.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_9.png chart_php_generator_ER_SF_SW_dataset_TimeDense_columns_9_speedup_1.png

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

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

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




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



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


реклама


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

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