2014-12-16 3 views
1

Я работаю над DMTCP (http://dmtcp.sourceforge.net/) и изучаю разработку приложения, которое работает на нескольких удаленных компьютерах и вычисляет результат с помощью сообщений. Например, для вычисления последовательности Фибоначчи для 3 машин A, B, CРаспределенное приложение C++ с использованием передачи сообщений

  1. вычисляет начальный номер и посылает этот результат B

  2. В принимает результатов, на которую и использует это, чтобы вычислить следующее число и посылает это к C.

  3. C затем вычисляет следующее число и отправляет A и так далее.

Я пытаюсь создать такое приложение, чтобы я мог проверить его, чтобы перезапустить его из отказа. Однако я не мог представить код для такого приложения. Это мой первый опыт работы с любым распределенным приложением.

Любая помощь будет высоко оценен :)

Спасибо :)

UPDATE: Как было предложено, моя машина не кластер, но у меня есть несколько машин с их индивидуальными ОС, подключенных через LAN друг с другом , Моя основная задача - запустить экземпляры моей программы на нескольких машинах, чтобы они могли общаться, как показано выше.

Надеюсь, что это немного уладит вопрос.

ответ

0

Если ваш компьютер является кластером, вы должны использовать MPI (интерфейс передачи сообщений). Он предлагает богатый набор коммуникационных примитивов и является параллельной рабочей лошадкой в ​​высокопроизводительных вычислениях.

+0

Благодарим вас за предложение MPI. Открытый MPI выглядит довольно интересным в этом отношении. Тем не менее, я не совсем столкнулся с каким-либо примером кода MPI C++ для удаленного сериализованного распределенного приложения, как я объяснил выше. Не могли бы вы указать мне аналогичный пример в MPI, где такое приложение было реализовано. Кроме того, какие учебные пособия я могу использовать для разработки такого приложения. – Nitinder

+0

Если ваш компьютер еще не является кластером, вы можете либо установить необходимое программное обеспечение, чтобы сделать его в кластере, либо обойтись без MPI. Основным программным компонентом, который необходим для кластера, является планировщик заданий, такой как SLURM. Когда у вас установлен планировщик заданий, вам нужно настроить его так, чтобы он знал, какие разные серверы принадлежат кластеру. Это просто одноразовая, административная задача. К сожалению, я не знаю подробностей этого, поскольку я никогда не настраивал кластер самостоятельно. После того, как кластер настроен, вы просто назначаете задание и используете 'mpiexec' для запуска своего приложения. – cmaster

+0

Что касается документации MPI: MPI - это стандарт, который доступен в Интернете (http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report.pdf). Он определяет привязки для C и fortran (да, fortran по-прежнему довольно большой в высокопроизводительных вычислениях, к сожалению), но не для C++. Причина отсутствия привязок C++ заключается в том, что вы можете просто использовать интерфейс C из программы на C++. Вы можете найти введение, как использовать MPI здесь (https://computing.llnl.gov/tutorials/mpi/), он также включает пример кода в C и fortran (нет C++, код на C++ будет почти идентичен C). – cmaster

0

Вы можете использовать множество опций, в настоящее время я работаю над проектом с ZeroMq, и он может справиться с работой просто отлично, так же как и любой other message queue software. Вы также можете попробовать некоторые рамки сетки (IceGrid приходит на ум), но это, скорее всего, будет излишним.

Для ZeroMQ см. Push/pull + возможно маршрутизаторы ... Преимущество в том, что «система ØMQ может работать без специального брокера сообщений». Недостатком является то, что вам придется приступать к сериализации/десериализации данных (ØMQ не предоставляет один, что не так уж плохо).

Другой вариант - Protocol Buffers. Здесь у вас будет интегрированный клиент/сервер и сериализация/десериализация, но вам нужно будет изучить новый метаязык для определения сообщений. Они довольно гибкие - управление версиями, обратная совместимость ... бит немного тяжелый.

Смежные вопросы