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

Parallel BGL Boman et al graph coloring

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 Boman et al graph coloring

namespace graph {
  template<typename DistributedGraph, typename ColorMap>
  typename property_traits<ColorMap>::value_type
  boman_et_al_graph_coloring
    (const DistributedGraph& g,
     ColorMap color,
     typename graph_traits<DistributedGraph>::vertices_size_type s = 100);
  template<typename DistributedGraph, typename ColorMap, typename ChooseColor>
  typename property_traits<ColorMap>::value_type
  boman_et_al_graph_coloring
    (const DistributedGraph& g,
     ColorMap color,
     typename graph_traits<DistributedGraph>::vertices_size_type s,
     ChooseColor choose_color);
  template<typename DistributedGraph, typename ColorMap, typename ChooseColor,
           typename VertexOrdering>
  typename property_traits<ColorMap>::value_type
  boman_et_al_graph_coloring
    (const DistributedGraph& g, ColorMap color,
     typename graph_traits<DistributedGraph>::vertices_size_type s,
     ChooseColor choose_color, VertexOrdering ordering);
  template<typename DistributedGraph, typename ColorMap, typename ChooseColor,
           typename VertexOrdering, typename VertexIndexMap>
  typename property_traits<ColorMap>::value_type
  boman_et_al_graph_coloring
    (const DistributedGraph& g,
     ColorMap color,
     typename graph_traits<DistributedGraph>::vertices_size_type s,
     ChooseColor choose_color,
     VertexOrdering ordering, VertexIndexMap vertex_index);
}

boman_et_al_graph_coloringфункции окрашивают вершины ненаправленного, распределенного графа таким образом, что никакие две соседние вершины не имеют одинакового цвета. Все вершины данного цвета образуют независимый набор в графе. Графическая окраска использовалась для решения различных задач, включая распределение регистров в компиляторах, задачи оптимизации и задачи планирования.

Vertex coloring example

Проблема окрашивания графика с наименьшим количеством цветов является NP-полной, поэтому многие алгоритмы (в том числе реализованный здесь) являются эвристическими алгоритмами, которые пытаются минимизировать количество цветов, но не гарантируют оптимальное решение. Этот алгоритм[BBC05]является аналогомsequential_vertex_coloringалгоритм, который повторяется через вершины один раз и выбирает цвет с наименьшим числом, который может иметь текущая вершина. Поэтому окраска и количество цветов связаны с упорядочением вершин в последовательном случае.

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

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

Where Defined

<boost/graph/distributed/boman_et_al_graph_coloring.hpp>

Parameters

IN: Graph& g
The graph type must be a model of Distributed Vertex List Graph and Distributed Edge List Graph.
UTIL/OUT: ColorMap color
Stores the color of each vertex, which will be a value in the range [0, num_colors). The type ColorMap must model the Read/Write Property Map concept and must be a distributed property map.
IN: vertices_size_type s

The number of vertices to color within each superstep. After s vertices have been colored, the colors of boundary vertices will be sent to their out-of-process neighbors. Smaller values communicate more often but may reduce the risk of conflicts, whereas larger values do more work in between communication steps but may create many conflicts.

Default: 100

IN: ChooseColor choose_color

A function object that chooses the color for a vertex given the colors of its neighbors. The function object will be passed a vector of values (marked) and a marked_true value, and should return a color value such that color >= marked.size() or marked[color] != marked_true.

Default: boost::graph::distributed::first_fit_color<color_type>(), where color_type is the value type of the ColorMap property map.

IN: VertexOrdering ordering

A binary predicate function object that provides total ordering on the vertices in the graph. Whenever a conflict arises, only one of the processes involved will recolor the vertex in the next round, and this ordering determines which vertex should be considered conflicting (its owning process will then handle the conflict). Ideally, this predicate should order vertices so that conflicting vertices will be spread uniformly across processes. However, this predicate must resolve the same way on both processors.

Default: unspecified

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)

Complexity

Сложность этого алгоритма трудно охарактеризовать, поскольку она сильно зависит от количестваконфликтов, которые происходят во время алгоритма. Конфликт возникает, когдапограничной вершине(т.е. вершине, которая примыкает к вершине, хранящейся на другом процессоре) дается один и тот же цвет, является пограничной вершиной, смежной с ней (но на другом процессоре). Противоречивым вершинам должны быть присвоены новые цвета, требующие дополнительной работы и общения. Работа, связанная с переназначением цвета для конфликтующей вершины, являетсяO(d), гдеd- степень вершины иO(1)сообщенияO(1)размера необходимы для разрешения конфликта. Заметим, что число конфликтов увеличивается с (1) количеством процессов и (2) количеством межпроцессных краев.

Performance

Выполнение этой реализации алгоритма окраски графов Bomen et al. иллюстрируется следующими диаграммами. Масштабирование и производительность являются разумными для всех графиков, которые мы пробовали.

chart_php_generator_ER_SF_SW_dataset_TimeSparse_cluster_Odin_columns_11.png chart_php_generator_ER_SF_SW_dataset_TimeSparse_cluster_Odin_columns_11_speedup_1.png chart_php_generator_ER_SF_SW_dataset_TimeDense_cluster_Odin_columns_11.png chart_php_generator_ER_SF_SW_dataset_TimeDense_cluster_Odin_columns_11_speedup_1.png

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

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

[BBC05]Erik G. Boman, Doruk Bozdag, Umit Catalyurek, Assefaw H. Gebremedhin и Fredrik Manne. Алгоритм масштабируемого параллельного графического окрашивания для компьютеров с распределенной памятью. [принт]

Статья Parallel BGL Boman et al graph coloring раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 11:03:21/0.0070860385894775/0