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

Parallel BGL METIS Input Routines

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 METIS Input Routines

namespace boost {
  namespace graph {
    class metis_reader;
    class metis_exception;
    class metis_input_exception;
    class metis_distribution;
  }
}

METISпредставляет собой набор программ для разделения графов (среди прочего). Parallel BGL может считывать формат графов METIS и формат разделов, что позволяет легко загружать графы, разделенные METIS, в структуры данных Parallel BGL.

Where Defined

<boost/graph/metis.hpp>

Graph Reader

class metis_reader
{
 public:
  typedef std::size_t vertices_size_type;
  typedef std::size_t edges_size_type;
  typedef double vertex_weight_type;
  typedef double edge_weight_type;
  class edge_iterator;
  class edge_weight_iterator;
  metis_reader(std::istream& in);
  edge_iterator begin();
  edge_iterator end();
  edge_weight_iterator weight_begin();
  vertices_size_type num_vertices() const;
  edges_size_type num_edges() const;
  std::size_t num_vertex_weights() const;
  vertex_weight_type vertex_weight(vertices_size_type v, std::size_t n);
  bool has_edge_weights() const;
};

Usage

Считыватель METIS предоставляет интерфейс итератора для графового файла METIS. Интерфейс итератора наиболее полезен при построении параллельных BGL-графов на лету. Например, следующий код строит графикгиз графа METIS, хранящегося вargv..

std::ifstream in_graph(argv[1]);
metis_reader reader(in_graph);
Graph g(reader.begin(), reader.end(),
        reader.weight_begin(),
        reader.num_vertices());

Призывыначинаютсяизаканчиваются [].Возврат диапазона итератора для краев в графе; призыв квес_начало()возвращает итератор, который перечислит веса краев на графике. Для распределенного графа распределение будет определяться автоматически графом; для использования раздела METIS см. разделСчитыватель разделов.

Associated Types

metis_reader::edge_iterator

Итератор ввода, который перечисляет края на графике METIS и подходит для использования в качестве.EdgeIteratoradjacency_list.значение_типэтого итератора представляет собой пару вершинных чисел.


metis_reader::edge_weight_iterator

Итератор ввода, который перечисляет крайние веса в графе METIS.значение_типэтого итератора равноedge_weight_type. Если края в графе METIS не взвешенны, результат отсчета этого итератора всегда будет равен нулю.

Member Functions

metis_reader(std::istream& in);

Создает новый считыватель METIS, который будет извлекать края из входного потокав. Если какие-либо ошибки встречаются при первоначальном разборев,metis_input_исключениебудет брошено.


edge_iterator begin();

Возвращает итератор к первому краю файла METIS.


edge_iterator end();

Возвращает итератор один мимо последнего края в файле METIS.


edge_weight_iterator weight_begin();

Возвращает итератор к первому весу края в файле METIS. Весовой итератор следует перемещать совместно с краевым итератором; при движении краевого итератора изменяется вес края. Если края на графике не взвешенны, возвращаемый вес всегда будет равен нулю.


vertices_size_type num_vertices() const;

Возвращает количество вершин в графе.


edges_size_type num_edges() const;

Возвращает количество краев в графе.


std::size_t num_vertex_weights() const;

Возвращает количество весов, прикрепленных к каждой вершине.


vertex_weight_type vertex_weight(vertices_size_type v, std::size_t n);

bool has_edge_weights() const;

Возвращаетистинное, когда края графа имеют весы,ложноеиначе. Когдаложный, итератор веса края все еще действителен, но возвращает ноль для веса каждого края.

Partition Reader

class metis_distribution
{
 public:
  typedef int process_id_type;
  typedef std::size_t size_type;
  metis_distribution(std::istream& in, process_id_type my_id);
  size_type block_size(process_id_type id, size_type) const;
  process_id_type operator()(size_type n);
  size_type local(size_type n) const;
  size_type global(size_type n) const;
  size_type global(process_id_type id, size_type n) const;
 private:
  std::istream& in;
  process_id_type my_id;
  std::vector<process_id_type> vertices;
};

Usage

Классmetis_distributionзагружает файл раздела METIS и делает его доступным в качестве дистрибутива, подходящего для использования сраспределенным списком смежноститипа графа. Для загрузки графа METIS с использованием раздела METIS используйте объектmetis_readerдля графа и объектmetis_distributionдля распределения, как в следующем примере.

std::ifstream in_graph(argv[1]);
metis_reader reader(in_graph);
std::ifstream in_partitions(argv[2]);
metis_distribution dist(in_partitions, process_id(pg));
Graph g(reader.begin(), reader.end(),
        reader.weight_begin(),
        reader.num_vertices(),
        pg,
        dist);

В этом примереargvявляется графом, аargvявляется файлом раздела, генерируемымpmetis. Объектdistзагружает информацию о разделении из указанного им входного потока и использует ее для распределения списка смежности. Обратите внимание, что входной поток должен быть в формате файла раздела METIS и должен быть разделен для того же количества процессов, что и в группе процессовpg.

Member Functions

metis_distribution(std::istream& in, process_id_type my_id);

Создает новое распределение METIS из входного потокав.my_idявляется идентификатором процесса текущего процесса в группе процессов, по которой будет распределен график.


size_type block_size(process_id_type id, size_type) const;

Возвращает число вершин, подлежащих хранению в процессеid. Второй параметр,size_type, не используется и может быть любым значением.


process_id_type operator()(size_type n);

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


size_type local(size_type n) const;

Возвращает локальный индекс вершинного числаnв процессе владения.


size_type global(size_type n) const;

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


size_type global(process_id_type id, size_type n) const;

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


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

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

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




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



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


реклама


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

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