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

Getting started

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 24. Boost.MPI

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

PrevUpHomeNext

Getting started

Начало работы с Boost. MPI требует рабочей реализации MPI, последней версии Boost и некоторой информации о конфигурации.

MPI Implementation

Начать следует с Boost. Для начала вам понадобится рабочая реализация MPI. Существует множество соответствующихреализаций MPI. Повышаю. MPI должен работать с любой из реализаций, хотя он был тщательно протестирован только с:

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

#include <mpi.h>
#include <iostream>
int main(int argc, char* argv[])
{
  MPI_Init(&argc, &argv);
  int rank;
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  if (rank == 0) {
    int value = 17;
    int result = MPI_Send(&value, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
    if (result == MPI_SUCCESS)
      std::cout << "Rank 0 OK!" << std::endl;
  } else if (rank == 1) {
    int value;
    int result = MPI_Recv(&value, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,
			  MPI_STATUS_IGNORE);
    if (result == MPI_SUCCESS && value == 17)
      std::cout << "Rank 1 OK!" << std::endl;
  }
  MPI_Finalize();
  return 0;
}

Вы должны собрать и запустить эту программу на двух процессорах. Для этого обратитесь к документации по внедрению MPI. СOpenMPI, например, вы компилируете сmpiCCилиmpic++компилятор, загрузите демон LAM/MPI и запустите свою программу черезmpirun. Например, если ваша программа называетсяmpi-тест.cpp, используйте следующие команды:

mpiCC -o mpi-test mpi-test.cpp
lamboot
mpirun -np 2 ./mpi-test
lamhalt

Когда вы запустите эту программу, вы увидитеРанг0ОК!иРанг1ОК!на экране. Однако они могут быть напечатаны в любом порядке и даже могут перекрывать друг друга. Следующие результаты вполне законны для этой программы MPI:

Rank Rank 1 OK!
0 OK!

Если ваш вывод выглядит примерно так, как описано выше, ваша реализация MPI, похоже, работает с компилятором C++, и мы готовы двигаться дальше.

Configure and Build

Build Environment

Как и остальные Boost, Boost. MPI использует версию 2Boost. Построитьсистему для настройки и построения бинарной библиотеки.

Пожалуйста, обратитесь к общим инструкциям по установке Boost дляUnix Variant(включая Unix, Linux и MacOS) илиWindows. Упрощенные инструкции по сборке должны применяться на большинстве платформ с несколькими конкретными изменениями, описанными ниже.

Bootstrap

Как описано в инструкциях по установке бустера, перейдите в корень дистрибутива источника Boost и запустите скриптbootstrap./bootstrap.shдля вариантов unix илиbootstrap.batдля Windows. Это позволит создать файл project-config.jam в корневом каталоге. Используйте свой любимый текстовый редактор и добавьте следующую строку:

using mpi ;

Кроме того, вы можете предоставить список библиотек Boost, которые вы хотите создать. Пожалуйста, обратитесь к--вариантсценарий бутстрапа.

Setting up your MPI Implementation

Во-первых, вам нужно отсканировать файлinclude/boost/mpi/config.hppи проверить, нужно ли изменить некоторые настройки для реализации MPI или предпочтений.

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

Большинство реализаций MPI требуют конкретной компиляции и опций ссылок. Чтобы замаскировать параметры тезисов для пользователя, большинство реализаций MPI предоставляют обертки, которые бесшумно передают эти параметры компилятору.

В зависимости от вашей реализации MPI может потребоваться некоторая работа, чтобы сообщить Boost, какой конкретный вариант MPI использовать. Это делается через, используяmpi;директивупроекта-конфигурацию.джемфайл.

Общая форма следующая (не забудьте оставить места вокруг:и до;):

using mpi
   : [<MPI compiler wrapper>]
   : [<compilation and link options>]
   : [<mpi runner>] ;
  • Если повезет

Для тех, кто используетMPICH2,OpenMPIили некоторые из их производных, конфигурация может быть почти автоматической. На самом деле, если ваша командаmpicxxнаходится на вашем пути, вам просто нужно использовать:

using mpi ;

Директива найдет обертку и определит варианты использования.

  • Если обертка не на вашем пути

...или если у него нет обычного названия обертки, вам нужно будет сообщить системе сборки, где ее найти:

using mpi : /opt/mpi/bullxmpi/1.2.8.3/bin/mpicc ;
  • Если ваша обертка действительно эксцентрична

или не существует вообще (это случается), необходимо предоставить компиляцию и варианты сборки в среду сборки с использованиемджемдиректив. Например, для конкретной реализации Intel MPI можно использовать следующее:

using mpi : mpiicc :
      <library-path>/softs/intel/impi/5.0.1.035/intel64/lib
      <library-path>/softs/intel/impi/5.0.1.035/intel64/lib/release_mt
      <include>/softs/intel/impi/5.0.1.035/intel64/include
      <find-shared-library>mpifort
      <find-shared-library>mpi_mt
      <find-shared-library>mpigi
      <find-shared-library>dl
      <find-shared-library>rt ;

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

$ mpiicc -show
icc -I/softs/intel//impi/5.0.3.048/intel64/include -L/softs/intel//impi/5.0.3.048/intel64/lib/release_mt -L/softs/intel//impi/5.0.3.048/intel64/lib -Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker /softs/intel//impi/5.0.3.048/intel64/lib/release_mt -Xlinker -rpath -Xlinker /softs/intel//impi/5.0.3.048/intel64/lib -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/5.0/intel64/lib/release_mt -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/5.0/intel64/lib -lmpifort -lmpi -lmpigi -ldl -lrt -lpthread
$

[$mpicc - Showme icc] -I/opt/mpi/bullxmpi/1.2.8.3/include -pthread -L/opt/mpi/bullxmpi/1.2.8.3/lib -lmpi -ll - lm - lnuma -Экспортно-динамический -lrt -lnsl -lutil -lm -ldl $mpicc -showme:compile -I/opt/mpi/bullxmpi/1.2.8.3/include -pthread $mpicc-showme:link-pthread -L/opt/mpi/bullxmpi/1.2.8.3/lib -lmpi -ll - lm - lnuma -Экспортно-динамический -lrt -lnsl -lutil -lm -ldl $ ]

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

  • Если вы хотите провести регрессионные тесты

Что является хорошей вещью.

Третий (необязательный) аргумент конфигурирует рост. MPI для проведения регрессионных тестов. Эти параметры определяют исполняемый файл, используемый для запуска заданий (по умолчанию это «mpirun»), за которым следуют любые необходимые аргументы для запуска тестов и указания программе ожидать, что последует количество процессоров (по умолчанию: «-np»). С параметрами по умолчанию, например, тестовая ремня будет выполняться, например,

mpirun -np 4 all_gather_test

Некоторые реализации обеспечивают альтернативную пусковую установку, которая может быть более удобной. Например, MPI Intel обеспечиваетmpiexec.гидры:

$mpiexec.hydra -np 4 all_gather_test

Он не требует, чтобы какой-либо демон работал (в отличие от их командыmpirun). Однако такую пусковую установку необходимо уточнить:

using mpi : mpiicc :
      .....
 : mpiexec.hydra -n  ;

Build and Install

Для построения всего распределения Boost:

$cd <boost distribution>
$./b2 install
[Tip] Tip

Или, если у вас есть многофункциональный компьютер (скажем 24):

$cd <boost distribution>
$./b2 -j24 install

Установка Boost. MPI может быть выполнен на этапе сборки путем указанияустановкив командной строке и (факультативно) обеспечения местоположения установки, например,

$./b2 install

Эта команда установит библиотеки в местоположение системы по умолчанию. Чтобы изменить путь, по которому будут установлены библиотеки, добавьте опцию--префикс=PATH.

Затем вы можете запустить регрессионные тесты с:

$cd <boost distribution/lib/mpi/test
$....../b2

Using Boost.MPI

Создание приложений на основе Boost. MPI, компилируйте и связывайте их, как обычно для программ MPI, но не забудьте связать с библиотекамиboost_mpiиboost_serialization, например,

mpic++ -I/path/to/boost/mpi my_application.cpp -Llibdir \
  -lboost_mpi-gcc-mt-1_35 -lboost_serialization-gcc-d-1_35.a

Если вы планируете использоватьпривязки Pythonдля Boost. MPI в сочетании с C++ Boost. MPI, вам также нужно будет связать с библиотекой boost_mpi_python, например, добавив-lboost_mpi_python-gcc-mt-1_35в команду ссылки. Этот шаг будет необходим только в том случае, если вы намеренызарегистрировать типы C++или использоватьмеханизм скелета / контентаиз Python.


PrevUpHomeNext

Статья Getting started раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 24. Boost.MPI может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 24. Boost.MPI ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:55:27/0.026366949081421/1