MPICH и Windows
Если вы сделали всё возможное, а 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 2008 или 2010 (возможно использование бесплатной версии Express). Для удобства изложения созданную вами программу, использующую 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).

Рисунок 3. Запуск инсталлятора из командной строки
Во время установки вам нужно будет ввести пароль для доступа к менеджеру процессов SMPD. Вы должны ввести одинаковый пароль на всех компьютерах:
В окне указания пути установки рекомендую оставить каталог по умолчанию. Кроме того, поставьте точку в пункте «Everyone»:
Если Windows спросит, разрешить ли доступ в сеть программе smpd.exe, то нажмите «Разрешить».
Теперь, скорее всего, MPICH2 правильно установлен на ваш компьютер. Однако, прежде чем переходить к настройке, обязательно следует проверить две вещи: запущена ли служба «MPICH2 Process Manager», и разрешён ли этой службе доступ в сеть.
Нажмите Пуск → Настройка → Панель управления → Администрирование → Службы. Вы должны увидеть «MPICH2 Process Manager» в списке служб (рисунок 6). Эта служба должна работать. Если служба в списке отсутствует, то вы, видимо, не запустили инсталлятор от имени администратора.
Теперь проверим, разрешён ли доступ в сеть для 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-программы (если у вас один компьютер — этот шаг можете пропустить). Проще всего это сделать, установив одинаковый пароль пользователям Администратор.
В комментариях подсказывают, что лучше создать для 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» — самый частый поисковый запрос, по которому эту страницу находят в Интернете. В связи с этим я повторил текст этой ошибки в этой зелёной вставке, чтобы увеличить рейтинг страницы в поисковых системах
Если менеджер процессов не установлен, или ему закрыт доступ в сеть, то вы увидите надпись «MPICH2 not installed or unable to query the host» в одном из полей левого столбца. В этом случае обратитесь за помощью к предыдущему разделу статьи.
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»).
Элементы управления окна имеют следующий смысл:
Поле ввода «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 2010 настройки каталогов перенесены в свойства проекта. Это означает, что вам вначале нужно создать проект, а затем уже настроить для него каталоги в окне Project → Properties
Прежде всего, нужно настроить Visual Studio, чтобы он находил заголовочные файлы и .lib-библиотеки MPICH. Для этого запустите Visual Studio и нажмите Tools → Options, в дереве слева выберите Projects and Solutions → VC++ Directories. Справа-вверху выберите Show directories for: Include files. Нажмите кнопочку с жёлтой папочкой и добавьте путь к .h-файлам:
После этого проделайте ту же процедуру для библиотек (Show directories for: Library files):
В комментариях подсказывают, что в список дополнительных библиотек для компоновки помимо mpi.lib следует включать cxx.lib. Поэтому если компоновщик (linker) ругается, попробуйте вместо mpi.lib в окне настроек, показанном на рисунке 16, написать mpi.lib cxx.lib (через пробел)
Теперь создайте консольный проект так, как показано на рисунках 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 — всё должно работать.
Если программа не работает, а до этого всё шло хорошо, то проверьте следующее:
Убедитесь, что программа работает на всех компьютерах при «обычном» запуске. Программы, откомпилированные в Visual Studio, требуют для своей работы «Visual C++ Redistributable Package» (различные его версии можно найти бесплатно на сайте Microsoft). На всех вычислительных узлах требуется установить пакет, соответствующий той версии Visual Studio, которая использовалась для компиляции программы.
Убедитесь, что вы не забыли разрешить программе доступ в сеть (рисунок 7).
Удаление 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.
















96 отзывов на запись «MPICH и Windows»
Автор: Kolomiec. Дата: 28-го мая 2009 г. Время: 17:45.
Отличная статья!
Единственное замечание, что, всё-таки, лучше создавать отдельного юзера (например mpi) с пользовательскими правами, а не отдавать администраторский аккаунт.
Автор: Vanya. Дата: 28-го мая 2009 г. Время: 22:10.
Как в MPICH2 указывать размер буфера для функции MPI_Bsend()?
Автор: Антон. Дата: 28-го мая 2009 г. Время: 22:33.
Указать размер буфера нельзя: эта функция использует всё возможное пространство имеющегося буфера (если есть), иначе завершается с ошибкой.
Однако, можно присоединить один дополнительный пользовательский буфер примерно так:
// его к MPI в качестве дополнительного буфера:
MPI_Buffer_attach(malloc(1000000), 1000000);
//
//Здесь используем Bsend, и вообще,
// здесь может быть вся программа.
//
char *buff;
int size;
//Возвращает указатель на присоединённый ранее буфер и размер
// этого буфера. Кроме того, отсоединяет буфер от MPI:
MPI_Buffer_detach(&buff, &size);
free(buff); //Удаляем буфер
Автор: Sannis. Дата: 28-го мая 2009 г. Время: 23:45.
Отличная статья. Мне многие задавали этот вопрос, теперь есть на что сослаться в таком случае
Традиционный вопрос: в чём рисовали иллюстрации?
Автор: Антон. Дата: 29-го мая 2009 г. Время: 10:55.
Спасибо за отзыв.
Иллюстрация тут одна: первая. Её рисовал в векторном графическом редакторе Adobe Flash. Ничего хорошего про эту программу, как про редактор, сказать не могу. Но там есть собственный язык программирования, и можно использовать объектно-ориентированный подход при рисовании (основной объект и его экземпляры с разными свойствами) — это подкупает. Остальное — скриншоты. Их я обрабатывал в Adobe Photoshop: делал белый фон, и выбрасывал пустые области из окон; реальные окна Windows шире.
Я уже понял, что статью нужно перерабатывать:
C:\Windows\System32\drivers\etc\hosts— это может избавить от многих проблем.Автор: Артем. Дата: 17-го июня 2009 г. Время: 17:02.
Оч. Хорошая статья. оч. помогла!!! Большое спасибо!!!
Автор: Дмитрий. Дата: 28-го июня 2009 г. Время: 16:20.
Прекрасная статья. Для меня оказалась очень своевременной. Всё получилось. Спасибо!!!
Автор: Омар. Дата: 8-го июля 2009 г. Время: 23:38.
Да, замечательная статья. Уяснила мне многое.
Автор: Zafar. Дата: 10-го сентября 2009 г. Время: 23:20.
Большое Спасибо!
Да статья очень хорошая. Сидел думал как же установить вот и проблема решилась. Многое узнал и очень своевременно.
Автор: Михаил. Дата: 19-го сентября 2009 г. Время: 15:09.
Присоединяюсь к перечисленным благодарностям! СПАСИБО!
Единственное, хочу узнать, как включить и отключить менеджер процессов в Windows Vista.
А то перечисленные действия относятся к Win XP…
Автор: Антон. Дата: 21-го сентября 2009 г. Время: 23:17.
И вам спасибо за отзыв.
Все перечисленные действия (и иллюстрации) относятся к Windows Vista. В тех случаях, когда в Windows XP и Vista ситуация отличается, я оговаривал это особо.
Если вы не видите пункта «Администрирование» в «Панели управления», то следует включить «Классический вид» в колонке слева.
Автор: Мария. Дата: 26-го октября 2009 г. Время: 14:33.
Делаю всё, как написано в статье, но в самом конце установки выдается сообщение об ошибке
Может, какие-то настройки компьютера неправильные?
Автор: Антон. Дата: 26-го октября 2009 г. Время: 19:41.
Какая у вас версия Windows?
Попробуйте установить все обновления для Windows, и убедитесь, что инсталлятор запущен от имени администратора. Если это не помогло, то посмотреть детальную информацию о том, что пошло не так во время инсталляции .msi-файла, можно следующим образом:
cd(см. рисунки 2, 3).msiexec /i ИМЯ_ВАШЕГО_ФАЙЛА.msi /l*vx logfile.log. При этом все действия, выполняемые во время установки, будут записываться вlogfile.log.logfile.log. Возможно, это поможет понять причину ошибки.Автор: Ty-160. Дата: 30-го октября 2009 г. Время: 10:20.
Спасибо!
Помогло. Под Линуксом до этого работал, необходимо было под Винду настроить, первый запрос в Гугл — и вы. Самому даже ничего делать не нужно.
Автор: Ty-160. Дата: 30-го октября 2009 г. Время: 10:43.
А проблемы есть: один и тот же код прекрасно компилится под Линем (использую команду mpicc) и ни в какую не пережёвывается компилятором в Visual studio 2008.
Автор: Антон. Дата: 30-го октября 2009 г. Время: 12:17.
Такое бывает. Все компиляторы в той или иной степени несовместимы со стандартами.
Можете привести фрагмент кода, который вызывает затруднения у компилятора VS 2008?
Автор: Максим. Дата: 7-го декабря 2009 г. Время: 11:33.
Спасибо!
Очень полезно было почитать. Но у меня, к сожалению, не получилось запустить программу для тестирования. Указан параметр -localonly и вот что пишет mpiexec:
Не подскажете, в чем может быть дело?
Автор: Антон. Дата: 7-го декабря 2009 г. Время: 12:55.
Какая операционная система? Windows XP?
Все ли обновления у вас на неё установлены?
Автор: Сергей. Дата: 7-го декабря 2009 г. Время: 14:07.
Спасибо большое за статью. По настройке MPICH на русском ничего лучше не нашел. Все очень хорошо расписано.
Автор: Александр. Дата: 23-го декабря 2009 г. Время: 01:20.
Присоединяюсь к общим благодарностям. Но у меня есть некоторая проблема. Я подключаю библиотеки как описано в статье запускаю прогу компилится И в результате получаю вот что:
1>.\parallel.cpp(26) : error C3861: ‘MPI_Init’: identifier not found
1>.\parallel.cpp(28) : error C2065: ‘MPI_COMM_WORLD’ : undeclared identifier
1>.\parallel.cpp(28) : error C3861: ‘MPI_Comm_size’: identifier not found
1>.\parallel.cpp(29) : error C2065: ‘MPI_COMM_WORLD’ : undeclared identifier
1>.\parallel.cpp(29) : error C3861: ‘MPI_Comm_rank’: identifier not found
1>.\parallel.cpp(41) : error C3861: ‘MPI_Wtime’: identifier not found
1>.\parallel.cpp(55) : error C3861: ‘MPI_Wtime’: identifier not found
1>.\parallel.cpp(59) : error C2065: ‘MPI_DOUBLE’ : undeclared identifier
1>.\parallel.cpp(59) : error C2065: ‘MPI_SUM’ : undeclared identifier
1>.\parallel.cpp(59) : error C2065: ‘MPI_COMM_WORLD’ : undeclared identifier
1>.\parallel.cpp(59) : error C3861: ‘MPI_Reduce’: identifier not found
1>.\parallel.cpp(76) : error C3861: ‘MPI_Finalize’: identifier not found
Не подскажете в чём дело? Прогу писал на Visual C++ 2008
Автор: Антон. Дата: 23-го декабря 2009 г. Время: 13:02.
А вы не забыли подключить заголовочный файл
mpi.h?В соседней статье можно найти заведомо рабочий пример. Попробуйте откомпилировать и запустить сначала его.
Автор: Alex. Дата: 23-го января 2010 г. Время: 18:40.
Спасибо за всё!
Всё делаю по статье запускаю файл smpd.exe, появляеться командная строка и через несколько секунд исчезает и ничего не запускает!!!
В чём может быть проблема?
Автор: Антон. Дата: 25-го октября 2011 г. Время: 23:43.
smpd.exe не следует запускать самостоятельно. Это — служба. Она должна работать (рисунок 6), и ей должен быть разрешён доступ в сеть (рисунок 7).
Автор: Иван. Дата: 31-го января 2010 г. Время: 20:25.
Статья очень правильная и нужная, спасибо!
Используя «run in a separate window» можно многократно вызывать MPI-программы, не закрывая Wmpiexec. (Информация, конечно, окажется только в консоли…)
Автор: Антон. Дата: 23-го февраля 2010 г. Время: 18:54.
Спасибо за статью огромное. А как насчёт отладки MPI программ в Visual Studio?
Автор: Тимур. Дата: 28-го февраля 2010 г. Время: 14:10.
при отладке выдает ошибку
Ошибка 1 general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;. .\Debug\Paral.exe.intermediate.manifest Paral
в чем дело?
Спасибо
Автор: Skyrim. Дата: 22-го мая 2010 г. Время: 15:05.
Делал все по статье но в настройках всеравно пишет ошибку:
Имя_хоста:MPICH2 not installed or unable to query the host
кто разбирается в этом помогите плз
E-mail MrSkyrim@gmail.com
ICQ 436 005 534 Skyrim
Автор: Илья. Дата: 15-го июня 2010 г. Время: 11:11.
всё работает замечательно, спасибо. не забывайте запускать консоль и установку от имени администратора, иначе вылезет Имя_хо ста:MPICH2 not installed or unable to query the host.
Автору огромное спасибо
Автор: Олег. Дата: 5-го июля 2010 г. Время: 22:53.
Я студент кафедры прикладной математики и программирования. Ваша статья мне очень помогла при настройке MPI. Материал изложен предельно просто и доступно. Спасибо большое за проделанную работу. С уважением, Олег!
Автор: KLaus. Дата: 9-го июля 2010 г. Время: 10:10.
При запуске тестовой программы, которая считает число 3,14……, все норм!!!
А вот при запуске LS-DYNA971 загрузается лишь тот PC, IP адрес которого стоит первым в поле HOSTS: у других PC в локальной сети появляются (если смотреть через диспетчер задач) процессы запущенные этой програмой, но они ни сколько не загружают их CPU во время расчета.
З.Ы. Что делать…….?
Автор: Начала MPI « Android и прочее IT. Дата: 15-го июля 2010 г. Время: 18:30.
[...] mpich поставить и настроить довольно хорошо расписано здесь, от себя хочу добавить, что настраивать ТОЧНО по шагам, [...]
Автор: Денис. Дата: 2-го октября 2010 г. Время: 11:39.
Супер! Спасибо автору за пошаговую инструкцию!
Автор: G. Дата: 31-го октября 2010 г. Время: 16:03.
Все работает в соотвествии со статьей, спасибо.
А подскажет ли кто-нибудь — возможно запустить с помощбю MPICH не консольное (MFC-шное) приложение? Когда я пытаюсь сделать это, в диспетчере задач появляется процесс этого приложения, но само оно не появляется…
Автор: Антон. Дата: 31-го октября 2010 г. Время: 22:29.
Приложения запускаются от имени службы «MPICH 2 Process Manager». Службы имеют отдельный рабочий стол, куда выводятся их окна.
Чтобы разрешить службе выводить окна на ваш рабочий стол, включите галочку «Разрешить взаимодействие с рабочим столом» в свойствах службы «MPICH 2 Process Manager» (Панель управления → Администрирование → Службы).
Автор: Андрей. Дата: 4-го ноября 2010 г. Время: 02:57.
Огромное «Спасибо». Очень помогли с семестралкой!
Автор: Мария. Дата: 19-го ноября 2010 г. Время: 19:35.
Спасибо!
Это самая хорошая статья!
Автор: murad.88. Дата: 26-го ноября 2010 г. Время: 02:34.
Спасибо большое отличная статья )), но есть пару вопросов.
1) А настройки MPICH в Linux сильно отличаются от Windows?
2) Не получается отлаживать программы в MVS 2005, в режиме Local Windows Debugger работает, а вот в MPI Cluster Debugger нет!
Делаю все как , а он ругается на: «mpiexec» не является внутренней или внешней командой …
Запускаю на одном обычном ПК с 2-х ядерным процессором, Win7 x86.
Автор: Epos. Дата: 26-го ноября 2010 г. Время: 18:55.
Доброго времени суток! При запуске cpi.exe MPICH отработал как в мануале написано — идеально прирост производительности примерно 28%. НО при попытке распараллелить другой расчетный модуль (fds5_mpi.exe) выдает ошибку:
Process 1 of 1 is running on boss-epos
Process 0 of 1 is running on boss-epos
Mesh 1 is assigned to Process 0
Mesh 2 is assigned to Process 1
Fire Dynamics Simulator
Compilation Date : Fri, 29 Oct 2010
Version: 5.5.3; MPI Enabled; OpenMP Disabled
SVN Revision No. : 7031
Job TITLE : Test BURN_AWAY feature, SVN $Revision: 5563 $
Job ID string : box_burn_away
Fatal error in PMPI_Gatherv: Internal MPI error!, error stack:
PMPI_Gatherv(386)…..: MPI_Gatherv failed(sbuf=003C7D20, scount=1, MPI_DOUBLE_PRECISION, rbuf=003C7D20, rcnts=003C6008, displs=003C6088, MPI_DOUBLE_PRECISION, root=0, MPI_COMM_WORLD) failed
MPIR_Gatherv_impl(199):
MPIR_Gatherv(103)…..:
MPIR_Localcopy(349)…: memcpy arguments alias each other, dst=003C7D20 src=003C7D20 len=8
job aborted:
rank: node: exit code[: error message]
0: BOSS-EPOS: 1: process 0 exited without calling finalize
1: BOSS-EPOS: 123
Подскажите в чем может быть проблема?
Автор: Антон. Дата: 26-го ноября 2010 г. Время: 21:17.
MPI тут не виноват, это ошибка в программе.
Проблема в том, что нулевой процесс, вызывающий MPI_Gatherv (и указывающий себя в качестве получателя), использует один и тот же буфер для отправки и приёма (указатели sbuf и rbuf имеют одно и то же значение). В стандарте MPI 1.3 (будем предполагать, что именно эту версию стандарта вы используете) чёрным по белому написано:
Так что буферы должны быть разными.
Автор: Epos. Дата: 27-го ноября 2010 г. Время: 04:15.
Спасибо, Антон! Офигел от Вашей оперативности. Да, Вы правы — у меня 1.3 стояла. Поставил сейчас 1.3.1.
Подскажите: Старые версии MPICH2 допускали использовать один и тот же буфер?
Поможет ли установка MPIEXEC_STDOUTBUF в LINE или BLOCK? (действую уже методом научного тыка)
Автор: Сергей. Дата: 27-го ноября 2010 г. Время: 21:51.
спасибо, спасибо, спасибо! =)
Автор: Дмитрий. Дата: 23-го декабря 2010 г. Время: 00:48.
Возможно ли «собрать» гетерогенный кластер с помощью mpich2? Несколько демонов smpd, запущенных на linux(ubuntu/debian) и несколько — на windows xp? Заранее спасибо за ответ.
Автор: Антон. Дата: 23-го декабря 2010 г. Время: 11:35.
Попробуйте, не заработает ли виндузовский MPICH из-под WINE на машинах с Linux. Если так, то задача решена.
Если вариант с WINE не работает, то вам придётся решить несколько проблем. Прежде всего, потребуется скомпилировать вашу MPI-программу для указанных ОС. Затем нужно убедиться, что операционные системы имеют одинаковую «битность»: 32 или 64 бита. MPICH2 не умеет конвертировать типы данных при передаче между 64-битными машинами и 32-битными (MPICH1 умеет, но это снижает быстродействие). Если битность разная, то нужно настроить компиляторы на 64-битных системах так, чтобы они выдавали 32-битный код, и скомпилировать вашу программу и MPICH2 в 32-битном варианте.
Автор: Дмитрий. Дата: 24-го декабря 2010 г. Время: 21:25.
Да. Статья очень полезна для начинающих. Как начинающий еще хочу спросить, возможно ли контролировать загрузку каждого из узлов, исполняющих приложение? она ведь неодинакова? и вообще что понимать под загрузкой. Наверное процессорное время, тогда каждый узел должен сообщать о времени, затраченном на реальную работу между блокировками. Прошу совета по своим мыслям….
Автор: need help. Дата: 30-го декабря 2010 г. Время: 00:50.
hi
unfortunately i do not know russian language and i really need help for this error:
«MPICH2 not installed or unable to query the host»
i am using just one pc with a «Quad core i7 950 intel» cpu and i do not need a network.
but this error really diappointed me.
i would be really thankful if you help me in english language.
with best rigards,
mohsen
Автор: Антон. Дата: 30-го декабря 2010 г. Время: 15:56.
No problem.
If you do not need network, you can easy get round this problem by using «-localonly» switch in mpiexec or wmpiexec. See figure 13.
Автор: Алексей Жук. Дата: 9-го февраля 2011 г. Время: 09:57.
Здравствуйте, Антон Александрович. Это пишет вам студент 3 курса факультета прикладной математики и информатики. Я читал вашу статью о настройке MPICH в Windows, настраивал согласно указаниям, но несмотря на это программа запускается только на одном компьютере (когда в списке hosts wpmiconfig.exe один компьютер), а когда в списке hosts 2 компьютера (один из которых виртуальная машина, как я понимаю слово localhost писать не надо, когда указываются имена, а не IP-адреса, просто через пробел имена машин) программа wmpiexеc.exe выдает следующую ошибку
launch failed: CreateProcess(«C:\Documents and Settings\vlad\Мои документы\Visual Studio 2008\Projects\send\Debug\send.exe») on ‘microsof-cfa8f2′ failed, error 14001 — Приложение не было запущено, поскольку оно некорректно настроено. Повторная установка приложения может решить данную проблему.
Проверял и с помощью wmpiconfig.exe, вроде бы ошибок не выдает, когда нажимаю Get Settings.
Автор: Антон. Дата: 26-го октября 2011 г. Время: 00:05.
На виртуальной машине нужно поставить Visual Studio или хотя бы Visual Studio Redistributable Package, соответствующий той версии Visual Studio, которой вы компилировали программу.
Автор: Алексей Жук. Дата: 9-го февраля 2011 г. Время: 10:32.
Здравстуйте, Антон Александрович.
Я скачал и установил vcredist_x86.exe (Microsoft Visual C++ 2008 Redistributable Package, у меня 32-х битная версия Windows), но программа по прежнему не запускается. Я забыл правда сказать, что программа «C:\Program Files\MPICH2\examples\cpi.exe» запускается на двух hosts и происходило это до установки допольнительных библиотек (vcredist_x86.exe) и с теми же настройками MPICH(отсюда я предположил, что дело в настройках Visual Studio 2008). Но Visual Studio я настараивал по инструцкии (создал пустой консольный проект, добавил файл кода на C++, зашел в Tools/Options, там прописал пути C:\Program Files\MPICH2\include, C:\Program Files\MPICH2\lib, зашел в имя проекта properties, там в Configuration properties -> C/C++ -> General установил значение параметра Дополнительные каталоги включения (Additional Include Directories): «C:\Program Files\MPICH2\include», затем в (Configuration properties -> Linker -> General). (Additional Library Directories): установил значение параметра Дополнительные каталоги библиотек «C:\Program Files\MPICH2\lib», раскрыл вкладку Настройки конфигурации -> Компоновщик -> Ввод (Configuration properties -> Linker -> Input) установил значение параметра Дополнительные зависимости (Additional Dependencies): mpi.lib) (ну думаю настройка Visual Studio сделана верно). Отсюда вывод (наверно, хотя может быть с прогой все нормально), что дело в программе. (на двух hosts с 2мя процессами выскакивает ошибка launch failed: CreateProcess(C:\newsend\Debug\newsend.exe) on ‘microsof-cfa8f2′ failed, error 14001 — Приложение не было запущено, поскольку оно некорректно настроено. Повторная установка приложения может решить данную проблему.) Хотя возможно дело и в настройке Visual Studio, так как создав проект с правильным файлом icpi.c (из папки C:\Program Files\MPICH2\examples) и настроив его, появлялась всё та же ошибка.
Также у меня вопрос должен ли быть установлен Visual Studio 2008 на вирт. машине?
Автор: Vlad. Дата: 22-го февраля 2011 г. Время: 23:47.
Здравствуйте.
У меня проблема с MPICH2, и гугл, увы, не предлагает мне решений. Уже 2ой день вожусь.
У меня две winxp машины.
MPICH установился нормально, юзернеймы созданы и пр.
mpiexec -validate [-host второй_хост] даёт SUCCESS на обеих машинах
smpd -status [второй хост] тоже всем доволен для обеих машин.
«mpiexec -hosts 2 локалхост локалхост cpi.exe» работает прекрасно, заргужает оба ядра.
«mpiexec -hosts 2 второйхост второйхост cpi.exe» работает не хуже, и тоже загружает оба ядра _на второй машине_. Т.е. я с перовой машины запускаю вычесления на второй.
«mpiexec -localonly «, естественно, тоже даёт ожидаемый результат.
Проблема возникает только в том случае, когда я хочу вычесления производить сразу _на обеих машинах_, т.е.
«mpiexec -hosts 2 локалхост второйхост cpi.exe» — тут меня просто спрашивают сколько интервалов я желаю для вычесления Пи и далее всё подвисает. Обе машины загружены на 0%.
Не могу понять в чём дело. Ведь раз я с одной машины могу запускать процессы как на локальном процессоре так и на втором компе, значит с файрволлами/сетью нет проблем и аккаунты тоже все правильны. Однако самого главного я не могу делать — задействовать в вычеслениях одновременно обе машины.
Подскажите, в чём может быть дело.
Автор: Антон. Дата: 23-го февраля 2011 г. Время: 16:53.
Подобные симптомы возникают, когда что-то мешает программам осуществлять обмен по сети. Попробуйте добавить cpi.exe в список исключений брэндмауэра на обеих машинах. Если у вас установлен антивирус Касперского, то, вероятно, его придётся деинсталлировать.
Автор: Vlad. Дата: 26-го февраля 2011 г. Время: 01:53.
Спасибо за ответ.
Брендмауэры я, естественно, пробовал отключать — не помогло. Антивирусов на этих машинах нет.
Странно то, что я могу с одной машины запустить вычисления на второй машине и получить обратно ответ на первую (т.е. mpiexec и сам cpi.exe запускаются на разных машинах!), значит обмен данных всё-таки происходит, но только если одновременно не более одной машины занимаются вычислениями
Проще говоря: два процесса на одной (любой!) машине — OK (и не важно на какой именно я запустил mpiexec); по одному (или по два) процесса на каждой машине — зависает)
Автор: Дмитрий. Дата: 4-го марта 2011 г. Время: 15:48.
Есть вероятность того, что пользователя необходимо добавить в группу Remote Desktop Users на обоих компьютерах.
Автор: РОналдо. Дата: 30-го июня 2011 г. Время: 23:13.
Где-то читал, что вычисление числа пи является чисто последовательным процессом, т.е. для вычисления следующего числа нужно значение предыдущего, и поэтому невозможно распараллелить такой алгоритм.
Автор: Денис. Дата: 20-го марта 2011 г. Время: 18:14.
Здравствуйте, Антон Александрович. При запуске в VS2008 вылетают ошибки:
1>Linking…
1>main.obj : error LNK2019: unresolved external symbol _MPI_Finalize@0 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Recv@28 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Get_count@12 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Probe@16 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Send@24 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Comm_size@8 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Comm_rank@8 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Init@8 referenced in function _main
1>D:\Users\Денис\Documents\Visual Studio 2008\Projects\1\Debug\1.exe : fatal error LNK1120: 8 unresolved externals
Вы не знаете с чем могут быть связаны?
Автор: Антон. Дата: 21-го марта 2011 г. Время: 02:43.
Вы не включили
mpi.libв список файлов для компоновщика. Смотрите рисунки 15 и 16.Автор: Денис. Дата: 21-го марта 2011 г. Время: 19:08.
Нет, файлы со всех рисунков у меня подключены и вылетают эти ошибки.
Автор: Иван. Дата: 31-го марта 2011 г. Время: 17:17.
Та же проблема, что и у Дениса. mpi.lib подключен.
Автор: Ольга. Дата: 28-го апреля 2011 г. Время: 12:04.
Если вдруг у кого-то та же проблема, что у Дениса и Ивана, напишу тут ответ. Помимо mpi.lib в зависимости надо добавить cxx.lib (через проблел, то есть у вас должно быть там «mpi.lib cxx.lib»). В целом мануал прекрасный, большое спасибо автору, я предлагаю Вам эту маленькую поправку добавить в тело мануала…
Автор: Антон. Дата: 6-го ноября 2011 г. Время: 12:52.
Спасибо, добавил cxx.lib.
Автор: Алексей. Дата: 19-го мая 2011 г. Время: 14:18.
Спасибо за статью. Она мне очень помогла разобраться с настройкой MPICH.
Пожалуйста, помогите мне. Хочется отлаживать программы в Visual Studio. Пытался по этой статье http://winhpc.ru/?id=63 сделать возможность отладки программы в Visual Studio. В итоге программа компилируется. Работает, если запустить отдельно в wmpiexec.exe, но если запустить в Visual Studio появляется сообщение: «Buffer provided too short for path: 4096 provided, 0 needed»
И повторяет столько раз, сколько было задано процессов строки «launch failed: Create Process («….»)» код ошибки 87. Что не так?
Автор: biaks. Дата: 31-го августа 2011 г. Время: 17:44.
Отличная статья!
Опишу несколько граблей, на которые наступил устанавливая MPICH:
1. На сайте MPICH2 http://www.mcs.anl.gov/research/projects/mpich2/ нигде нет работающей ссылки на версию для windows. Нашел последнюю версию для windows в MPICH2 -> downloads -> Previous Versions -> 1.4 (на момент написания комментария)
2. На сайте выкладываются две версии для windows Win IA32 и Win X86_64, одна для x32 и другая для x64. У меня x64 операционная система, но запускать необходимо программы, скомпилированные под x86. Путем проб и ошибок разобрался, что в моем случае необходимо ставить Win IA32.
3. Не сразу прочитал про запуск установочного пакета от имени Администратора. Из-за этого не сразу понял, почему в списке служб нету MPICH
Автор: Kosty. Дата: 13-го октября 2011 г. Время: 02:01.
Доброго времени суток!
Статейка наиотличнейшая!
Только я словил какой-то непонятный трабл. Все делал, как написано. Не могу задать хосты через прогу wmpiconf для той машины на которой буду запускать программы. Ошибка выглядит так (nout — это хост):
[-1:2640]...ERROR:Unable to write the smpd registry value 'hosts:locahost jeanna', error 1168Элемент не найден.
unable to set hosts option.
Ставил все от имени администратора. На обоих ноутах стоит 7ка максимальная 32хбитная версия mpich2 1.4.1p1-win-ia32.msi. Связи по клику на кнопку ScanHost настройки получает машина т.е., как в статье написано, загорается зеленьким оба хоста. Задача считается только на одной машине я так поимаю, даже если запускать без ключа -localonly. Плиз, подскажите, что сделать? Оч. нужно чтоб это заработало.
Заранее спасибо всем кто откликнулся!
Автор: Виктор. Дата: 23-го октября 2011 г. Время: 13:23.
Приветствую, Антон.
Я попытался запустить тот пример работающей программы, о которой вы упоминали в предыдущих сообщениях и при компиляции Visual Studio C++ 6 были выданы ошибки:
———————Configuration: 1 — Win32 Debug———————
Compiling…
1.cpp
c:\program files\mpich2\include\mpicxx.h(1509) : error C2555: ‘MPI::Nullcomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:\program files\mpich2\include\mpicxx.h(1142) : see declaration of ‘Comm’
c:\program files\mpich2\include\mpicxx.h(1575) : error C2555: ‘MPI::Intercomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:\program files\mpich2\include\mpicxx.h(1142) : see declaration of ‘Comm’
c:\program files\mpich2\include\mpicxx.h(1609) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1516) : see declaration of ‘Intercomm’
c:\program files\mpich2\include\mpicxx.h(1609) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(1643) : error C2259:
‘Intercomm’ : cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1516) : see declaration of ‘Intercomm’
c:\program files\mpich2\include\mpicxx.h(1643) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(1649) : error C2259:
‘Intercomm’ : cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1516) : see declaration of ‘Intercomm’
c:\program files\mpich2\include\mpicxx.h(1649) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(1666) : error C2555: ‘MPI::Intracomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:\program files\mpich2\include\mpicxx.h(1142) : see declaration of ‘Comm’
c:\program files\mpich2\include\mpicxx.h(1674) : error C2259:
‘Intercomm’ : cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1516) : see declaration of ‘Intercomm’
c:\program files\mpich2\include\mpicxx.h(1674) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(1682) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1516) : see declaration of ‘Intercomm’
c:\program files\mpich2\include\mpicxx.h(1682) :
warning C4259: ‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ :
pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(1690) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1516) : see declaration of ‘Intercomm’
c:\program files\mpich2\include\mpicxx.h(1690) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(1705) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1516) : see declaration of ‘Intercomm’
c:\program files\mpich2\include\mpicxx.h(1705) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(2336) : error C2555: ‘MPI::Graphcomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:\program files\mpich2\include\mpicxx.h(1142) : see declaration of ‘Comm’
c:\program files\mpich2\include\mpicxx.h(2336) : error C2555: ‘MPI::Graphcomm::Clone’ :
overriding virtual function differs from ‘MPI::Intracomm::Clone’ only by return type or calling convention
c:\program files\mpich2\include\mpicxx.h(1584) : see declaration of ‘Intracomm’
c:\program files\mpich2\include\mpicxx.h(2451) : error C2555: ‘MPI::Cartcomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:\program files\mpich2\include\mpicxx.h(1142) : see declaration of ‘Comm’
c:\program files\mpich2\include\mpicxx.h(2451) : error C2555: ‘MPI::Cartcomm::Clone’ :
overriding virtual function differs from ‘MPI::Intracomm::Clone’ only by return type or calling convention
c:\program files\mpich2\include\mpicxx.h(1584) : see declaration of ‘Intracomm’
c:\program files\mpich2\include\mpicxx.h(2554) : error C2259: ‘Intracomm’ :
cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1584) : see declaration of ‘Intracomm’
c:\program files\mpich2\include\mpicxx.h(2554) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
c:\program files\mpich2\include\mpicxx.h(2556) : error C2259: ‘Nullcomm’ :
cannot instantiate abstract class due to following members:
c:\program files\mpich2\include\mpicxx.h(1478) : see declaration of ‘Nullcomm’
c:\program files\mpich2\include\mpicxx.h(2556) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:\program files\mpich2\include\mpicxx.h(1462) : see declaration of ‘Clone’
Error executing xicl6.exe.
1.obj — 16 error(s), 9 warning(s)
Ошибок не было, когда компилировалась тестовая программа вычисления числа пи.
В чем может быть проблема?
Заранее благодарен.
Автор: Антон. Дата: 25-го октября 2011 г. Время: 22:29.
Возможно, старый компилятор.
Автор: freeone. Дата: 24-го октября 2011 г. Время: 13:10.
Огромное спасибо! для начинающих вроде меня лучше не придумаешь. все понятно после первого прочтения.
Автор: Роман. Дата: 6-го ноября 2011 г. Время: 08:23.
Здравствуйте. Тут вылетает:
После указаний всех путей.
Причём тут вообще math?!
Прога простейшая:
#include
using namespace std;
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if( rank )
{
char buf[] = "Hello!";
MPI_Send(buf, sizeof(buf), MPI_CHAR, 0, 0, MPI_COMM_WORLD);
} else {
cout << "Process 0 started" << endl;
for(int i(1); i<size; ++i)
{
MPI_Status s;
MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
int count;
MPI_Get_count(&s, MPI_CHAR, &count);
char *buf = new char[count];
MPI_Recv(buf, count, MPI_CHAR,
MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
cout << "Message from process " << s.MPI_SOURCE << ": "
<< buf << endl;
delete[] buf;
}
cout << "Done." << endl;
}
MPI_Finalize();
return 0;
}
Автор: Антон. Дата: 6-го ноября 2011 г. Время: 12:50.
К сожалению, сожрались имена заголовочных файлов в #include.
Могу посоветовать вбить простейшую программу, не относящуюся к MPI, и откомпилировать. Возможно, неверно сделан проект в Visual Studio.
Автор: иван. Дата: 14-го ноября 2011 г. Время: 18:19.
здравстуйте, у меня проблема. mpi прога работает при запуске на wmpiexec, создается выходной файл процессом ранга 0. Когда запускаю в командной строке свою прогу
C:\Program Files\MPICH2\bin>mpiexec -n 10 путь к файлу
она некоторое время выполняет мою прогу(достаточно короткое), (на команду mpiexec не ругается), на экране появляется
C:\Program Files\MPICH2\bin>
но выходной файл не создается.
Автор: Новиков Илья. Дата: 17-го ноября 2011 г. Время: 20:23.
«Консольный ввод-вывод всех процессов MPI-программы перенаправляется на консоль, на которой запущена Mpirun»
А есть ли возможность осуществить консольный ввод-вывод на тех машинах, на которых выполняются процессы?
Например, если в локальной сети есть 2 машины
1) PC001 (192.168.10.17)
2) PC002 (192.168.10.18)
Запуск MPI-программы (элементарное приветствие: cout << "Hello from process" << ProcRank; ) осуществляется с PC001.
Так вот есть ли способ на строить MPICH так, чтобы на PC001 появлялась консоль с текстом "Hello from process 0", а на PC002 "Hello from process 1"?
То есть, чтобы процессы на вычислительных узлах работали не в фоновом режиме.
Автор: Антон. Дата: 19-го ноября 2011 г. Время: 21:33.
Консоль у вашего приложения забирается, а вот какие-нибудь другие окна оно сможет выводить после дополнительной настройки. Смотрите этот комментарий.
Автор: Михаил. Дата: 1-го декабря 2011 г. Время: 19:51.
Доброго времени суток!
В сети имеются две машины с разными техн. характеристиками и ОС (Windows 7 (x64) и Windows XP (x86)). Установил MPICH2 (x86) на обе машины — ведущей определил ту, на которой Windows 7 (x64). Всё настроил, как описано в Вашей статье (точнее я так думаю, что всё). Запускал тестовое приложение cpi.exe в wmpiexec.exe — что-то считалось. Решил посмотреть код этой незамысловатой тестовой программки, раскомментил там тот кусок, который выводит №, кол-во процессов и имя машины. Перекомпилировал. Запустил снова в wmpiexec.exe. Результаты разочаровали. Оказывается всё это время cpi.exe запускалась только на ведущей машине (выводятся №, кол-во процессов и имя только одной ведущей машины). Собственно, где тут собака зарыта?
P.S. Обе машины прекрасно видят друг друга, файерволы отключены, cpi.exe и все необходимые программы из \MPICH2\bin добавлены в исключения в брандмауэрах обеих машин.
P.P.S. Погуглил, есть подозрения из-за x64, но не уверен, поскольку тестовая программа компилировалась под x86.
Автор: Антон. Дата: 1-го декабря 2011 г. Время: 19:58.
Очень странно. Вы указали в поле hosts программы wmpiexec через пробел ip-адреса или имена ваших двух компьютеров? Выбрали 2 процесса? (Ключ «-localonly» не нужен для запуска на нескольких комьютерах.)
Автор: Михаил. Дата: 1-го декабря 2011 г. Время: 21:16.
Хм, про поле hosts я и позабыл. Теперь уже другая проблема (после указания ip-адресов):
Process 0 of 2 is on 192.168.1.100
Enter the number of intervals: (0 quits) 10000
Fatal error in PMPI_Bcast: Other MPI error, error stack:
PMPI_Bcast(1478)…………………: MPI_Bcast(buf=0018FE48, count=1, MPI_INT, root=0, MPI_COMM_WORLD) failed
MPIR_Bcast_impl(1321)…………….:
MPIR_Bcast_intra(1155)……………:
MPIR_Bcast_binomial(189)………….:
MPIC_Send(66)……………………:
MPIC_Wait(540)…………………..:
MPIDI_CH3I_Progress(402)………….:
MPID_nem_mpich2_blocking_recv(905)…:
MPID_nem_newtcp_module_poll(37)……:
MPID_nem_newtcp_module_connpoll(2656):
gen_cnting_fail_handler(1739)……..: connect failed — Превышен таймаут семафора. (errno 121)
job aborted:
rank: node: exit code[: error message]
0: 192.168.1.100: 1: process 0 exited without calling finalize
1: 192.168.1.102: 123
P.S. Ключ -localonly не указывался при запуске. 192.168.1.100 — основная машина, 192.168.1.102 — вторая машина. Command: mpiexec.exe -hosts 2 192.168.1.100 192.168.1.102 -noprompt «\\192.168.1.100\MPI\cpi.exe». Количество процессов: 2.
Автор: Михаил. Дата: 1-го декабря 2011 г. Время: 21:34.
Забыл упомянуть, что на основной машине стоит MS Visual Studio 2010 (C++), на второй — установлены пакеты MS Visual C++ 2005, 2008, 2010 Redistributable — если это играет какую-либо роль.
Автор: Антон. Дата: 1-го декабря 2011 г. Время: 21:28.
Подобная ситуация возникала у меня, если программа \\192.168.1.100\MPI\cpi.exe не была добавлена в список исключений брэндмауэра на обоих компьютерах. Нужно добавить её прямо в таком виде, с сетевым путём. Кроме того, бывает, что мешают антивирусы и файрволлы.
Автор: Михаил. Дата: 1-го декабря 2011 г. Время: 22:21.
Спасибо за оперативность!
Проблема, видимо, в перекомпилированной программе, буду разбираться…
Теперь исходный пример запускается без ошибок (правда, я не знаю, как проверить, действительно ли cpi.exe отработала на двух машинах). А вот её перекомпилированный вариант, где открыты те две строчки (весь остальной код даже не трогал), чтобы выводились сообщения с № процесса и именем машины, уже не работает на двух машинах (однако работает на одной, если запускать с -localonly).
Автор: Михаил. Дата: 2-го декабря 2011 г. Время: 17:54.
Разобрался с проблемой. Напишу, что сделал, вдруг кому-то поможет.
В общем, на второй машине просто не хватало пары библиотек (конкретно у меня это были msvcr100d.dll и msvcrp100d.dll). Обнаружил это, запустив программу в обычном режиме на второй машине. Выскочило сообщение о нехватки указанных библиотек. Простая переустановка пакета MS Visual C++ 2010 Redistributable, скачанная с сайта Microsoft, не помогла. Поэтому просто скопировал эти библиотеки с основной машины на вторую (в ..\System32). Всё заработало!
P.S. Теперь, прежде чем запускать любую программу через wmpiexec.exe, я сначала проверяю, работает ли она в обычном режиме на неосновной машине
Автор: Егор. Дата: 5-го декабря 2011 г. Время: 04:38.
произвожу запуск со следующей строкой:
«C:\Program Files\MPICH2\bin\mpiexec.exe» -wdir \\10.10.214.146\mpi\ -log -hosts 2 10.10.214.146 10.10.214.223 -noprompt \\10.10.214.146\mpi\cpi.exe
оболочка делает ничего(если указывать более 1 процесса).
при запуске с одним процессом всё нормально считает
программа работает и на 1 и на 2 машине. антивирусы отключены, в разрешених брэндмауэра прописано. и там и там vs2010 c последними редистрибутивами. 1 машина xp sp3, вторая win7 ultimate.
также при попытке установить значение параметра hosts вылазиет ошибка:
[-1:8032]…ERROR:Unable to write the smpd registry value ‘hosts:10.10.214.146 10.10.214.223′, error 1168
Элемент не найден.
очень надо срочно разобраться в работе mpi, сессия на носу(
Заранее спасибо за помощ.
есть идеи?
Автор: Егор. Дата: 5-го декабря 2011 г. Время: 04:45.
ещё 1 симптом при попытке изменить значение параметра logfile обнаружилось следующее исключение:
unable to set logfile option.
[-1:2952]…ERROR:Unable to open the HKEY_LOCAL_MACHINE\SOFTWARE\MPICH\SMPD registry key, error 5
Отказано в доступе.
оболочку от админа запустить невозможно.:(
Автор: Антон. Дата: 5-го декабря 2011 г. Время: 12:11.
К сожалению, я никогда не встречался с подобными ошибками.
Насколько я понимаю, записью в реестр занимается сама служба SMPD. Эта ошибка на машине с Windows 7? Убедитесь, что там вы запускали установку из учётной записи администратора. Возможно, имеет смысл проверить существование ветки реестра «HKEY_LOCAL_MACHINE \ SOFTWARE \ MPICH», и посмотреть разрешения на запись туда для пользователя с именем «Local Service».
Автор: Егор. Дата: 5-го декабря 2011 г. Время: 18:00.
такие проблемы и на машине с win7 и на машине с xp. ветка существует устанавливалось от админа.
кстати нашёл способ запустить оболочки от админа, но тоже не помогло.разрешение на запись сейчас проверю, отпишусь
Автор: Илья. Дата: 15-го декабря 2011 г. Время: 23:17.
Здравстуйте!
Подскажите в чем дело, есть написанная программа MPI, она исправно работает на 1 и на 4х процессах, если поставить 2 или любое другое число выдает вот такой текст:
Unexpectedd number of parallel processes. We suppose to make calculations using 4 of them. Actual value=2unable to read the cmd header on the pmi context, Error = -1
.
Error posting readv, Удаленный хост принудительно разорвал существующее подключение.(10054)
unable to read the cmd header on the pmi context, Error = -1
.
Error posting readv, Удаленный хост принудительно разорвал существующее подключение.(10054)
job aborted:
rank: node: exit code[: error message]
0: ASUSF3JP: -1: process 0 exited without calling finalize
1: ASUSF3JP: 123
Автор: Антон. Дата: 16-го декабря 2011 г. Время: 13:48.
Это сама программа не хочет считать ни при каком количестве процессов, кроме четырёх. Обратитесь к разработчику программы.
Автор: Сашка. Дата: 18-го декабря 2011 г. Время: 13:58.
Добрый день. Спасибо вам за статью.
Столкнулся с такой проблемой. Установил mpich2, подключил хедеры и библиотеки, указал пути к хедерам и библиотекам компилятору (Dev-c++, VS2010).
[Linker error] undefined reference to `MPI_Init’
и такая ошибка на все вызовы(функции) библиотеки.
Единственное на что думаю, в mpich2 нет никаких dll. Хотя в инструкции говорится кинуть их в system32.
Не подскажите в чем проблема. Заранее спасибо.
Автор: Антон. Дата: 18-го декабря 2011 г. Время: 19:09.
При чём здесь dll, если у вас программа даже не компилируется?
Скорее всего вы не прилинковали к программе статические библиотеки (.lib). Смотрите рисунок 16 и текст над ним.
Автор: Сашка. Дата: 18-го декабря 2011 г. Время: 22:52.
Я просто уже не знаю что я мог не так зделать.. Подключил библиотеки как на рисунке 16. mpi.lib и cxx.lib.
При моем исходнике ничего не изменилось ( при присоединении библиотеки cxx.lib )
А при исходнике от mpich новая ошибка
error LNK1112: тип компьютера модуля «x64″ противоречит типу целевого компьютера «X86″ …\cxx.lib(initcxx.obj)»
Автор: Сашка. Дата: 18-го декабря 2011 г. Время: 23:36.
Разобрался =) Установил ia32 версию и все нормально =)
Спасибо вам.
Автор: Стас. Дата: 23-го февраля 2012 г. Время: 22:35.
Здравствуйте.Все работает замечательно кроме одного,вылезает всего лишь одно консольное окно вместо 4(4процесса).Пользуюсь Visual2010,cluster debugging,отлаживать каждый процесс получается,но вот нкакого вывода в окно,либо несколько консольных окон с ошибками process 0 exited without calling finalize.
Не знаю связано ли это с этим,но в окне Modules для mpich2mpi.dll не находит таблицы pdb,а также пишет
mpich2nemesis.dll C:\Windows\SysWOW64\mpich2nemesis.dll N/A N/A Binary was not built with debug information. 7 02.09.2011 0:54 00610000-007D0000* [4016] Test1.exe: Native
Автор: Илья. Дата: 9-го марта 2012 г. Время: 20:17.
Огромное спасибо за статью очень сильно помогла
Автор: Виталя. Дата: 23-го марта 2012 г. Время: 06:17.
У меня все работает. Спасибо автору. Вот только как создавать программы в mpi я так и не понял.
Я смотрю на эту прогу простейшую и понять вообще не могу че к чему! посмотрел на других сайтах нихрена не понятно… может подсажете ссылочку русско язычную где новичку все понятно.
#include
#include
using namespace std;
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if( rank )
{
char buf[] = «Hello!»;
MPI_Send(buf, sizeof(buf), MPI_CHAR, 0, 0, MPI_COMM_WORLD);
} else {
cout << "Process 0 started" << endl;
for(int i(1); i<size; ++i)
{
MPI_Status s;
MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
int count;
MPI_Get_count(&s, MPI_CHAR, &count);
char *buf = new char[count];
MPI_Recv(buf, count, MPI_CHAR,
MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
cout << "Message from process " << s.MPI_SOURCE << ": "
<< buf << endl;
delete[] buf;
}
cout << "Done." << endl;
}
MPI_Finalize();
return 0;
}
- хоть бы комментарии в программе написали что к чему и зачем.
Автор: ehsan. Дата: 29-го марта 2012 г. Время: 16:30.
hi.
Your article was excellent.
Wmpiconfig me when I entered. This gives error:
NASIRI :MPICH2 not installed or unable to query the host
The two computers are networked together.
what?
Please help me!
Автор: Артем. Дата: 18-го апреля 2012 г. Время: 22:40.
Здравствуйте. У меня вот такая проблема при использовании Bcast
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
rank 3 in job 57 tesla1_43635 caused collective abort of all ranks
exit status of rank 3: return code 1
Автор: Вова. Дата: 22-го апреля 2012 г. Время: 18:18.
Здравствуйте!Вот почитал вашу статью,все сделал …но вылетает ошибка Credentials for Админ rejected connecting to Вова-ПК
Aborting: Unable to connect to Вова-ПК. сижу второй день!Помогите!Все на одном компе!Спасибо!
Автор: Антон. Дата: 23-го апреля 2012 г. Время: 10:19.
Написано «необходимо, чтобы имена компьютеров содержали только латинские буквы и цифры». Кроме того, имя «Админ» ему тоже может не понравиться.
Автор: Иван. Дата: 14-го мая 2012 г. Время: 19:03.
Замечательная статья! Все просто и понятно. Спасибо большое!