2009-07-03 9 views
2

У меня есть программа, которая была реализована на C++, теперь я хочу добавить поддержку MPI. Существует связка MPI для C++, с пространством имен MPI и всем.Добавление поддержки MPI в программу на C++

В моем случае у меня есть конкретный объект, который подходит для параллельного процесса в кластере.

Мои вопросы:

  • Кто-нибудь делал что-то подобное раньше? Могу ли я получить некоторые советы о том, как лучше всего это реализовать?
  • Как инициализировать MPI внутри конструктора? После инициализации MPI внутри конструктора класса будут также распараллелены все промежуточные вызовы?

Например:

MyClass obj; 

x = x; //this will be parallelized ? 
onj.calc(); 

y = x++; //this will be parallelized ? 

z = obj.result(); 
+1

Возможно, вы имели в виду OpenMP? – tstenner

ответ

6

Я очень рекомендую подбирая Gropp MPI Book, это действительно помогает для основного MPI!

+0

Спасибо, что примеры помогут. – lvcargnini

+0

, но он использует привязки C++ C++ как обычное приложение c, это моя точка. Как это будет работать при программировании OO. – lvcargnini

+0

Связывание MPI - это просто вызовы методов, в действительности и очень мало похожие на OO-программирование, вы должны просто использовать их так, как они были предназначены, методы для передачи информации с одного компьютера на другой. –

7

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

+0

Не точно он запускает один и тот же процесс в N узлах, чем используя общий доступ к сообщениям, а также обновляет информацию между узлами, разбрасывает и собирает, иногда концентрируясь в одном конкретном узле или обновляя значения во всех узлах, делая так называемое сокращение. Моя точка зрения заключается в том, как это будет вести себя в OO? Объект будет распараллелен только? поэтому вызовы MPI, используемые внутри объекта, будут видны только внутри объекта? или окружающая среда вне объекта также затронута? - lvcargnini 15 мин. Назад – lvcargnini

+0

Какая была бы задача разбить тот же точный процесс на разных узлах без выдачи новых данных ??? MPI, который я видел, написан для среды C или FORTRAN ... в этих реализациях нет OOP для MPI, поэтому я не уверен, почему вы спрашиваете о OOP ... если вы поместите код MPI внутри метода для класса, код MPI вызывается, когда этот метод выполняется, как и любой другой код, который вы бы поместили в метод. –

3

В качестве справочной информации:

Большинство приложений, использующих MPI написаны в Fortran или C. Каждая крупная реализация MPI написана на C.

Поддержка привязки MPI C++ является отрывочный в лучшем случае: Некоторые из типы данных MPI недоступны (например, MPI_DOUBLE), возникают проблемы с I/O и порядок включения заголовков в исходные файлы. Существуют проблемы с названием mangling, если библиотека MPI была построена с помощью C, а приложение построено с помощью Fortran или C++. Часто задаваемые вопросы по mpich2 содержат записи, помогающие справиться с этими проблемами. Я менее знаком с Open MPI, и это особенное поведение с Fortran и C++.

Для ваших конкретных вопросов:

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

Parallel Programming with MPI - отличная справочная информация для обучения программированию с помощью MPI. Примеры кода приведены на C, и большинство примеров API MPI показаны в примере. Я настоятельно рекомендую вам проработать эту книгу, чтобы узнать, что такое параллельное программирование, и нет.

+0

+1 для указания фундаментального непонимания. –

+0

Я получил два разных электронных письма в другом списке: «MPI имеет объектно-ориентированный дизайн, поэтому это не должно быть проблемой. Я бы отговорил вас использовать привязки C++, поскольку (насколько мне известно) они могут быть удалены от MPI 3.0 (есть такое предложение) ». «Есть предложение, которое проголосовало до сих пор, чтобы осудить привязки C++ в MPI-2.2 (что означает: все еще есть, но не советуйте использовать их). Это открывает дверь для потенциального удаления привязок C++ в MPI- 3.0 «. – lvcargnini

+0

Я бы не стал слишком беспокоиться о MPI 3.0. Во-первых, нет твердой даты выпуска 3.0. Во-вторых, все основные реализации MPI будут по-прежнему поддерживать стандарт 2.0 на время ожидания, чтобы обеспечить легкий переход для своих пользователей/клиентов. В качестве резервной копии вы всегда можете получить копию последней версии MPI, которая поддерживает стандарт 2.0 и белку от него на оставшуюся жизнь вашего приложения. –

6

Включение в старую резьбу, я нашел OpenMPI и Boost::MPI приятно работать. Объектно-ориентированный дизайн библиотеки может быть немного заперт, но мне было гораздо лучше работать с чистым MPI, особенно с автоматической сериализацией многих типов и довольно расширяемым интерфейсом для функций сбора/уменьшения, а также сериализации типы пользователей.