Вопрос

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

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

Мои вопросы таковы:

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

Например:

MyClass obj;

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

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

z = obj.result();
Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

По вашим конкретным вопросам:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top