Для начала нам нужно определиться с набором инструментов для работы. Нам потребуется компилятор C/C++ и собственно библиотека OpenMPI, которую нам предлагают на официальном сайте http://www.open-mpi.org/.
Рекомендую установить последнюю версию XCode (в моем случае это 4.5.1 под Mac OS X 10.7.5), с данной версией идет обновление компилятора gcc и g++, если у вас ранее они не были установлены. Другим вариантом может быть отдельная установка компиляторов, но этот путь может вызвать различные проблемы и потерю времени.
Следующим шагом является установка OpenMPI. Официальный сайт OpenMPI предлагает скачать установщик для Windows и пакеты для Linux с поддержкой RPM-пакетов. Оба варианта нас не устраивают, остается вариант с установкой из исходника (в моем случае предлагают скачать .TAR.BZ2 архив OpenMPI-1.6.3.tar.bz2).
Установка не из пакета, а по принципу make && make install является плохим тоном, и лучше от этого отказаться (в данном случае возможность удалить пакет может быть потеряна, и нет гарантий, что будет проверена совместимость исходников с текущим набором инструментов и библиотек). Предлагаю воспользоваться менеджером homebrew. Список Формул (аналог пакетов в Unix-подобных системах) менеджера Homebrew, нас интересует формула OpenMPI. После его установки достаточно выполнить команду:
brew install open-mpi --disable-fortran
Таким образом у нас сохраняется возможность удалить установленные исходники, мы собираем их на целевой машине и скрипт-формула, в случае грамотного написания, сообщит нам о совместимости и дополнительных требованиях к исходнику. Данный механизм чем-то напоминает Portage для установки в Gentoo.
2. Этап после подготовленной программной среды
У вас настроена среда, установлена библиотека OpenMPI. Попробуем написать и запустить первое приложение. Возьмем пример OpenMPI Hello World приложения на сайте Standford:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
printf("Process %d on %s out of %d\n", rank, processor_name, numprocs);
MPI_Finalize();
}
Как видно на сайте, в процессе компиляции учавствует утилита mpicc. Компилятор mpicc – обертка для компиляторов GNU (gcc, g++), которая линкует соответствующую библиотеку MPI. Его функциональность отражается при вызове mpicc -showme, который выводит соответствующий обвертке mpicc вызов настоящего компилятора и подключаемые библиотеки. В моем случае выводится:
llvm-gcc -I/usr/local/Cellar/open-mpi/1.6.2/include -L/usr/local/Cellar/open-mpi/1.6.2/lib -lmpi -lmВы можете запросить отдельно mpicc -showme:link и mpicc -showme:incdirs. Вместо обвертки можно использовать компилятор gcc с требуемыми директивами mpicc.
Запустим наше первое приложение, для этого выполним сборку и запуск:
mpicc main.c -o main ./main
Продолжение следует...
Комментариев нет:
Отправить комментарий