Иногда необходимо запустить приложение на нескольких машинах (или процессорах), чтобы улучшить производительность (т.е. уменьшить время выполнения). Можно создать компьютерную сеть для последующего запуска приложения распределённо по всем узлам. При разработке такого приложения необходимо организовать обмен сообщениями. Я знаю две реализации:
- использование сокетов и работа с OS API напрямую,
- использование MPI.
Первый вариант обладает большими возможностями, но библиотека MPI существенно проще и, в действительности, шире применяется в параллельных вычислениях. MPI представляет собой стандарт некоторого набора функций для обмена сообщениями между процессами одного приложения. Существует бесплатная реализация данной библиотеки MPICH2, которая будет использоваться в данной статье. Вы модете найти большое количество мануалов и руководств по функциям библиотеки. Сейчас я остановлюсь только на установке и проверке работоспособности.
Установка библиотеки MPICH2 под Windows
Для того чтобы начать работу с библиотекой MPICH2, необходимо скачать совместимую с используемой операционной системой версию продукта здесь. Для ОС Windows – это установочный пакет формата MSI, поэтому инсталляция библиотеки проходит стандартным образом. Важно, что установку в этом случае надо проводить для всех пользователей системы.
Теперь необходимо добавить два основных исполняемых файла библиотеки mpiexec.exe и smpd.exe в список правил брандмауэра. Это необходимо, поскольку, при организации кластера используется сеть и доступ к каждому узлу сети должен быть разрешен для компонентов MPI. Конкретные настройки зависят от типа используемого брандмауэра.
На следующем этапе необходимо создать пользователя в системе, от имени которого будут исполняться компоненты библиотеки. Важно, что данный пользователь обязательно должен иметь свой пароль, т.к. MPICH2 не позволяет зарегистрировать исполняющего пользователя с пустым паролем. Регистрация осуществляется с помощью компонента wmpiregister.exe, находящегося в папке bin библиотеки и имеющего понятный оконный интерфейс:
Однако, это возможно сделать, используя консольную команду [путь_к_библиотеке]/bin/mpiexec -register.
Установка практически завершена. Осталось проверить правильность всех сделанных настроек. Для этой цели в папке examples есть примеры программ с параллельными алгоритмами. Для запуска можно использовать компонент wmpiexec.exe, который использует оконный интерфейс, который не нуждается в дополнительных комментариях.
Другой путь для исполнения приложений с использованием MPI – через консоль, например, написав подобную команду [путь_к_библиотеке]/bin/mpiexec -n 2 cpi.exe, где -n 2 указывает количество задействованных процессов (здесь их 2), а cpi.exe – это имя исполняемого приложения. Для простоты работы через консоль советую добавить в переменную окружения PATH путь к mpiexec.exe. Если выполнение приложения производится на однопроцессорной машине, то происходит эмуляция многопроцессорности, т.е. проверять работоспособность своих приложений можно «не отходя от кассы».
Проверка работоспособности
В качестве IDE для разработки используется MVS 2005. Напишем программу, которая будет привествовать этот мир от имени разных новорожденных процессов процессов. Для этого используется пустой проект (empty project) с изменением некоторых настроек проекта.
Итак, в первую очередь добавим директории, где будут лежать подключаемые заголовочные файлы и файлы библиотеки. Если кто-то не знает, то делается это следующим образом:
- Выбираем пункт меню Tools => Options.
- В дропдауне “Show directories for:” выбираем пункт “Include files”.
- Добавляем [путь_к_библиотеке]\Include
- В дропдауне “Show directories for:” выбираем пункт “Library files”.
- Добавляем [путь_к_библиотеке]\Lib
- В Solution Explorer кликаем правой кнопкой мыши на проекте и выбираем add => existing item. Выбираем все файлы с расширением .lib в папке [путь_к_библиотеке]\Lib
Проект полностью готов для работы с MPI. Могу посоветовать создавать фильтр для файлов библиотеки, добавленных в проект, чтобы они не мешались. Теперь добавим cpp файл с кодом приложения:
#include "stdio.h"
#include "mpi.h"
#include "stdlib.h"
#include "math.h"int ProcNum;
int ProcRank;int main(int argc, char *argv[]){
MPI_Status status;MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);
MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);printf(
"From process %i: Hello, World!\n", ProcRank);
MPI_Finalize();
}
* This source code was highlighted with Source Code Highlighter.
Компилируем его и запускаем полученный бинарник через wmpiexec на 4 процессах.
Как видим, мир поприветствовал каждый рождённый процесс.
Я умышленно приводил код без каких либо комментариев, а только с целью демонстрации работы библиотеки. В будущем я планирую посвятить статью списку функций MPI. Также интересной является тема избыточной параллельности и, вообще, вопрос когда стоит распарарллеливать приложение, а когда нет. Эти исследования также будут приведены позже. Поэтому у меня возник основной вопрос — сфера применимости в web технологиях? Пока мой интерес к параллельным вычислениям вызван другой проблемой: ускорение моделирования разного рода процессов.
Опубликовано 21‑го мая 2009 г.
Обновлено 25‑го марта 2010 г.
Если вы сделали всё возможное, а MPICH так и не заработал, — попробуйте аналогичное решение от Microsoft.
Смотрите также мою статью об OpenMP, предназначенном для вычислительных систем с общей памятью
MPI (Message Passing Interface) — интерфейс обмена сообщениями (информацией) между одновременно работающими вычислительными процессами. Он широко используется для создания параллельных программ для вычислительных систем с распределённой памятью (кластеров).
MPICH — самая известная реализация MPI, созданная в Арагонской национальной лаборатории (США). Существуют версии этой библиотеки для всех популярных операционных систем. К тому же, она бесплатна. Перечисленные факторы делают MPICH идеальным вариантом для того, чтобы начать практическое освоение MPI.
В данной статье речь пойдёт об MPICH2. Двойка в названии — это не версия программного обеспечения, а номер того стандарта MPI, который реализован в библиотеке. MPICH2 соответствует стандарту MPI 2.0, отсюда и название. Здесь уместно привести цитату с официального сайта (в моём переводе):
MPICH2 — это быстродействующая и широко портируемая реализация стандрта MPI (реализованы оба стандарта MPI-1 и MPI-2). Цели создания MPICH2 следующие:
- Предоставить реализацию MPI, которая эффективно поддерживает различные вычислительные и коммуникационные платформы, включая общедоступные кластеры (настольные системы, системы с общей памятью, многоядерные архитектуры), высокоскоростные сети (Ethernet 10 ГБит/с, InfiniBand, Myrinet, Quadrics) и эксклюзивные вычислительные системы (Blue Gene, Cray, SiCortex).
- Сделать возможными передовые исследования технологии MPI с помощью легко расширяемой модульной структуры для создания производных реализаций.
В дальнейшем будем предполагать, что у вас имеется сеть из нескольких домашних компьютеров (будем называть их вычислительными узлами), работающих под управлением Windows. Можно даже настроить систему на двух ноутбуках, соединённых беспроводной сетью. Если у вас нет нескольких компьютеров, объединённых в сеть, — не отчаивайтесь. Для учебных целей можно запускать все вычислительные процессы и на одном компьютере. Если компьютер одноядерный, то, естественно, прироста быстродействия вы не получите, — только замедление.
В качестве среды разработки будем использовать Visual Studio 2005 или 2008. Для удобства изложения созданную вами программу, использующую MPI, и предназначенную для запуска на нескольких вычислительных узлах, будем называть MPI-программой.
Принципы работы MPICH
Чтобы прояснить остальные разделы статьи, я решил начать изложение не с инструкций по установке MPICH, а с принципов её работы.
MPICH для Windows состоит из следующих компонентов:
Существует мнение, что smpd.exe — никакой не «менеджер процессов», а просто средство для их запуска. Это мнение обосновано тем, что полноценный менеджер процессов должен составлять расписание запуска процессов, осуществлять мониторинг и балансировку загрузки узлов.
В этой статье я придерживаюсь терминологии Арагонской лаборатории, которая называет smpd.exe, как «Process manager service for MPICH2 applications»
- Менеджер процессов
smpd.exe, который представляет собой системную службу (сервисное приложение). Менеджер процессов ведёт список вычислительных узлов системы, и запускает на этих узлах MPI-программы, предоставляя им необходимую информацию для работы и обмена сообщениями. - Заголовочные файлы (
.h) и библиотеки стадии компиляции (.lib), необходимые для разработки MPI-программ. - Библиотеки времени выполнения (
.dll), необходимые для работы MPI-программ. - Дополнительные утилиты (
.exe), необходимые для настройки MPICH и запуска MPI-программ.
Все компоненты, кроме библиотек времени выполнения, устанавливаются по умолчанию в папку C:\Program Files\MPICH2; dll-библиотеки устанавливаются в C:\Windows\System32.
Менеджер процессов является основным компонентом, который должен быть установлен и настроен на всех компьютерах сети (библиотеки времени выполнения можно, в крайнем случае, копировать вместе с MPI-программой). Остальные файлы требуются для разработки MPI-программ и настройки некоторого «головного» компьютера, с которого будет производиться их запуск.
Менеджер работает в фоновом режиме и ждёт запросов к нему из сети со стороны «головного» менеджера процессов (по умолчанию используется сетевой порт 8676). Чтобы как-то обезопасить себя от хакеров и вирусов, менеджер требует пароль при обращении к нему. Когда один менеджер процессов обращается к другому менеджеру процессов, он передаёт ему свой пароль. Отсюда следует, что нужно указывать один и тот же пароль при установке MPICH на компьютеры сети.
Рисунок 1. Схема работы MPICH на кластере.
В современных кластерах сеть передачи данных обычно отделяется от управляющей сети
Запуск MPI-программы производится следующим образом (смотрите рисунок 1):
- Пользователь с помощью программы Mpirun (или Mpiexec, при использовании MPICH2 под Windows) указывает имя исполняемого файла MPI-программы и требуемое число процессов. Кроме того, можно указать имя пользователя и пароль: процессы MPI-программы будут запускаться от имени этого пользователя.
- Mpirun передаёт сведения о запуске локальному менеджеру процессов, у которого имеется список доступных вычислительных узлов.
- Менеджер процессов обращается к вычислительным узлам по списку, передавая запущенным на них менеджерам процессов указания по запуску MPI-программы.
- Менеджеры процессов запускают на вычислительных узлах несколько копий MPI-программы (возможно, по несколько копий на каждом узле), передавая программам необходимую информацию для связи друг с другом.
Очень важным моментом здесь является то, что перед запуском MPI-программа не копируется автоматически на вычислительные узлы кластера. Вместо этого менеджер процессов передаёт узлам путь к исполняемому файлу программы точно в том виде, в котором пользователь указал этот путь программе Mpirun. Это означает, что если вы, например, запускаете программу C:\proga.exe, то все менеджеры процессов на вычислительных узлах будут пытаться запустить файл C:\proga.exe. Если хотя бы на одном из узлов такого файла не окажется, произойдёт ошибка запуска MPI-программы.
Чтобы каждый раз не копировать вручную программу и все необходимые для её работы файлы на вычислительные узлы кластера, обычно используют общий сетевой ресурс. В этом случае пользователь копирует программу и дополнительные файлы на сетевой ресурс, видимый всеми узлами кластера, и указывает путь к файлу программы на этом ресурсе. Дополнительным удобством такого подхода является то, что при наличии возможности записи на общий сетевой ресурс запущенные копии программы могут записывать туда результаты своей работы.
Работа MPI-программы происходит следующим образом:
- Программа запускается и инициализирует библиотеку времени выполнения MPICH путём вызова функции
MPI_Init. - Библиотека получает от менеджера процессов информацию о количестве и местоположении других процессов программы, и устанавливает с ними связь.
- После этого запущенные копии программы могут обмениваться друг с другом информацией посредством библиотеки MPICH. С точки зрения операционной системы библиотека является частью программы (работает в том же процессе), поэтому можно считать, что запущенные копии MPI-программы обмениваются данными напрямую друг с другом, как любые другие приложения, передающие данные по сети.
- Консольный ввод-вывод всех процессов MPI-программы перенаправляется на консоль, на которой запущена Mpirun. Насколько я понимаю, перенаправлением ввода-вывода занимаются менеджеры процессов, так как именно они запустили копии MPI-программы, и поэтому могут получить доступ к потокам ввода-вывода программ.
- Перед завершением все процессы вызывают функцию
MPI_Finalize, которая корректно завершает передачу и приём всех сообщений, и отключает MPICH.
Все описанные выше принципы действуют, даже если вы запускаете MPI-программу на одном компьютере.
Установка MPICH в Windows
Вначале нужно скачать последнюю версию MPICH2 с этой страницы: http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads. Если у вас 32-х битная версия Windows, то вам подойдёт дистрибутив под названием «Win32 IA32 (binary)».
Загруженный инсталлятор необходимо запустить с привилегиями администратора на всех компьютерах, на которых вы планируете запускать MPI-программы. Если у вас Windows Vista с включённым User Account Control (UAC), то для запуска инсталлятора с привилегиями администратора выполните следующие действия:
- Найдите в меню Пуск → Программы → Стандартные программу «Командная строка», нажмите на неё правой кнопкой мыши, и выберите пункт «Запуск от имени администратора» (рисунок 2). Подтвердите свои намерения и введите пароль, если необходимо.
- Введите в командной строке полный путь к программе инсталляции и нажмите Enter (рисунок 3).
Рисунок 2. Запуск командной строки с привилегиями администратора
Рисунок 3. Запуск инсталлятора из командной строки
Во время установки вам нужно будет ввести пароль для доступа к менеджеру процессов SMPD. Вы должны ввести одинаковый пароль на всех компьютерах:
Рисунок 4. Указание пароля для доступа к менеджеру процессов
В окне указания пути установки рекомендую оставить каталог по умолчанию. Кроме того, поставьте точку в пункте «Everyone»:
Рисунок 5. Указание пути установки
Если Windows спросит, разрешить ли доступ в сеть программе smpd.exe, то нажмите «Разрешить».
Теперь, скорее всего, MPICH2 правильно установлен на ваш компьютер. Однако, прежде чем переходить к настройке, обязательно следует проверить две вещи: запущена ли служба «MPICH2 Process Manager», и разрешён ли этой службе доступ в сеть.
Нажмите Пуск → Настройка → Панель управления → Администрирование → Службы. Вы должны увидеть «MPICH2 Process Manager» в списке служб (рисунок 6). Эта служба должна работать. Если служба в списке отсутствует, то вы, видимо, не запустили инсталлятор от имени администратора.
Рисунок 6. Служба «MPICH2 Process Manager» в списке служб
Теперь проверим, разрешён ли доступ в сеть для MPICH. Зайдите в Пуск → Настройка → Панель управления → Брандмауэр Windows. Там нажмите «Разрешение запуска программы через брандмауэр Windows». Вы должны увидеть в списке разрешённых программ «Process launcher for MPICH2 applications» и «Process manager service for MPICH2 applications»:
Рисунок 7. Программы MPICH в списке исключений брандмауэра
Если какая-то из перечисленных программ отсутствует в списке разрешённых программ, то вы можете добавить её вручную. Для этого нажмите кнопку «Добавить программу…», и добавьте C:\program files\mpich2\bin\mpiexec.exe, если отсутствует «Process launcher for MPICH2 applications», и C:\program files\mpich2\bin\smpd.exe, если отсутствует «Process manager service for MPICH2 applications».
Настройка MPICH
Рассмотрим настройку MPICH на примере конфигурации из двух компьютеров, объединённых в локальную сеть (Wi-Fi): один компьютер имеет сетевое имя MrBig и IP-адрес 192.168.1.4, другой — имя Small и адрес 192.168.1.3. Предположим, что MPI-программы мы хотим запускать с компьютера MrBIG. На обоих компьютерах установлены русскоязычные версии Windows. На MrBIG установлена Windows Vista, на Small — Windows XP. Каждый компьютер имеет двухъядерный процессор.
Прежде всего нужно создать на всех компьютерах пользователя с одинаковым именем и паролем; от имени этого пользователя будут запускаться MPI-программы (если у вас один компьютер — этот шаг можете пропустить). Проще всего это сделать, установив одинаковый пароль пользователям Администратор.
В Windows Vista учётная запись «Администратор» по умолчанию отключёна. Чтобы включить её, запустите командную строку от имени администратора (рисунок 2), и выполните команду net user Администратор /active:yes. Чтобы убедиться, что учётная запись работает, и установить на неё пароль, рекомендую зайти в систему с учётной записью «Администратор», и установить пароль с помощью Пуск → Настройка → Панель управления → Учётные записи пользователей → Изменение своего пароля.
Если хранение имени пользователя и пароля в реестре вам кажется небезопасным, то вы должны будете всё время вводить эти данные. В этом случае рекомендую запустить Wmpiregister и нажать кнопку «Remove», так как может оказаться, что какой-нибудь старый (и неверный) пароль уже записан в реестре (например, остался с предыдущей инсталляции MPICH)
Как уже было сказано ранее, любое действие система MPICH выполняет от указанного имени пользователя. Для того, чтобы спрашивать имя пользователя и пароль, используется программа Wmpiregister. Проблема в том, что имя пользователя и пароль спрашиваются достаточно часто, что может вызывать раздражение. Для того, чтобы этого избежать, Wmpiregister может сохранять имя пользователя и пароль в реестре Windows.
Запустите Wmpiregister на том компьютере, с которого вы собираетесь запускать MPI-программы. Для этого нажмите Пуск → Программы → MPICH2 → wmpiregister.exe. Окно программы выглядит следующим образом:
Рисунок 8. Программа Wmpiregister
Поясню смысл кнопок (справа-налево):
- «Cancel» — закрыть программу без выполнения какого-либо действия.
- «OK» — передать введённые имя пользователя и пароль вызывающей программе. Если Wmpiregister запущена нами как отдельное приложение, то нажатие кнопки OK эквивалентно нажатию кнопки Cancel.
- «Remove» — нажатие этой кнопки удаляет сохранённые ранее имя пользователя и пароль из реестра Windows.
- «Register» — сохраняет имя пользователя и пароль в реестре.
Введите имя пользователя и пароль в окне программы и нажмите кнопку «Register». Должна появиться надпись «Password encrypted into the Registry» (рисунок 8). После этого окно программы больше не будет появляться при выполнении каких либо действий MPICH. Если вы захотите впоследствии удалить имя пользователя и пароль из реестра, то вам нужно будет снова запустить эту программу, и нажать кнопку «Remove».
Теперь нам нужно настроить менеджеры процессов MPICH. Для этого запустите на всех компьютерах программу Wmpiconfig. Если все предыдущие шаги сделаны правильно, то в поле «version» в левой колонке таблицы вы должны увидеть версию установленного менеджера процессов (рисунок 9). Если менеджер процессов не установлен, или ему закрыт доступ в сеть, то вы увидите надпись «MPICH2 not installed or unable to query the host» в одном из полей левого столбца. В этом случае обратитесь за помощью к предыдущему разделу статьи.
Рисунок 9. Программа Wmpiconfig
Wmpiconfig предназначена для настройки менеджеров процессов на текущем компьютере и других компьютерах сети. Для этого она подсоединяется к менеджерам процессов на выбранных компьютерах, читает имеющиеся у них настройки, и сообщает им новые настройки, если нужно. Элементы управления программы Wmpiconfig выполняют следующие действия:
- Слева-внизу имеется список компьютеров, с которыми работает программа настройки. Имя компьютера на белом фоне означает, что не было попыток связаться с этим компьютером; зелёный фон означает, что связь произведена успешно; серый фон означает, что при установлении связи возникла ошибка. Удалить компьютер из списка можно клавишей Del. Следует иметь в виду, что этот список предназначен только для удобства настройки, и не имеет никакого отношения к списку компьютеров, на которых будет запущена MPI-программа.
- Кнопка «Get Hosts» получает список компьютеров в заданном домене или рабочей группе (задаётся в выпадающем списке «Domain»). Полученный список заменяет имеющийся список компьютеров или, если нажата кнопочка «+», добавляет компьютеры к текущему списку.
- Кнопка «Scan Hosts» получает настройки со всех компьютеров списка; кнопка «Scan for Versions» получает только номера версий.
- Кнопка «Get Settings» получает текущие настройки того компьютера, имя которого введено в поле ввода «Host». При выборе компьютера в списке компьютеров его имя автоматически вводится в поле «Host». Если нажата кнопка «Click», то настройки будут получены автоматически при выборе компьютера из списка.
- Справа в окне расположена таблица настроек. Если вы хотите изменить какие-либо настройки, то нужно дважды щёлкнуть на соответствующем поле в первом столбце таблицы. Пустое поле означает, что используется настройка по умолчанию, указанная во втором столбце. Настройки, предназначенные к изменению следует отмечать установкой галочки слева.
- Кнопка «Apply» применяет выделенные галочкой настройки к тому компьютеру, имя которого находится в поле «Host». Кнопка «Apply All» применяет настройки ко всем компьютерам списка.
- Кнопка «Cancel» закрывает программу. Насколько я понял, действие кнопки «OK» ничем не отличается от действия кнопки «Cancel».
На том компьютере, с которого планируется запуск программ, нужно указать список доступных вычислительных узлов (если у вас один компьютер — переходи́те к разделу «запуск MPI-программ»). Этот список нужно ввести (через пробел) в поле hosts левого столбца таблицы (рисунок 10), и нажать кнопку «Apply». На рисунке показан пример, когда сам компьютер, с которого производится запуск MPI-программ, является одним из вычислительных узлов.
Рисунок 10. Указываем список доступных вычислительных узлов
У меня в сети имелся DNS-сервер, который неверно переводил имя одного из компьютеров в IP-адрес. Поэтому я везде в MPICH прописал IP-адреса вместо имён. Однако MPI-программы всё равно не работали (запускались, но не могли обмениваться информацией по сети). Просмотр сообщений об ошибках показал, что MPICH во время работы переводит IP-адреса в имена и обратно. Так что большого смысла в использовании IP-адресов вместо имён не оказалось. Проблема с DNS-сервером решалась следующими способами: 1) отключением сервера, 2) переименованием компьютера (чтобы сервер про него не знал), или 3) (рекомендуемый способ) указанием соответствия между именами компьютеров и их IP-адресами в файлах C:\Windows\System32\drivers\etc\hosts на всех узлах
Чтобы избежать возможных проблем, связанных с разрешением имён, рекомендую использовать IP-адреса вместо имен компьютеров.
Теперь проверим, видят ли менеджеры процессов друг друга по сети. Для этого в программе Wmpiconfig на «главном» компьютере нужно ввести в поле «Host» адрес проверяемого компьютера и нажать «Get Settings». Вы должны увидеть версию установленного менеджера процессов на выбранном компьютере. Если связь установить не удаётся — будет пауза в несколько секунд, после чего в последней строке таблицы появится сообщение об ошибке. Если до сих пор у вас всё шло хорошо, то следует проверить сеть: убедиться, что компьютеры «видят» друг друга, попробовать отключить бранмауэры, и тому подобное. Также проверьте, совпадает ли контрольная фраза (поле phrase) на всех компьютерах.
Создание общего сетевого ресурса
Для удобного запуска MPI-программ следует создать на одном из компьютеров общий сетевой ресурс. Если вы собираетесь запускать MPI-программы на одном компьютере, можете пропустить этот раздел.
Создайте папку (например, имеющую имя «MPI»), в которую вы будете выкладывать MPI-программы, нажмите на неё правой кнопкой мыши, и выберите «Свойства». В появившемся окне выберите вкладку «Доступ» (рисунок 11), в которой нажмите кнопку «Дополнительный доступ…». В появившемся окне «Дополнительный общий доступ» поставьте галочку «Открыть общий доступ к этой папке», и установите «число одновременных пользователей» таким, чтобы оно превышало количество компьютеров сети, предназначенных для запуска MPI-программ:
Рисунок 11. Окно свойств папки
Нажмите «OK» в окне «Дополнительный общий доступ» и перейдите во вкладку «Безопасность». Там нажмите кнопку «Изменить» (рисунок 12), появится окно «Разрешения для [имя папки]». В этом окне нажмите кнопку «Добавить…», появится окно выбора объекта для добавления (пользователя или группы). Введите в поле ввода «Все» (или «All», если у вас английская версия Windows):
Рисунок 12. Добавление разрешений для доступа к папке
Нажмите кнопку «OK» в двух окнах. Во вкладке «Безопасность» в верхнем списке должна добавиться строка «Все», при выборе которой в списке разрешений должны стоять галочки напротив пунктов «Чтение и выполнение», «Список содержимого папки» и «Чтение».
Убедитесь, что созданная общая папка видна с другого компьютера. Для этого нажмите на другом компьютере Пуск → Выполнить…, и введите сетевой путь к папке. В моём случае это \\192.168.1.4\MPI\.
Запуск MPI-программ
Для запуска MPI-программ в комплект MPICH2 входит программа с графическим интерфейсом Wmpiexec, которая представляет собой оболочку вокруг соответствующей утилиты командной строки Mpiexec. К сожалению, Wmpiexec глючит (уже много лет, сколько существует MPICH), поэтому самый нормальный способ запускать MPI-программы — это пользоваться непосредственно Mpiexec. Однако в данной статье я расскажу о Wmpiexec, так как эта программа интуитивно понятнее.
Окно программы Wmpiexec показано на рисунке 13 (обратите внимание, что включён флажок «more options»).
Рисунок 13. Программа Wmpiexec
Элементы управления окна имеют следующий смысл:
- Поле ввода «Application»: сюда вводится путь к MPI-программе. Как уже было сказано ранее, путь передаётся в неизменном виде на все компьютеры сети, поэтому желательно, чтобы программа располагалась в общей сетевой папке.
- «Number of processes»: число запускаемых процессов. По умолчанию процессы распределяются поровну между компьютерами сети, однако это поведение можно изменить при помощи конфигурационного файла.
- Кнопка «Execute» запускает программу; кнопка «Break» принудительно завершает все запущенные экземпляры.
- Флажок «run in a separate window» перенаправляет вывод всех экземпляров MPI-программы в отдельное консольное окно.
- Кнопка «Show Command» показывает в поле справа командную строку, которая используется для запуска MPI-программы (напоминаю: Wmpiexec — всего лишь оболочка над Mpiexec). Командная строка собирается из всех настроек, введённых в остальных полях окна.
- Далее идёт большое текстовое поле, в которое попадает ввод-вывод всех экземпляров MPI-программы, если не установлен флажок «run in a separate window».
- Флажок «more options» показывает дополнительные параметры.
- «working directory»: сюда можно ввести рабочий каталог программы. Опять же, этот путь должен быть верен на всех вычислительных узлах. Если путь не указан, то в качестве рабочего каталога будет использоваться место нахождения MPI-программы.
- «hosts»: здесь можно указать через пробел список вычислительных узлов, используемых для запуска MPI-программы. Если это поле пустое, то используется список, хранящийся в настройках менеджера процессов текущего узла (смотрите раздел «Настройка MPICH»).
- «environment variables»: в этом поле можно указать значения дополнительных переменных окружения, устанавливаемых на всех узлах на время запуска MPI-программы. Синтаксис следующий:
имя1=значение1, имя2=значение2. - «drive mappings»: здесь можно указать сетевой диск, подключаемый на каждом вычислительном узле на время работы MPI-программы. Синтакис:
Z:\\winsrv\wdir. - «channel»: позволяет выбрать способ передачи данных между экземплярами MPI-программы.
- «extra mpiexec options»: в это поле можно ввести дополнительные ключи для командной строки Mpiexec.
Вместе с MPICH поставляется образец MPI-программы: C:\Program Files\MPICH2\examples\cpi.exe (исходный код также имеется). Это простая программа, приближённо вычисляющая значение числа Пи путём численного вычисления следующего интеграла:
Вначале попробуем запустить один, два, и четыре процесса на одном компьютере. Чтобы MPICH не распределял запускаемые процессы между имеющимися узлами, отключим работу с сетью; для этого существует ключ командной строки -localonly. При его добавлении менеджер процессов не используется. Это очень полезно, если по каким-либо причинам MPICH не удаётся настроить. Введите этот ключ в поле «extra mpiexec options» (рисунок 13).
В поле «Application» введите путь к программе cpi.exe. Так как программа запускается на одном компьютере, путь можно вводить локальный.
«Number of processes» введите равным 1, и нажмите кнопку «Execute». Программа запустится и спросит число интервалов для численного интегрирования. Введите 100000000, и нажмите Ctrl+Enter (по неизвестным мне причинам клавиша Enter не работает). Программа посчитает число Пи, и выведет время, затраченное на вычисление (в моём случае примерно 1.437 секунды). Проведите вычисления со 100 миллионами интервалов ещё несколько раз, чтобы определить минимальное время. После этого введите 0, и нажмите Ctrl+Enter. Программа завершится.
К сожалению, на моём компьютере после завершения MPI-программы не удаётся запустить её вновь, не закрывая Wmpiexec. Можете попробовать запустить программу ещё раз, на этот раз выбрав 2 процесса. Если не получится — перезапустите Wmpiexec.
Я получил следующие времена вычислений на одном компьютере: 1 процесс — 1.424 секунды, 2 процесса — 0.7801 секунды, 4 процесса — 0.7766 секунды. Видно, что два процесса выполнили вычисления почти в 2 раза быстрее, чем один процесс, в то время как использование 4-х процессов не дало дальнейшего выигрыша в скорости. Это вызвано тем, что компьютер, на котором я запускал программу, имеет двухъядерный процессор.
Теперь запустим MPI-программу на двух компьютерах. Для этого скопируйте программу cpi.exe на общий сетевой диск (в моём случае это \\192.168.1.4\MPI\). Убедитесь, что программа видна со всех компьютеров по одному и тому же сетевом адресу.
Теперь самое главное. Так как экземпляры MPI-программы работают и обмениваются данными по сети независимо от менеджера процессов, их тоже нужно внести в список исключений брандмауэра Windows. Добавьте cpi.exe (прямо с сетевого ресурса) в список исключений брандмауэра на всех компьютерах сети (рисунок 7). Я пробовал просто отключить брандмауэр на всех компьютерах — не помогло.
Укажите сетевой адрес программы cpi.exe (в моём случае это \\192.168.1.4\MPI\cpi.exe) в поле «Application» программы Wmpiexec. Выберите число процессов и нажмите кнопку Execute.
Я получил следующие времена вычислений на двух компьютерах: 1 процесс — 1.424 секунды, 2 процесса — 1.023 секунды, 4 процесса — 0.5714 секунды. На этот раз 4 процесса дали выигрыш в скорости по сравнению с двумя процессами. Конечно же, беспроводная сеть, на которой я тестировал вычисления, передаёт данные очень медленно (10 МБит/сек), и имеет огромные задержки. Однако, некоторое ускорение удалось получить даже на такой сети.
Создание MPI-программы в Visual Studio
Прежде всего, нужно настроить Visual Studio, чтобы он находил заголовочные файлы и .lib-библиотеки MPICH. Для этого запустите Visual Studio и нажмите Tools → Options, в дереве слева выберите Projects and Solutions → VC++ Directories. Справа-вверху выберите Show directories for: Include files. Нажмите кнопочку с жёлтой папочкой и добавьте путь к .h-файлам:
Рисунок 14. Настройка пути к заголовочным файлам MPICH
После этого проделайте ту же процедуру для библиотек (Show directories for: Library files):
Рисунок 15. Настройка пути к библиотечным файлам MPICH
Теперь создайте консольный проект так, как показано на рисунках 2–4 в статье об OpenMP. Откройте окно настроек проекта (Project → Properties), выберите Configuration: All Configurations, в дереве слева выберите Configuration Properties → Linker → Input. Добавьте mpi.lib в поле Additional Dependencies справа:
Рисунок 16. Добавление mpi.lib к программе
Исходный код программы для проверки можете взять из файла C:\Program Files\MPICH2\examples\icpi.c. Откомпилируйте программу и запустите с помощью Wmpiexec — всё должно работать.
Удаление MPICH
Для того, чтобы корректно и полностью удалить MPICH из системы, нужно выполнить 3 действия:
- Удалите сохранённый пароль из реестра, запустив Wmpiregister, и нажав кнопку «Remove» (рисунок 8).
- Остановите менеджер процессов. Для этого откройте окно управления службами (Пуск → Настройка → Панель управления → Администрирование → Службы), выберите «MPICH2 Process Manager» (рисунок 6), и нажмите кнопку с чёрным квадратиком вверху окна.
- Запустите инсталлятор MPICH от имени администратора (рисунки 2 и 3), и выберите опцию «Remove».
P.S.
Если вы не знаете, как создавать параллельные программы при помощи MPI, советую прочесть спецификацию, там всё подробно описано: http://www.mpi-forum.org/docs/mpi21-report.pdf.
User’s Guides
MPICH Installers’ Guide is a guide to help with the installation process of MPICH. Both Unix and Windows installation procedures are outlines.
MPICH Users’ Guide provides instructions to use MPICH. This manual explains how to run MPI applications after MPICH is installed and working correctly.
MPICH README is a basic README for MPICH beginners. It contains the simplest set of instructions to get started with MPICH.
FAQ provides answers to frequently asked questions.
What’s New in MPICH-4.3.0
MPICH CHANGES lists the changes included in each release of MPICH.
MPICH RELEASE NOTES lists the known problems in each release of MPICH.
Tutorials
Introduction to MPI: Argonne MPI Tutorials (see also the code examples in the link).
Advanced Parallel Programming with MPI-3: Argonne MPI Tutorials (see also the code examples in the link).
Publications
Publications: Publications on MPI.
Developers
MPICH Wiki: MPICH wiki hosts most of our developer documentation.
Developer Documentation: MPICH developer documentation.
Support: You can get more support from this page.
1 minute read
Requirements
- A copy of the distribution, mpich.tar.gz. Download the latest stable version of mpich from: https://www.mpich.org/downloads/
- A C compiler. See how to install gcc.
- A Fortran-77, Fortran-90, and/or C++ compiler if you wish to write MPI programs in any of these languages. See how to install gfortran.
Directions
Linux and macOS
- Make sure you are using bash.
If it is not bash, command:
bash - Create a folder for mpich
- Unpack mpich-x-y-z.tar.gz to that folder, where x-y-z is the version
tar xfz mpich-x-y-z.tar.gz - Create 2 other folders
mkdir /home/you/mpich/build mkdir /home/you/mpich/mpich-install - Enter the build directory and run the configuration script. It is important to write the full path in the prefix argument.
cd /home/you/mpich/build ../mpich-x-y-z/configure --with-device=ch4:ofi -prefix=/home/you/mpich/mpich-install 2>&1 | tee c.txt - Build mpich. Run command and go for a coffee:
- Install MPICH.
make install 2>&1 | tee mi.txt - Add the bin subdirectory of the installation directory to your path:
export PATH=/home/you/mpich/mpich-install/bin:$PATH - Check if the installation went well:
which mpicc which mpiexec - Test mpi in your machine by using the example file that the building process creates. That simple program computes the value of PI. While still inside the build folder, command:
mpiexe -n NC ./examples/cpiwhere NC is the number of cores of your machine.
Learn more
Windows
You should install Microsoft MPI instead.
See how to install Microsoft MPI.
Source: Internet
Mpich2 is the mpich implementation version that corresponds to the MPI-2, including some functions of the MPI-2 relative to the extended MPI-1, such as dynamic task management, parallel I/O and so on. The latest version is MPICH2-1.0.5.
2.3.1 install and configure mpich2 for Microsoft Windows
Install mpich2 for Microsoft Windows with the following requirements:
1. Windows 2003/XP Professional or server (Windows 95/98 is not supported)
2. All Hosts must be able to establish TCP/IP connections
3. mpich supports the following compilers: Ms VC ++ 6.x, ms vc ++. net, Compaq Visual Fortran 6.x, intel Fortran, GCC, and G77. To install mpich, you must log on as an administrator.
This experiment uses the mpich2 for microoft Windows Version 1.0.5p2,
Run the command after downloading and install it. Yes: http://www-unix.mcs.anl.gov/mpi/
Mpich/downloads/mpich2-1.0.5p2-win32-ia32.msi.
Log on to each host as an administrator and create the same account on all hosts (you can also use different user names and accounts for each machine, and then create a configuration file, run the command lineProgram), And then run the downloaded Installation File to install mpich on each host.
Open the progress logging card in the task manager, and there is an smpd.exe process. If yes, the installation is successful. The process runs automatically each time the system is started.
Add the mpich2 path to windows so that you can use mpiexec in any path later:
1. Right-click «my computer» and click Properties.
2. Select the advanced tag.
3. Select environment variables.
4. under system variables, select the PATH variable and click Edit. add «C: \ mpich2 \ bin» to the end of the list. separate it from the previous path with a semicolon.
After mpich2 is installed, you must register and configure each computer for use. The registration must be performed on each computer, and the configuration only needs to be executed on the master computer. The purpose of registration is to register the account and password previously applied on each computer to mpich2 so that mpich2 can access each host in the network environment. Configuration method: Run «mpich \ MPD \ bin \ wmpiregister.exe» wmpiregister run interface 2.1:
Figure 2.1 wmpiregister running interface
The setting of the program is very simple. You only need to enter the user name you are currently using to log on to windows in the account. Note that it must be administrator permission. Enter the password corresponding to this user name in the password. Mpich2 cannot use a user without a password. If the current user does not have a password, create one for it and then run wmpiregister for configuration. After entering the information, click Register. The password encrypted into the registry is displayed, indicating that the registration is successful. Click the register button, the above information will be written to the hard disk, otherwise it will be stored in the memory and will not exist after the restart.
In order for programs to run on many hosts, the host must know the information of the currently available hosts without creating a configuration file. In this case, you need to run the configuration program of mpich2 for configuration.
The configuration program provided by mpich2 is a graphical interface program, which can be started from «start-> Program-> mpich2-> wmpiconfig.exe. The Page 2.2 After startup is shown as follows:
Figure 2.2 run wmpiconfig.exe
Select the current workgroup from the drop-down menu of D omain. click get hosts to view all computers in the Working Group. click scan for version to search for hosts with mpich2 installed. the names and versions of successfully installed hosts are displayed in green. uninstalled items are displayed in gray.
2.3.2 precautions
1. mpich2 for Windows requires at least DOTNET frameworks 1.1, So download and install DOTNET frameworks1.1 or 2.0 first. We recommend that you install visual studio2005, which comes with DOTNET frameworks2.0.
2. Assume that mpich2 is installed in the % mpich2root % directory, which contains include, Lib, bin, examples, and jumpshot. Add lib and include to the corresponding directory of VC. Examples is an example of the program CPI, which contains C, C ++, and fortunSource code. This example can be used for testing during configuration.
3. mpich2 creates a service mpich2 Process Manager, Argonne National Lab, and provides the service image % mpich2root % \ bin \ SMPD. This program is the Process Manager of mpich2.
4. mpich2 also requires an account to run. If you create a local account mpiaccount, make sure that the running accounts of all the machines participating in the cluster are the best.
