Добавить возможность кластеризации в потоковое приложение C ++ 11

У меня есть многопоточная программа C ++ 11 (использующая библиотеки C ++ 11 mt), которая выиграет от большего количества вычислительных ресурсов. Память не является проблемой в том масштабе, в котором я заинтересован, но масштабируемость не будет плохой вещью.

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

Узлы каждого графа (общий граф и подграфы) представлены в виде массива целых чисел. То же самое относится и к краям. Итак, технически все, что мне нужно для связи между узлами, это массив целых чисел. Возвращаемый результат будет int, размер найденной максимальной клики.

Из того, что я прочитал, MPI ориентирован на проблемы, требующие распределенной памяти. Это кажется ненужным для моей проблемы. Проблема в минутах в 200 МБ памяти (с 16 потоками на 16 ядрах), поэтому при 4 ГБ (максимум большинства моих вычислительных узлов) это было бы невозможно с вычислительной точки зрения даже со всеми имеющимися у меня узлами. Итак, мой вопрос: что это хороший способ сделать это? Если я не прав насчет MPI, пожалуйста, поправьте меня.

2

Решение

Не зная много о проблеме с графиком, которую вы пытаетесь решить, вот некоторые из ваших вариантов, которые стоит рассмотреть.

MPI

-Как вы уже упоминали, это ваш стандартный академический стиль, API-интерфейс высокопроизводительных вычислений для распределенных вычислений, вы не ошибетесь, и он будет масштабироваться практически до любого количества ядер. Theres также повышение C ++ API. Минусы — это сбой при первой ошибке или сбое сообщения.

любой из различных протоколов AMQP

0MQ QPID отл.

-Они также основаны на передаче сообщений, но отказоустойчивы и менее производительны, чем MPI. Чуть проще работать с MPI, но отказоустойчивость может не относиться к вашей проблеме.

HPX

-гибридный подход, который расширяет API потоков C ++ 11, а также позволяет распределенные вычисления, в соответствии с современным уровнем развития техники. Если вы наиболее знакомы с темами, это может быть хорошим вариантом.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector