Данный документ описывает процесс получения и инсталляции mpich [11], переносимой реализации стандарта передачи сообщений MPI. Детали использования реализации mpich приведены в отдельном руководстве пользователя mpich [8]. В mpich версии 1.2.2 в основном исправлены ошибки и увеличена возможность переносимости, особенно для кластеров на базе LINUX.
Новое в 1.2.2:
Новые возможности, включенные в 1.2.1:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
или (при использовании GNU tar)
tar zxvf mpich.tar.gz
или (если gzip недоступен)
zcat mpich.tar.Z | tar xovf -
./configure -prefix=/usr/local/mpich-1.2.2
cd examples/basic
make cpi
../../mpirun -np 4 cpi
С этого момента вы запустили на вашей системе MPI-программу.
make nupshot
make install
или
bin/mpiinstallчтобы установить mpich в каталог, указанный опцией -prefix скрипта configure. Инсталляция будет содержать каталоги `include', `lib', `bin', `sbin', `www' и `man', а также небольшой каталог `examples'. Если Вы хотите удалить инсталляцию, Вы можете запустить скрипт
sbin/mpiuninstall
gunzip -c mpich.tar.gz | tar xovf -или, при использовании GNU tar (например, в Linux)
tar zxvf mpich.tar.gzЕсли у Вас не установлен gunzip, но имеется uncompress, то Вы можете вместо этого взять файл
zcat mpich.tar.Z | tar xovf -или
uncompress mpich.tar.Z
tar xvf mpich.tarЭто приведет к созданию каталога mpich, содержашего в различных подкаталогах весь дистрибутив, включая исходный код, документацию (включая данное руководство), страницы man, среду mpich, описанную в разд. 13 и примеры программ. В частности, вы должны увидеть следующие файлы и каталоги:
Конфигурация mpich выполняется скриптом configure, находящимся в каталоге верхнего уровня. Этот скрипт автоматически создается с помощью программы GNU autoconf (Версия 1.6, но не версия 2) из файла configure.in, но Вам не обязательно необходим autoconf.
Скрипт configure сам по себе достаточно документирован. Если Вы наберете
configure -usageВы получите полный список аргументов и их значений; они также указаны в приложении А. Наиболее важными опциями являются
Кроме того, configure использует переменные окружения, такие,как MAKE, CC, F77, CFLAGS,
FFLAGS.
Обычно рекомендуется использовать configure с наименьшим числом аргументов. Если вы опустите все аргументы, configure обычно догадается о правильной архитектуре (arch), если Вы не работаете в кросс-платформенной среде, и также выберет подходящее устройство (device). Если подходящим механизмом коммуникации является TCP/IP, по умолчанию выбирается устройство TCP (ch_p4).
mpich реализован с использованием спецификации абстрактного
устройства (ADI), описанной в [6]. В некоторых системах это абстрактное
устройство сконфигурировано, чтобы стать стандартной коммуникационной
подсистемой машины. Это можно выполнить, задав аргумент with-device для
configure. Для остальных систем, общее коммуникационное устройство
создается с использованием p4 [1,2] и используется как реализация
ADI. В этих случаях используйте в качестве устройства ch_p4.
ARCH_TYPE определяет, для какого типа процессора производится компиляция. Возможные значения были приведены выше. Для IBM SP тип архитектуры rs6000. Если опция не задана, configure попытается определить тип.
Некоторые машины имеют множество коммуникационных опций, определяемых аргументом comm. В настоящее время устройство ch_p4 использует их. Выбирая -comm=shared, Вы создаете версию устройства ch_p4, которое допускает использование разделяемой памяти и IP/TCP. Это используется в частности на кластерах симметричных мультипроцессорных систем.
Новое устройство globus2 [3,5], основанное на системе исполнения Globus [4], также доступно. Как и устройство ch_p4, устройство Globus способно использовать коммуникацию многими методами на некоторых платформах. Например, IBM SP могут общаться через IBM MPI или TCP в зависимости от узлов, которые связываются. За деталями обращайтесь на http://www.globus.org.
Некоторые примерные вызовы configure показаны ниже. В большинстве случаев создаются также и библиотеки mpe (см. разд. 9 для подробной информации об инсталляции mpe и руководство пользователя mpich для подробной информации об использовании возможностей mpe). Для сборки без библиотек mpe используйте опцию -without-mpe. В большинстве случаев детальные вызовы, указанные ниже, являются вызовами по умолчанию, т.е. тем, что Вы получите, вызвав configure без аргументов. Поэтому наилучшей общей стратегией будет вначале попробовать
./configureЕсли это не сработает, см. информацию ниже о средах, подобных Вашей.
К сожалению, это не всегда работает. Например, в некоторых случаях, различным компиляторам могут потребоваться различные библиотеки при компоновке программ. Некоторые компиляторы требуют дополнительных опций для поддержки ANSI/ISO C. В частности, поддержка длинных типов данных, таких как long long или long double может зависеть от библиотек времени выполнения, которые специфичны для каждого компилятора. Чтобы обработать все такие случаи для C и C++, Вы можете создать файл с именем `mpicc-<compilename>.conf', т.е. `mpicc-gcc.conf' или `mpicc-pgcc.conf', который содержит все определения, необходимые команде mpicc. mpiCC использует `mpiCC-<compilename>.conf'. Сейчас эти файлы нужно создавать вручную, начав с файла `mpichlib.conf', который создается скриптом configure для mpich в каталоге `mpich/util'. Простейшим способом создания файлов является использование configure:
setenv CC cc
configureprefix=/usr/local/mpich-1.2.2
make
make install
cp util/mpichlib.conf /usr/local/mpich-1.2.2/etc/mpicc-cc.conf
setenv CC gcc
configureprefix=/usr/local/mpich-1.2.2
make
cp util/mpichlib.conf /usr/local/mpich-1.2.2/etc/mpicc-gcc.conf
В этом примере использованы значения по умолчанию для sysconfdir, $prefix/etc.
Например, если mpich использует в качестве компилятора cc, а
пользователь ожидает вместо
этого gcc, команда MPICH_CC=gcc
mpicc ...или
mpicc -config=gcc ...вызовет загрузку `mpich-gcc.conf' для mpicc и использование подходящих определений.
mpich может запускаться на гетерогенных сетях рабочих станций различных типов. Для простого набора рабочих станций можно использовать команду mpirun; более сложные наборы гетерогенных машин требуют наличия файла `procgroup' для p4 (для устройства ch_p4) или файла `RSL' (для устройства globus2). Формат файла `procgroup' описан в разделе 6.1. Формат файла `RSL' можно найти в документации Globus по адресу http://www.globus.org под названием Resource Specification Language (Язык Описания Ресурсов).
Устройство ch_p4 используется наиболее просто, когда все рабочие станции разделяют общую файловую систему. Исполняемые файлы MPI должны размещаться на разделяемой файловой системе. Однако, такая система не необходима. С использованием файла `procgroup' размещение исполняемых файлов на каждой рабочей станции может быть определено в различных местах.
Некоторые системы SGI поддерживают как 32-х, так
и 64-хбитные указатели (адреса). Mpich использует архитектуру IRIX
для ссылок на 32-хбитные системы и IRIX64 - для ссылки на 64-хбитные.
Mpich пытается определить подходящую архитектуру автоматически, но Вы
можете ускорить выбор, определив архитектуру опцией with-arch=IRIX,
with-arch=IRIX32,
with-arch=IRIXN32,
with-arch=IRIX64. Последние три из них соответствуют опциям компилятора
SGI -32, -n32, -64. Убедитесь в том, что флаги к компилятору и
компоновщику присоединяются через переменные окружения следующим образом
setenv CC ``cc -64''
setenv FC ``f77 -64''
configure ...
configurewith-device=ch_p4
with-arch=freebsd
configureИспользуйте -arch=IRIX, чтобы установить 32-хбитные указатели и -arch=IRIX64, чтобы установить 64-хбитные указатели.with-device=ch_p4 -comm=shared
configureMpich уже требует компилятора, поддерживающего прототипы ANSI C. Старый компилятор C, привязанный к SunOS, не поддерживает прототипы. Если Вам необходим компилятор с поддержкой прототипов, мы рекомендуем использовать GNU C компилятор (gcc).with-device=ch_p4
with-arch=sun4
configurewith-device=ch_p4
with-arch=solaris
configurewith-device=ch_p4
with-arch=alpha
setenv FC frt
configurewith-arch=UXPM
with-device=ch_p4
![]()
-fflags=``-Oe, -Uep -Eml -Aabe''![]()
-mpe -mpedbg -prefix=/usr/local/mpi![]()
-tcldir=/usr/local -tkdir=/usr/local -wish=/usr/local/bin/wish
configurewith-device=ch_p4 -arch=hpux -mpe -no_mpegraphics
setenv GLOBUS_INSTALL_PATH /usr/local/globus
При конфигурации устройства globus2 вы можете установить одну из ``изюминок'' Globus (т.е. mpi, debug или nodebug, threads, 32- или 64-bit и т.д.). Чтобы увидеть полный список всех ``изюминок'' Globus (поскольку не все из них могут быть установлены на Вашей машине), используйте команду
$GLOBUS_INSTALL_PATH/bin/globus-development-path -help
``Изюминки'', доступные Вам (установленные на Вашей машине) перечисляются
как каталоги в
$GLOBUS_INSTALL_PATH/development. Например, инсталяция
Globus на рабочей станцией под управлением Solaris может иметь следующие
``изюминки'' :
sparc-sun-solaris2.7_nothreads_standard_debug/
sparc-sun-solaris2.7_pthreads_standard_debug/
sparc-sun-solaris2.7_solaristhreads_standard_debug/
Существует два метода конфигурации устройства globus2. Каждый метод выбирает один из каталогов ``изюминок'' Globus в $GLOBUS_INSTALL_PATH/development. Первый метод состоит в точном указании каталога ``изюминки'', например:
configurewith-device=globus2:
![]()
-dir=$GLOBUS_INSTALL_PATH/development/sparc-sun-solaris 2.7_nothreads_standard_debug
Вы можете также указать каталог ``изюминки''неявно
configurewith-device=globus2:-flavor=nothreads,debug
Наконец, вы
можете просто выбрать ``изюминки'' по умолчанию (полученные от
$GLOBUS_INSTALL_PATH/bin/globus-development-path)
configure -device=globus2
Вы должны определить -mpi, чтобы разрешить поддерживаемые поставщиком MPI-взаимодействия для внутримашинных сообщений. Другими словами, при конфигурировании на машинах, которые предоставляют собственную реализацию стандарта MPI, Вы должны определить -mpi для лучшей производительности. Неупоминание -mpi отразится на внутримашинных связях TCP.
Выбор -debug может быть полезным в процессе отладки, но замедляет производительность. -nodebug нужно использовать для отлаженного кода продукта.
В общем, необходимо использовать -nothreads (устройство Globus2 не
многопоточное). Вам необходимо выбирать поддержку потоков, только если Вы
планируете связать Ваше MPI-приложение с другими модулями, которые потребуют
версию Globus с поддержкой потоков (т.е. Вы напишете библиотеку, использующую
Nexus, который требует наличие обработчиков потоков). Вы не должны выбирать
поточную версию Globus лишь потому, что Ваше MPI-приложение многопоточное.
Когда Globus создан, автоматически генерируется специальный Make-файл для mpich. Configure использует этот файл для конфигурирования устройства
globus2. Этот специальный Make-файл содержит практически всю информацию,
необходимую configure для mpich (включая пути к каталогам,
специальные библиотеки, имена компиляторов и компоновщиков C и Фортрана, и
т.д.).
configurewith-device=ch_p4
with-arch=CRAY
configurewith-device=ch_shmem
with-arch=hpux
configureЗаметьте, что это требует поддержки для библиотеки передачи сообщений IBM MPL. Некоторые из последних версий программного обеспечения IBM SP могут не включать поддержку этой устаревшей библиотеки. В этом случае, Вы должны использовать реализацию IBM MPI.with-device=ch_mpl
with-arch=rs6000
configureConfigure попытается определить количество доступных процессоров; Вы можете переопределить значение установкой переменной окружения PROCESSOR_COUNT перед запуском configure. С другой стороны, Вы можете отредактировать файл `mpich/mpid/ch_shmem/shdef.h' для регулирования максимального числа процессоров и памяти, которая используется для передачи сообщений через разделяемую память. Если Вам нужно сгенерировать определенную версию, соответствующую опциямwith-device=ch_shmem
./configure -arch=IRIX32Если необходимо определить специальные опции компилятора, они могут быть установлены переменными окружения CC и FC:
./configure -arch=IRIXN32
./configure -arch=IRIX64
setenv CC ``cc -32''
setenv FC ``f77 -32''
configurewith-arch=IRIX32
![]()
-opt=``-O2''![]()
with-device=ch_shmem
setenv CC ``cc -n32 -mips4 -r10000''
setenv FC ``f77 -n32 -mips4 -r10000''
configurewith-arch=IRIXN32
![]()
-opt=``-O2''![]()
with-device=ch_shmem
(Уровень оптимизации необязателен; -O2 работает для некоторых пользователей. Будьте внимательны к чересчур строгой оптимизации, особенно в коде `mpid/ch_shmem').
setenv CC ``cc -64 -mips4 -r10000''
setenv FC ``f77 -64 -mips4 -r10000''
configurewith-arch=IRIX64
![]()
-opt=``-O2''![]()
with-device=ch_shmem
См. комментарии для рабочих станций SGI для различных 32-х- и 64-хбитных опций.
configureчтобы получить свободное от блокировок устройство с разделяемой памятью, описанное в [9]. Заметьте, что это устройство требует специального ассемблерного кода или опций компилятора, чтобы работать надежно.with-device=ch_lfshmem
-opt=-O -disable-devdebugв строку configure, и перезапустите configure и make. Вы можете включить много оптимизационных опций, заключив их в кавычки:
-opt=``-O -qarch=pwr2''Будьте внимательны при использовании высокого уровня оптимизации компилятором при компиляции устройств ch_shmem, ch_lfshmem или ch_p4 (с поддержкой разделяемой памяти).
setenv FC f90будет использовать f90 для программ Фортрана 77 и Фортрана 90. Во многих системах это будет работать. Если есть причины для наличия двух отдельных сборок для Фортрана 77 и Фортрана 90, то выполните следующие команды (когда mpich установлен в каталог /usr/local):
setenv F90 f90
configure
setenv FC f77Эта последовательность команд создаст и инсталлирует две версии mpich. Альтернативой является наличие единой версии mpich, как описано в разд. 4.9.6.
configuredisable-f90 -prefix=/usr/local/mpich-1.2/f77-nof90
make
make install
setenv FC f90
setenv F90 f90
configure -prefix=/usr/local/mpich-1.2/f90
make
make install
Два различных модуля могут быть доступны через опцию -nochoice и -choice для mpif90 (скрипт для компиляции и компоновки программ MPI). Версия choice поддерживает ограниченное число типов данных (числовые скаляры и числовые одно- и двумерные массивы). Это экспериментальная возможность; пожалуйста, присылайте почту на mpi-bugs@mcs.anl.gov при любых проблемах.
Причина наличия двух версий модуля MPI состоит в трудности
создания полностью корректного модуля, включающего все функции с аргументами
``по выбору''. На многих системах размер модуля Фортран 90 для работы с
процедурами, имеющими аргументы ``по выбору'' больше, чем вся версия С
библиотеки MPI. Если Вас не интересует модуль MPI для Фортрана 90, или Вы хотите
иметь небольшую версию mpich, Вы можете отключить создание модуля MPI для
Фортрана 90 опцией disable- f90modules.
В дополнение к этому, Вам необходимо использовать -N90, если Вы используете символьные данные, поскольку интерфейс Фортрана для mpich предполагает соглашение о вызовах, которым пользуются практически все системы Unix Fortran (отдельно обсуждается Cray UNICOS). Если Вы создаете разделяемые библиотеки, Вам также необходимо установить переменную окружения FC_SHARED_OPT в none.
Ранние версии компилятора Absoft не могли обрабатывать множественные опции -I. Если у Вас с этим возникают проблемы, обратитесь за дополнением к Absoft.
Первым этапом является конфигурация mpich с опцией with-flibname.
Например, если один из компиляторов - это g77, используйте
setenv F77 g77 ./configureПосле того, как Вы создали, протестировали и инсталлировали эту версию mpich, Вы можете добавить поддержку дополнительных компиляторов Фортрана следующим образом:with-flibname=mpich-g77 ... other options ...
setenv F77 pgf77
./configurewith-mpichconfig
with-flibname=mpich-pgf77
make
make install-alt
Следующая информация поясняет настройку отдельной машины, чтобы на ней можно
было использовать rsh для запуска процессов. Для установки rsh Вам
необходимо убедиться в наличии файла
`/etc/hosts.equiv', который
содержит как минимум
localhost your_machine_nameгде your_machine_name - это имя Вашей машины, определенное в `/etc/hosts'.
Вы должны также убедиться в том, что файлы `/etc/hosts.allow' и `/etc/hosts.deny' пустые.
При использовании машины, не подключенной к сети, например, ноутбука при путешествиях, Вам может понадобиться сменить установки сети. В некоторых версиях Linux можно использовать netcfg и установить Hostname в localhost и Domain в localdomain.
Ниже приведен ряд шагов, которые необходимо осуществить, чтобы ssh корректно работала с mpich.
ssh-keygenЭто действие приведет к генерации пары личного и общего ключа. Личный ключ будет сохранен в
/.ssh/identityа общий ключ будет сохранен в
/.ssh/identity.pub
cp /.ssh/identity.pub /.ssh/authorized_keysЕсли машина, на которой Вы соединяетесь, не разделяет общую файловую систему, то
chmod go-rwx /.ssh/authorized_keysЭтот шаг позволит Вам не вводить пароль каждый раз при запуске команды безопасного shell.
ssh-agent $SHELL
ssh-add
configure -rsh=ssh
./configurewith-device=ch_p4:-listenersig=SIGUSR2
make
configureНекоторые процедуры MPI реализованы в терминах других процедур MPI. Например, MPI_Bcast в mpich реализован с использованием MPI_Send. Когда используются слабые обозначения, даже PMPI-версии процедур реализуются с использованием MPI (не PMPI) версий. Если Вы хотите использовать процедуры PMPI только с использованием процедур PMPI, используйтеdisable-weak-symbols ...
makeЭта команда очистит все каталоги от предыдущих объектных файлов (любых), скомпилирует обе версии исходного кода - с профилингом и без него, включая Romio и интерфейс C++, создаст все необходимые библиотеки, и скомпонует программы примеров на С и Фортране для тестирования, чтобы проверить, все ли работает. Если что-либо не сработало, см. разд. 14 для информации об этой проблеме. Если ее нет, следуйте указаниям разд. 14.1 для отправки сообщения об ошибке. Чтобы просто проверить ошибки, можно использовать
make >& make.log &Можно также создать специальные (не по умолчанию) цели. См. Make-файл о том, какие они могут быть.
После запуска make размер дистрибутива будет около 45 мегабайт (в
зависимости от конкретной машины, на которой происходит компиляция и выбранных
опций), прежде чем будут созданы любые примеры или дополнительная тестовая
библиотека. Make-файлы для различных тестовых подкаталогов уже созданы, но сами
примеры программ должны быть собраны "вручную".
./configureЗдесь предполагается, что mpich будет установлен в `/usr/local/mpich-1.2.2' и файлы `make.log' будут проверены, чтобы убедиться в успешном создании библиотек. Версии mpich до 1.2.0 помещают определяемые устройством и архитектурой файлы в каталоги, назначенные mpich. В версии 1.2.0 mpich следует (почти) GNU-подходу к инсталляции. В частности, Вы можете переопределить выбор для большинства каталогов стандартными опциями configure. Например, для смены места для библиотек на `/usr/local/lib', добавьте опцию -libdir=/usr/local/lib.with-device=ch_p4
![]()
-prefix=/usr/local/mpich-1.2.2/solaris/ch_p4
make >& make.log
make install
./configurewith-device=ch_shmem
![]()
-prefix=/usr/local/mpich-1.2.2/solaris/ch_shmem
make >& make.log
make install
set path= ($path /home/me/mpich/bin)Более детально об mpirun изложено в разд. 13.2. Если Вам требуется запуск в сети рабочих станций, Вам необходим файл machines.xxxx в каталоге mpich/util/machines - см .разд 6.1 о деталях. Системы, использующие различные типы автомонтирования файловых систем, требуют небольших изменений в этих программах - см. разд. 6.1.2.
Некоторые простые MPI-программы расположены в каталоге mpich/examples/basic и содержат программы на С и Фортране для оценки числа
. Перейдите в этот каталог и выполните (предполагая, что Вы добавили
каталог с mpirun в Ваш путь)
make cpiчтобы запустить версию С или
mpirun -np 4 cpi
make fpiчтобы запустить версию Фортран. Теперь Вы провели минимальное тестирование Вашей инсталляции mpich. Вы можете также пожелать проверить производительность MPI на Вашей системе. Вы можете провести грубую оценку, запустив программу systest, также находящуюся в каталоге examples/basic. Чтобы испытать ее, выполните
mpirun -np 4 fpi
make systestДля более точной оценки см. разд. 12.
mpirun -np 2 systest
mercuryИмена должнеы быть представлены в том же формате, что и вывод команды hostname. Например, если результат hostname для earth был earth.my.edu (и подобный для других имен), то файл machines должен быть:
venus
earth
mars
earth
mars
mercury.my.eduДля узлов с несколькими процессорами укажите их количество, дополнив имя двоеточием и количеством процессоров. Например, если mars в предыдущем примере имеет два процессора, то файл machines будет иметь вид
venus.my.edu
earth.my.edu
mars.my.edu
earth.my.edu
mars.my.edu
mercury
venus
earth
mars:2
earth
mars:2
Чтобы справиться с этой проблемой, configure позволяет Вам определить программу-фильтр, если Вы выполните ее с опцией -automountfix=PROGRAM, где PROGRAM - это фильтр, читающий путь к файлу из стандартного ввода, делающий необходимые изменения и записывающий результат в стандартный вывод. mpirun использует эту программу, чтобы найти необходимые ему файлы. По определению значением PROGRAM является
sed -e s@/tmp_mnt/@/@gОна использует команду sed, чтобы вырезать строку /tmp_mnt из имени файла. Простые скрипты sed, подобные этому могут быть достаточно длинны, до тех пор, пока они не включают в себя кавычки (простые или двойные) или используют % (это может пересекаться с командами shell в configure, выполняющими замену). Если Вам необходима более сложная обработка, используйте отдельный скрипт shell или программу.
В качестве другого примера некоторые системы генерируют пути в виде
/a/thishost/root/home/username/....которые будут правильными только на машине thishost, но тажке имеют пути в форме
/u/home/username/....которые верны везде. Для этого случая опция configure
-automountfix=`sed -e s@/a/./home@/u/home@g'даст уверенность, что mpirun получит верное имя файла.
rpcinfo -p mysun
sbin/chp4_servs -port=n -arch=$ARCHОн позволяет запускать сервер через удаленный shell (rsh, remsh или ssh); если Вы не можете использовать удаленный shell, Вам необходимо зарегестрироваться в каждой системе,на которой Вы хотите запустить безопасный сервер и делать это вручную. Команда для запуска индивидуального сервера с использованием порта 2345
serv_p4 -o -p 2345 &К примеру, если Вы выбрали порт 2345 и работаете в Solaris, Вы должны дать команду
sbin/chp4_servs -port=2345Сервер создает протокол своих действий в файле `Secure_Server.Log.xxxx' в текущем каталоге, где xxxx - идентификатор процесса, запустившего сервер (заметьте, что сервер может быть запущен как потомок этого начального процесса).with-arch=solaris
mpirun -np 4 -p4ssport 2345 cpiДругим способом информирования mpirun о безопасном сервере является использование переменных окружения MPI_USEP4SSPORT и MPI_P4SSPORT. В С shell Вы можете установить их так
setenv MPI_USEP4SSPORT yesЗначение MPI_P4SSPORT должно быть портом, на котором Вы запускаете безопасные серверы. Если эти переменные окружения установлены, никаких опций для mpirun больше не нужно.
setenv MPI_P4SSPORT 2345
ptfps -all -tn serv_p4 -and -o $LOGNAME -kill INTС другой стороны Вы можете войти в каждую систему и выполнить что-либо подобное
ps auxww | egrep ``$LOGNAME.*serv_p4''при использовании ps в стиле BSD, или
ps -flu $LOGNAME | egrep `serv_p4'при использовании ps в стиле System V. Cтиль System V работает, когда имя команды короткое; ps System V дает Вам только первые 80 символов имени команды, и если она начинается с длинного (хотя и верного) пути в каталог, имя команды может быть потеряно.
Альтернативный подход обсуждается в разд. 6.1.5.
Прежде чем использовать этот скрипт, Вам нужно отредактировать его; проверить, что в нем заданы верные значения для serv_p4, portnum и machinelist; Вам также может понадобиться установить первую строку на Вашу версию perl5.
Для проверки состояния Ваших серверов используйте
chkserv -port 2345Чтобы перезапустить любые серверы, которые остановились, используйте
chkserv -port 2345 -restartЭта команда не перезапускает серверы, которые уже работают; Вы можете использовать ее как задание cron на каждое утро, чтобы убедиться, что Ваши серверы работают. Заметьте, что она использует ту же самую команду удаленной shell, что и configure; если Вы не можете использовать команду удаленной shell для запуска процесса в удаленной системе, Вам необходимо рестартовать серверы вручную. В этом случае Вы можете использовать вывод от chkserv -port 2345, чтобы определить, какие серверы нужно рестартовать.
chkserv -port 2345 -killЭта команда соединяется со всеми работающими серверами и приказывает им завершиться. Она не использует rsh и может выполняться на любой системе.
Это программное обеспечение - экспериментальное. Если у Вас есть
комментарии или предложения, пожалуйста, присылайте их на mpi-bugs@mcs.anl.gov.
configureОсобенно важно определить каталог инсталляции аргументом prefix (если Вы не хотите использовать каталог инсталляции по умолчанию /usr/local), поскольку устройство ch_p4mpd должно быть установлено перед использованием.with-device=ch_p4mpd -prefix=<installdir> <other options>
Если Вы намерены запускать демонов MPD как root, Вы должны
также выполнять конфигурирование с enable-root. Тогда многие
пользователи могут использовать для запуска задач один и тот же набор демонов
MPD. После конфигурирования, как обычно
makeустановит mpich и исполняемые файлы MPD в каталог <installdir>/bin, который нужно добавить в Ваш путь.
make install
и находятся в каталоге <prefix-directory>/bin, который нужно добавить в Ваш путь. Набор демонов MPD можно запустить командойwith-device=ch_p4mpd -prefix=<prefix directory> <other options>
mpichboot <file> <num>где file - это имя файла, содержащего имена машин в Вашем кластере и num - это число демонов, которое Вы хотите запустить. Скрипт запуска использует rsh для запуска демонов, однако, это более удобный способ, чем запуск их другим путем. Первый демон может быть запущен командой mpd -t. Первый демон, запущенный таким способом, выводит номер порта, который он слушает для соединения с другими mpd. Каждый последующий mpd получает имя машины и номер порта для соединения. Скрипт mpichboot автоматизирует этот процесс. В любое время Вы можете увидеть, какие mpd запущены, если используете mpdtrace.
mpd идентифицируется по имени машины и порту. Для управления кольцом mpd используется ряд команд:
bin/cleanipcs
MPI_Barrier: Internal MPI error: No such file or directory
File locking messages
MPI_Barrier: Внутренняя ошибка MPI: Файл или каталог не найденЧтобы реконфигурировать NFS для корректной работы с MPI-IO, необходима следующая последовательность шагов (требуются права root):
Сообщения о блокировке файла
rpcinfo -p `hostname' | grep nfsк примеру, во втором столбце должна быть `3'
fire> rpcinfo -p fire | grep nfs
100003 3 udp 2049 nfs
root> grep epm1 /etc/fstabЕсли отсутствует опция `noac', добавьте ее и смонтируйте заново этот каталог на каждой машине, которая будет использована для разделения файлов MPI-IO.
gershwin:/epm1 /rmt/gershwin/epm1 nfs bg,intr,noac 0 0
root> umount /rmt/gershwin/epm1
root> mount /rmt/gershwin/epm1
root> grep gershwin /etc/mnttab
gershwin:/epm1 /rmt/gershwin/epm1 nfs
noac, acregmin=0, acregmax=0,acdirmin=0, acdirmax=0 0 0 899911504
make testingв каталоге mpich вызовет компиляцию, компоновку, выполнение этих программ и сравнение их результатов с ожидаемыми. Компоновка всех этих тестовых программ требует определенного места, так что Вы можете выполнить
make cleanв каталоге тестов после их завершения. Отдельные части MPI (каждый с каждым, коллективные обмены, топологии и т.д) можно тестировать отдельно, выполняя
make testingв отдельных подкаталогах examples/test.
Если у Вас возникли проблемы, сначала ознакомьтесь с руководством по исправлению
ошибок и списками известных проблем. Если Вам все еще нужна помощь, отошлите
детальную информацию на mpi-bugs@mcs.anl.gov.
make installСтраницы man копируются вместе с инсталляцией, так что Вы можете добавить
Существует возможность определить каталог, в который mpich будет установлен после создания, установив значение PREFIX при выполнении этапа инсталляции:
make install PREFIX=/usr/local/mpich-1.2.2Некоторые возможности, особенно возможность просмотра очередей сообщений mpich в TotalView, работают только, когда mpich сконфигурирован с установкой префикса на инсталляционный каталог.
Хорошим способом обращаться с различными реализациями mpich является установка их в каталоги, имена которых включают номер версии, и настройка связи из mpi в этот каталог. Например, если текущая версия 1.2.2, командами для инсталляции в `/usr/local' будут
make install PREFIX=/usr/local/mpi-1.2.2
rm /usr/local/mpi
ln -s /usr/local/mpi-1.2.2 /usr/local/mpi
Скрипт `bin/mpiinstall' предлагает больше контроля над процессом инсталляции mpich (на самом деле, make install просто запускает этот скрипт). Например, Вы можете снять защиту с файлов, инсталлируемых с опцией -mode=nnnn (для обычных файлов) и -xmode=nnnn (для исполняемых и каталогов). Вы можете определить каталог, в который будут помещены страницы man опцией -manpath=<path>. Опция -help показывает весь набор опций mpiinstall.
Инсталляция nupshot может иногда быть трудоемкой. Вы
можете использовать ключ -nonupshot в mpiinstall, чтобы не
устанавливать nupshot; с другой стороны, Вы можете использовать ключ
-cpnupshot для установки копии в `mpich/profiling/nupshot'. Обычно
mpiinstall содает новую версию nupshot, чтобы быть уверенным в том,
что все пути верны (nupshot должен найти файлы там, где он установлен).
Если Вам необходимо построить nupshot ``вручную'' для инсталляции, ключ
-cpnupshot позволяет Вам инсталлировать эту версию.
Вы можете протестировать инсталляцию, используя configure в каталоге `mpich/examples/test'. Например, если Вы установили mpich в `/usr/local/mpich' для архитектуры solaris и устройства ch_p4, выполните
cd examples/testКоды тестов в каталоге `mpich/examples/test' могут использоваться в любой реализации MPI, не только в mpich).
./configure -mpichpath=/usr/local/mpich-1.2.2/solaris/ch_p4/bin
make testing
-prefix=/usr/local/mpich-1.2.2/solaris/ch_p4 и
-prefix=/usr/local/mpich-1.2.2/solaris/ch_shmem.
Выполнив
./configureв каталоге верхнего уровня библиотеки mpe, можно увидеть список флагов и ключей. Специальные ключи реализации MPI:help
Если Вы хотите конфигурировать mpe для использования с реализацией MPI, не указанной здесь, Вы можете посмотреть, как `configure.in' в каталоге mpe определяет, какие компиляторы, библиотеки и т.д. используются для указанных выше реализациях MPI. Вы можете затем добавить раздел для Вашей собственной реализации MPI в `configure.in'. Убедитесь, что Вы выполнили
autoconfчтобы создать новый скрипт configure. (Скрипт configure для mpe создается с помощью autoconf 2.13 (исправленного)). Вам также необходимо добавить ключ для реализации MPI. Это достигается использованием макроса AC_ARG_WITH.
Другой опцией является использование общих ключей MPI, позволяющих Вам определить собственные каталоги include и lib для MPI.
Общие ключи реализации MPI:
- I/pkgs/MPI/include
-L$MPI_LIB_DIR -lfmpich -lpmpich -lmpich
Следующая информация не является полным списком, а некоторыми наиболее общими флагами:
Опции пользователя:
-mpe_opts=MPE_OPTSгде mpe_OPTS - один или несколько вариантов из разд. 9.1, а JUMP_OPTS - одна из опций раздела 10.2.1. Позволяется множественное использование -mpe_opts для определения некоторых опций mpe configure.
-jumpshot_opts=JUMP_OPTS
Пример 1: Конфигурирование mpich вместе с библиотекой mpe и jumpshot
В каталоге верхнего уровня mpich
./configure <mpich options>
make
Пример 2: Конфигурирование mpich вместе с tcldir и tkdir, заданных в качестве опций mpe для configure
В каталоге верхнего уровня mpich
./configure <mpich options>![]()
-mpe_opts=with-tcldir=<path of tcldir>
![]()
-mpe_opts=with-tkdir=<path of tkdir> make
Пример 3: Конфигурирование mpich, библиотеки mpe и jumpshot с определением каталога инсталляции
В каталоге верхнего уровня mpich
./configure <mpich options> -prefix=<install directory>
make
Это полезно, если Вы желаете установить mpich, библиотеку mpe и jumpshot в общедоступное место, чтобы другие пользователи могли ими пользоваться. Чтобы установить все три пакета в инсталляционный каталог, наберите
make installв каталоге верхнего уровня mpich.
Пример 4: Конфигурирование mpich вместе с библиотекой mpe, но без jumpshot
В каталоге верхнего уровня mpich
./configure <mpich options> -mpe_opts=configure для jumpshot вызывается через configure для mpe. Поэтому отключение конфигурирования jumpshot производится через опцию configure для mpe. См. разд. 10.2.2 об инструкциях по отдельной установке jumpshot.enable-jumpshot=no
make
Пример 5: Конфигурирование mpich без библиотеки mpe и jumpshot
В каталоге верхнего уровня mpich
./configure <mpich options> -nompeСледует отметить, что после того, как сконфигурируется mpich, существует возможность конфигурирования библиотеки mpe и jumpshot без реконфигурирования mpich. Или возможно, что потребуется реконфигурация mpich, но при этом не нужно переконфигурировать библиотеку mpe и jumpshot.
make
Пример 1: Конфигурирование mpe с SGI MPI и без jumpshot
В каталоге верхнего уровня mpe
./configureилиwith-sgi -libdir=<directory path of libdir>
./configureБез определенияwith-sgi64 -libdir=<directory path of libdir>
make
Пример 2: Конфигурирование mpe с IBM MPI и jumpshot
В каталоге верхнего уровня mpe
./configureБез определения -bindir=-DIR исполняемые файлы jupmshot будут находиться в `libdir/../bin'. Если требуется определение специального каталога для двоичных файлов, то выполняйте конфигурирование так:with-sp -libdir=<directory path of libdir>
![]()
with-jumpshot_home=<directory path of jumpshot>
make
В каталоге верхнего уровня mpe
./configurewith-sp -libdir=<directory path of libdir>
![]()
with-jumpshot_home=<directory path of jumpshot>
![]()
-bindir=<directory path of bindir>
make
Пример 3: Конфигурирование mpe с существующей реализацией mpich и jumpshot
В каталоге верхнего уровня mpe
./configureЕсли Ваша реализация mpich содержит подкаталог `mpich/jumpshot', нет необходимости выполнять конфигурирование с опциейwith-mpich=<directory path of mpich>
![]()
with-mpichdev=<library subdirectory for mpich>
make
Пример 4: Конфигурирование mpe с SGI MPI и с передачей опций configure для jumpshot В каталоге верхнего уровня mpe
./configurewith-sgi -libdir=<directory path of libdir>
![]()
with-jumpshot_home=<directory path of jumpshot>
![]()
with-jumpshot_opts=<jumpshot option>
make
В процессе сборки с каждой из указанных выше библиотек
будет скомпонована небольшая программа на С `cpi' (расположена в каталоге
`mpe/contrib/test'). В сообщениях вывода make будут присутствовать
строки, сообщающие о каждой успешной компоновке. Небольшая программа на Фортране
`fpi' в каталоге `mpe/contrib/test' будет скомпонована с библиотекой
регистрации через FLIB_PATH. Информация об успешной компоновке также
будет присутствовать в выводе make. Если тесты по компоновке будут успешно
завершены, то эти пути к библиотекам будут также использоваться для Ваших
программ.
Чтобы использовать upshot для просмотра log-файла, выполните
make cpilog mpirun -np 4 cpilog
upshot cpilog.log
jumpshotили
jumpshot <имя файла slog>
./configureв каталоге верхнего уровня `jumpshot', чтобы увидеть список флагов и ключей.help
Обязательные флаги и ключи:
Необязательные флаги и ключи configure:
Конфигурирование jumpshot как части конфигурирования mpich. В этой инсталляции jumpshot не требуются никакие флаги или ключи. Скрипты configure в каталогах mpich и mpe собирают необходимую информацию и передают их configure в каталоге jumpshot. Если configure в каталоге mpich не заданы никакие опции, jumpshot будет конфигурироваться со значениями по умолчанию. Пользователь может переопределить их, сконфигурировав mpich со следующими опциями:
-mpe_opts=MPE_OPTSгде JUMP_OPTS - один из вариантов в разд. 10.2.1 (использование нескольких опций jumpshot не допускается). См .разд. 9.1 о MPE_OPTS.
-jumpshot_opts=JUMP_OPTS
Пример 1: Конфигурирование mpich вместе с библиотекой mpe и jumpshot
В каталоге верхнего уровня mpich наберите
./configure <опции конфигурирования mpich>Пример 2: Конфигурирование mpich без библиотеки mpe, но с jumpshot
make
В настоящее время, если mpich конфигурируется без библиотеки mpe, jumpshot не будет сконфигурирован (поскольку configure для mpe вызывает configure для jumpshot). Ниже приведены шаги для конфигурирования mpich и jumpshot без библиотеки mpe.
В каталоге верхнего уровня mpich наберите
./configure <опции конфигурирования mpich> -nompe
make
В подкаталоге jumpshot выполните
configureПример 3: Конфигурирование mpich вместе с библиотекой mpe и каталогом java, заданным как опция к configure для jumpshot.with-bindir=<путь к каталогу mpich/bin>
![]()
with-jumpshot_home=<путь к каталогу jumpshot>
В каталоге верхнего уровня mpich наберите
./configure <опции конфигурирования mpich>Необходимо указать![]()
-jumpshot_opts=with-jumpshot_opts=
with-java=<путь к каталогу java>
make
Пример 4: Конфигурирование mpich вместе с библиотекой mpe и
переопределением опции
jumpshot_home в configure для jumpshot.
В каталоге верхнего уровня mpich наберите
./configure <опции конфигурирования mpich>![]()
-jumpshot_opts=with-jumpshot_opts=
with-jumpshot_home=DIR
make
Конфигурирование jumpshot как части конфигурирования mpe.
Пример 1: Конфигурирование библиотеки mpe вместе с jumpshot и mpich (уже сконфигурированным и установленным)
В каталоге верхнего уровня mpe наберите
./configurewith-mpich=<каталог верхнего уровня для mpich>
![]()
with-mpichdev=<подкаталог библиотеки mpich>
make
Пример 2: Конфигурирование библиотеки mpe вместе с jumpshot и SGI MPI
В каталоге верхнего уровня mpe наберите
./configurewith-sgi -libdir=<путь к каталогу libdir>
![]()
with-jumpshot_home=<путь к каталогу jumpshot>
make
Пример 3: Конфигурирование библиотеки mpe вместе с IBM MPI без jumpshot
В каталоге верхнего уровня mpe наберите
./configurewith-sp -libdir=<путь к каталогу libdir>
![]()
enable-jumpshot=no
make
Пример 4: Конфигурирование библиотеки mpe с заданным в качестве опции jumpshot каталогом java
В каталоге верхнего уровня mpe наберите
./configure <ключ реализации MPI>![]()
with-jumpshot_opts=
with-java=<путь к каталогу java>
make
Конфигурирование jumpshot самого по себе
Пример 1: Конфигурирование jumpshot
В каталоге верхнего уровня jumpshot наберите
./configure -bindir=<путь к каталогу двоичных файлов>![]()
with-jumpshot_home=<путь к каталогу jumpshot>
Пример 2: Конфигурирование jumpshot с полным отображением сообщений
В каталоге верхнего уровня jumpshot наберите
./configure -bindir=<путь к каталогу двоичных файлов>![]()
with-jumpshot_home=<путь к каталогу jumpshot>
![]()
enable-echo=yes
Файл log, создаваемый cpilog не очень интересен, поскольку cpi очень простая программа. Более интересные log-файлы можно найти в подкаталоге `profiling/upshot/logfiles' или подкаталоге `jumpshot/lib/logfiles'. Файл cpilog.c показывает, как настроить Ваш собственный код для создания log-файлов. Руководство пользователя [8] описывает, как связать код с версией mpich, которая создает log-файлы автоматически. Краткое описание программ каталога `examples/basic' содержится в файле README.
Создание jumpshot-3:
Перейдите в каталог `$(MPICH)/jumpshot-3', наберите в командной строке configure. Если configure возвращает сообщение об ошибке, о том, что не может обнаружить верной версии Java, либо Вы хотите сконфигурировать jumpshot под определенную версию Java, выполните
./configureзатем наберитеwith-java=/homes/chan/java/jdk117_v3
make
Перейдите в каталог `$(MPICH)/jumpshot-3/bin', чтобы убедиться, что исполняемые файлы jumpshot и slog_print здесь. slog_print -это скрипт для запуска SLOG Java API для вывода информации в log-файлах. jumpshot - это скрипт для запуска инструмента визуализации jumpshot-3 для просмотра slog-файлов.
Если у Вас возникли вопросы,
присылайте их на mpi-maint@mcs.anl.gov.
Чтобы создать новый каталог с сообщениями, скопируйте файл `mpich.En_US.msg' в файл
`mpich.mylanguage.msg' и переведите его
содержание. Значение `mylanguage' должно совпадать с одним из используемых
в Вашей системе; например, `mpich.De_DE.msg' для немецкого языка. Многие
системы помещают свои файлы NLS в каталог `/usr/lib/nls/msg'; Вы можете
также проверить значение переменной окружения NLSPATH Вашей системы.
Отметьте, что некоторые системы предлагают процедуры и программы для поддержки
NLS, но не используют их и не устанавливают начальное значение NLSPATH.
Пользователи emacs могут проверить информацию Emacs в разделе ``European Display''. Команды
M-x standard-display-europeanможно использовать для ввода большинства европейских языков. Вы можете также загрузить
M-x iso-accents-mode
По умолчанию mpich использует значение NLSPATH для поиска каталогов с сообщениями. Если это окончится неудачно, он пробует поиск в `MPINLSPATH'. Если и это дейтсвие завершится неудачно, он использует английскую версию, закодированную в составе библиотеки.
Каталоги не всегда устанавливаются именно в это место. Вместо этого, Вы
можете найти их в каталоге библиотеки для определенной архитектуры; например, в
`mpich/rs6000/lib'.
makeФайл out.gpl содержит необходимые команды gnuplot. Файл mppout.gpl будет содержать данные. Чтобы просмотреть данные в gnuplot, используйте:
mpirun -np 2 mpptest -gnuplot > out.gpl
gnuplot out.gplили используйте
load `out.gpl'из gnuplot. В зависимости от Вашей среды и версии gnuplot, Вам может понадобиться вначале запустить gnuplot и выполнить команду set terminal x11, прежде чем выполнить load 'out.gpl'.Вы можете использовать
gnuplotчтобы создать график в формате EPS, как на рис.1.
set term postscript eps
set output "foo.eps"
load 'out.gpl'
Программы mpptest и goptest имеют широкий спектр возможностей; опция -help выведет их список. Например, mpptest может автоматически определить длину сообщений, чтобы обнаружить любые изменения в поведении и может исследовать возможность перекрытия обмена сообщениями и вычислений. Эти программы написаны с использованием MPI и могут использоваться с любой реализацией MPI, не только с mpich. (Cм. configure в каталоге examples/perftest). Дополнительная информация доступна на http://www.mcs.anl.gov/mpi/mpptest. Оценка производительности может быть очень сложной. См. http://www.mcs.anl.gov/mpi/mpptest/hownot.html о наиболее общих ошибках тестирования. Работа [10] описывает эти вещи более подробно.
mpirun -np 4 cpiПолный список опций mpirun можно получить, выполнив
mpirun -help
Более подробную информацию об использовании mpirun можно найти в
руководстве пользователя mpich.
mpicc -c foo.cи
mpiCC -c foo.C
mpif77 -c foo.f
mpif90 -c foo.f90
mpicc -o foo foo.oОтметьте, что для Фортрана 90 разные системы могут потребовать разных суффиксов. Например, AIX не поддерживает f90 как суффикс программ на Фортране 90. Команды для компоновщика могут включать дополнительные библиотеки. Например, для использования некоторых процедур из библиотеки mpe, введите
mpiCC -o foo foo.o
mpif77 -o foo foo.o
mpif90 -o foo foo.o
mpicc -o foo foo.o -lmpeКомбинирование компиляции и компоновки в одной команде, как показано здесь,
mpicc -o foo foo.сможет не работать на некоторых системах.
mpiCC -o foo foo.С
mpif77 -o foo foo.f
mpif90 -o foo foo.f90
Дополнительная информация об использовании этих команд находится в
руководстве пользователя mpich.
uname -aдля Вашей системы. Если Ваша система - SGI, нужен также
hinv
Если у Вас возникло более одной проблемы, пожалуйста, присылайте их в отдельных сообщениях; это упрощает нашу обработку сообщений об ошибках.
Остальная часть этого раздела содержит информацию о устранении ошибок в mpich.
Некоторая часть описывает проблемы, свойственные определенным средам, и дает
соответствующие пояснения. Каждый раздел организован в форме ответов на вопросы,
причем вопросы, относящиеся к более чем одной среде (рабочей станции, ОС),
продолжаются вопросами для определенных систем. Проблемы с кластерами рабочих
станций собраны в одном месте.
./configure : синтаксическая ошибка в строке 20: ' (' не определенаО: У Вас устаревшая версия Bourne Shell (sh). mpich требует, чтобы shell поддерживала процедуры; это было стандартом в большинстве Bourne Shell. Чтобы справиться с этим, Вы можете (а) получить дополненную версию от своего поставщика или (б) инсталлировать любую общедоступную замену shell.
О: Возможно, Вы используете Bash shell (`/bin/bash') в качестве замены Bourne shell (`/bin/sh'). Нам сообщали что, например, в LINUX, Bash не всегда корректно возвращает результат выражения. Способом исправить это является использование другого shell, например `/bin/ash' в такой системе.
Это может не работать на некоторых системах LINUX (любая shell не справится). Нам сообщили, что следующий фрагмент будет работать:
checking gnumake... 1: Плохой номер файлаО: Некоторые версии bash shell некорректно обрабатывают перенаправление вывода. Либо обновите свою версию bash, либо запустите configure под другой shell (такой, как /bin/sh). Убедитесь, что используемая версия sh - это не псевдоним bash. configure пробует определить эту ситуацию и обычно выдает сообщение об ошибке.
О: Смотрите документацию Вашего компилятора. На RS/6000 используйте опцию -qnomaf. На некоторых других системах промежуточные результаты могут запоминаться в 80-битных регистрах (процессоры Intel); это также ведет к неправильному округлению. Вам необходимо заставить компилятор округлять до 64 бит.
checking that the compiler f77 runs... noО: Возможно, это вызвано проблемой с компилятором Фортрана в LINUX. Команда f77 в LINUX зачастую является скриптом shell, использующим программу f2c для преобразования программы на Фортране в С с последующей компиляцией ее компилятором С. Во многих версиях LINUX этот скрипт содержит ошибку, которая возвращает ненулевой код возврата даже при успешном завершении компиляции.
Fortran compiler returned non-zero return code
Output from test was
f2ctmp_conftest.f:
MAIN main:
Чтобы исправить эту ошибку, Вам необходим скорректированный скрипт f77. Если Вы можете исправить его сами, измените последние три строки
case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esacна строки
rc=$?
exit $rc
case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esac
rc=$?
trap 0
exit $rc
overtake.o (.text+0x59): undefined reference to `MPI_COMM_WORLD'О: Возможно, это вызвано проблемой с компилятором Фортрана в LINUX. Команда f77 в LINUX зачастую является скриптом shell, использующим программу f2c для преобразования программы на Фортране в С с последующей компиляцией ее компилятором С. Во многих версиях LINUX этот скрипт содержит ошибку, которая возвращает ненулевой код возврата даже при успешном завершении компиляции.
overtake.o (.text+0x81): undefined reference to `MPI_COMM_WORLD' ...
Чтобы исправить эту ошибку, Вам необходим скорректированный скрипт f77. Если Вы можете исправить его сами, измените последние три строки
case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esacна строки
rc=$?
exit $rc
case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esac
rc=$?
trap 0
exit $rc
/homes/me/mpich/configure: 134956160: Permission deniedЧто неверно?
О: Это ошибка в Linux sh shell. shell пытается создать файл с именем `/tmp/t<processid>-sh' (например, `/tmp/t11203-sh'), но не может этого сделать. Это может произойти, если `/tmp' переполнен; однако, это может произойти и когда shell создала этот файл для другого пользователя ранее. (Вы можете увидеть, что произошло, запустив configure под управлением strace -f). Единственным решением будет уничтожение старых файлов в `/tmp' вашим системным администратором.
ar: write error : No such file or directoryПри этом все файлы доступны и имеют соответствующие права доступа.
*** Error code 1
О: Проверьте наличие свободного пространства в `/tmp'. Эта ошибка иногда возникает, когда в `/tmp' не хватает места для копирования архива (эту операцию ar выполняет при дополнении библиотеки). Команда df /tmp покажет Вам объем свободного места. Убедитесь, что доступно вдвое большее пространство, чем нужно для библиотеки.
О: Многие системы реализуют ranlib с помощью команды ar, и используют по умолчанию каталог `/tmp', полагая, что это будет наиболее быстрым (`/tmp' обычно расположен на локальном диске). К сожалению, большинство систем имеет чрезвычайно маленький раздел `/tmp', поэтому его использование связано с определенным риском. В некоторых случаях команда ar, используемая mpich, завершается успешно, поскольку она использует опцию l, заставляя ar работать с локальным каталогом вместо `/tmp'. С другой стороны, ranlib может использовать `/tmp' и не может быть исправлена.
В некоторых случаях команда ranlib может Вам и не понадобиться. В этих случаях Вы можете произвести реконфигурирование с опцией -noranlib. Если Вам нужно использовать ranlib, либо уменьшите пространство, используемое в `/tmp', либо увеличьте размер этого раздела (Ваш системный администратор должен это сделать). При этом в `/tmp' должно быть как минимум 20-30 Mb свободного места.
/homes/them/burgess/mpich/IRIX32/ch_p4/bin/mpiccО: Убедитесь, что программы ar и ranlib совместимы. GNU Ranlib устанавливается таким образом, что она используется поставщиками программ ar, с которыми она несовместима. Используйте в этом случае опцию -noranlib для configure.![]()
-o overtake overtake.o test.o
ld: WARNING 126: The archive![]()
/homes/them/burgess/mpich/IRIX32/ch_p4/lib/libmpi.a![]()
defines no global symbols. Ignoring.
ld: WARNING 84: /usr/lib/libsun.a is not used for resolving any symbol.
ld: ERROR 33: Unresolved data symbol "MPI_COMM_WORLD"![]()
![]()
1st referenced by overtake.o
ld: ERROR 33: Unresolved text symbol "MPI_Send"![]()
![]()
1st referenced by overtake.o
...
making p4 in directory lib
и т.д.make libp4.acc: ``/usr/include/netinet/in.h'', line 69: error 1000: Unexpected symbol:
cc -Aa -g -I../include -I../../../../include -c p4_globals.c
``u_long''.
cc: ``/usr/include/netinet/in.h'', line 127: error 1000: Unexpected symbol:
``u_short''.
О: Убедитесь, что cc имеет псевдоним (в С-shell выполните alias cc). Если он существует, либо отмените его, либо установите переменную окружения СС на полный путь к компилятору. Чтобы задать полный путь, выполните
unalias ccи выполните реконфигурирование.
setenv CC 1which cc'
making p4 in directory lib
make libp4.acc-142 cc: WARNING File = p4_error.c, Line = 152
cc -I../include -I../../../../include -c p4_globals.c
cc -I../include -I../../../../include -c p4_MD.c
cc -I../include -I../../../../include -c p4_error.c
The number of old style and prototype parameters does not agree.
cc-142 cc: WARNING File = p4_error.c, Line = 162
The number of old style and prototype parameters does not agree.
cc-142 cc: WARNING File = p4_error.c, Line = 169
The number of old style and prototype parameters does not agree.
cc-142 cc: WARNING File = p4_error.c, Line = 174
The number of old style and prototype parameters does not agree.О: Это делается при описании обработчика сигналов и может быть проигнорировано. P4 использует SIG_IGN (игнорирование) и SIG_DFL (поведение по умолчанию), определенные в
mppldr-133 cf77: CAUTION
Встречаются неудовлетворительные внешние ссылки.
Неудовлетворительные внешние ссылки
Entry name Modules referencing entry
GETARG (equivalenced to $USX1)
MPIR_GETARGО: Вы должны определить компилятор Фортрана для configure с помощью агрумента -fc. Реализация mpich на Фортране использует общее расширение Фортрана,GETARG, для получения аргументов командной строки. Большинство систем исполнения Фортрана поддерживают его, но Cray использует вместо него вызов pxfgetarg (i, s, len (s), ierr). Вы можете исправить вручную файл `src/env/farg.f', чтобы вызвать правильную процедуру (заметьте, что configure всякий раз создает при запуске новый `farg.f' из `farg.f.in').
На системе HP-UX версии 10 Вы можете выполнить конфигурирование с -fflags= +U77 и пересобрать mpich. Это уже выполняется по умолчанию.
mpich уже пытается определить правильные имена процедур для доступа к командной строке. Если Вы обнаружили, что mpich не может сделать это корректно, отошлите сообщение об ошибке на mpi-bugs@mcs.anl.gov.
Signal: SIGSEGV in Back End Driver phase.О: По нашей информации установка переменной окружения SGI_CC в -ansi исправляет эту проблему.
> ### Error:
> ### Signal SIGSEGV in phase Back End Driverprocessing aborted
> f77 ERROR: /usr/lib64/cmplrs/be died due to signal 4
> f77 ERROR: core dumped
> *** Error code 2 (bu21)
> *** Error code 1 (bu21)
> *** Error code 1 (bu21)
cc: Warning: -c should not be used with ucode -O3 -o32О: Поразительно, но стандартная опция -c не работает с компиляторами SGI, когда определены -O3 и -o32. Это ``свойство'' компилятора SGI и его невозможно обойти для mpich (кроме общего и непортируемого изменения всех Make-файлов). Вы можете лишь не использовать опцию -O3.![]()
on a single file; use -j instead to get inter-module optimization.
...О: Нас информировали, что это связано с ошибкой в скрипте f77 в некоторых весиях LINUX. Попробуйте либо получить исправленную версию скрипта f77, либо переконфигурировать с опцией -nof77.
cc -o overtake overtake.o test.o -L/usr/local/mpich/LINUX/ch_p4/lib -lmpi
overtake.o (.text+0x71): undefined reference to `MPI_COMM_WORLD'
overtake.o (.text+0x82): undefined reference to `MPIR_I_DOUBLE'
overtake.o (.text+0xe1): undefined reference to `MPI_COMM_WORLD'
...
О: Существует несовместимость системных include-файлов (но не include-файлов mpich). Если Вы можете модифицировать `/usr/include/rpc/xdr.h', добавьте следующие строки в начало этого файла:
#if defined (__DECC) || defined (__DECCXX)
typedef long int int64_t;
#endif
mpCC -o overtake overtake.o test.o![]()
-L/usr/local/src/Mpi/1.2.0/lib/rs6000/ch_eui -lpmichО: Ваша реализация IBM может не содержать процедуры MPL, которые mpich использует для реализации MPI. Ваша система должна содержать версию MPI для IBM, и Вы должны использовать ее.
ld: 0711-317 ERROR: Undefined symbol: .mp_main
ld: 0711-317 ERROR: Undefined symbol: .mp_environ
ld: 0711-317 ERROR: Undefined symbol: .mpc_bsend
...
amon:MPICH/mpich>make clean
/bin/rm -f *.o * nupshot *** Error code 1О: Это ошибка в поддержке shell в некоторых системах Compaq ULTRIX. Вы можете обойти ее, использовав
setenv PROG_ENV SYSTEM_FIVEКонфигурирование с -make=s5make также сработает.
0 - Error in MPI_ADDRESS: Invalid argument: Address of location given toО: Это не ошибка; это пробел в определении MPI-1, исправленный в MPI-2. Это указывает, что целые числа в Фортране недостаточно велики, чтобы содержать адрес. Это должно означать, что программы, написанные на Фортране, не должны использовать MPI_Address в этой системе.
MPI_ADDRESS does not fit in Fortran integer
0Aborting program!
Timer around sleep (1) did not give 1 second; gave 0.399949О: Низкоуровневое ПО, которое использует mpich, возможно использует сигнал SIGALRM, что запрещено программам пользователя. Это не ошибка (стандарт запрещает системам использовать любые сигналы), хотя это и неудобно. Одной из систем, использующих SIGALRM, является ПО IBM MPL/POE (устройство ch_mpl) для использования в высокопроизводительных переключателях параллельных компьютеров IBM SP.
Usage: configurewith-arch=ARCH_TYPE -comm=COMM_TYPE
with-device=DEVICE
with-mpe
without-mpe
disable-f77
disable-f90
with-f90nag
with-f95nag
disable-f90modules
disable-gencat
disable-doc
enable-c++
disable-c++
enable-mpedbg
disable-mpedbg
enable-devdebug
disable-devdebug
enable-degub
disable-debug
enable-traceback
disable-traceback
enable-long-long
disable-long-long
enable-long-double
disable-long-double
-prefix=INSTALL_DIR
где-c++=C++_COMPILERnoc++
-opt=OPTFLAGS
-cc=C_COMPILER-fc=FORTRAN_COMPILER
-clinker=C_LINKER-flinker=FORTRAN_LINKER
-c++linker=CC_LINKER
-cflags=CFLAGS-fflags=FFLAGS -c++flags=CCFLAGS
-optcc=C_OPTFLAGS-optf77=F77_OPTFLAGS
-f90=F90_COMPILER-f90flags=F90_FLAGS
-f90inc=INCLUDE_DIRECTORY_SPEC_FORMAT_FOR_F90
-f90linker=F90_LINKER
-f90libpath=LIBRARY_PATH_SPEC_FORMAT_FOR_F90
-lib=LIBRARY-mpilibname=MPINAME
-mpe_opts=mpe_OPTS
-make=MAKEPGM
-memdebug-ptrdebug-tracing -dlast
-listener_sig=SIGNAL_NAME
-cross
-adi_collective
-automountfix=AUTOMOUNTFIX
-noranlib-ar_nolocal
-rsh=RSHCOMMAND-rshnol
-noromio-file_system=FILE_SYSTEM
-p4_opts=P4_OPTS
ARCH_TYPE = тип архитектуры машины, для которойконфигурируется MPIВсе аргументы не обязательны, но если представлены аргументы `arch', `comm' или `prefix',
COMM_TYPE = уровень взаимодействия или используемая опция
DEVICE = используемое устройство взаимодействия
INSTALL_DIR = каталог для установки MPI (необязательно)
MPE_OPTS = опции для передачи configure для mpe
P4_OPTS = опции для передачи p4 configure (device=ch_p4)
C++_COMPILER = по умолчанию использует xlC, g++, CC (необязательно)
OPTFLAGS = флаги оптимизации для передачи компилятору (например -g)
CFLAGS = флаги компилятора C
FFLAGS = флаги компилятора Фортран
MAKEPGM = используемая версия make
LENGTH = длина сообщения, при которой ADI переключает протоколсообщений
с коротких на длинные сообщения
AUTOMOUNTFIX = команды для исправления автомонтирования
RSHCOMMAND = команда использования удаленной shell
MPILIBNAME = имя для использования вместо mpich при упоминаниибиблиотеки MPI.
Если установлено, то данное имя используется вместоlibmpich.
Опция используется в системах с несколькими
различнымиреализациями MPI.
FILE_SYSTEM = имя файловой системы, используемой ROMIO. Поддерживает на
данный момент nfs, ufs, pfs (Intel), piofs (IBM), hfs (HP),
sfs (NEC), xfs (SGI).
SIGNAL_NAME = имя используемого устройством P4 (device=ch_p4) сигнала отом,
что требуется новое соединение. По умолчанию это SIGUSR1.
Пакеты, которые могут включаться в mpich
Вы можете использоватьwith-device=name -Использовать именованное устройство для
взаимодействия. Известные имена включают ch_p4,
ch_mpl, ch_shmem, globus2. Если ничего не определено,
берется значение по умолчанию. Специальные опции
устройства определяются после имени устройства,
отделяясь двоеточием. Пример:with-device=globus2:-flavor=mpi, nothreads
with-romio=OPTIONS- Использовать ROMIO для предоставления MPI
ввода-вывода из MPI-2 (по умолчанию). Опции включают
-file_system=fstype, где fstype может быть любой
комбинацией nfs, ufs, pfs (Intel), piofs (IBM), hfs (HP),
sfs (NEC), xfs (SGI), скомбинированные '+'. Если romio
не включается, не могут быть построены модули Fortran 90.with-mpe - Создать среду mpe (по умолчанию)
with-f90nag - Выбрать компилятор NAG f90 для
Фортрана ( предварительная версия, предназначенная для
использования вместо компилятора Фортран 77)with-f95nag - Выбрать компилятор NAG f95 для Фортрана
Следующие опции предназначены для разработчиков MPI и отладки configure:enable-c++ - Создать интерфейсы C++ для процедур MPI-1
(по умолчанию)enable-f77 - Создать интерфейсы Фортран 77 для процедур MPI
(по умолчанию)enable-weak-symbols - Использовать слабые обозначения для процедур MPI/PMPI.
Эта опция использует для профилирующего интерфейса
слабые обозначения, если они доступны (по умолчанию).enable-debug - Разрешить поддержку отладчиков для доступа к очередям
сообщений.enable-traceback - Разрешить вывод стека вызовов, когда MPI и программы
пользователя создаются с помощью определенных компиляторов
(в настоящее время поддерживаются только определенные
версии gcc)enable-mpedbg - Разрешить аргумент командной строки -mpedbg (например,
ошибки могут вызвать xterm, выполняющий отладчик).
Работает только с некоторыми рабочими станциями.enable-sharedlib - Попытаться построить разделяемые библиотеки.Всегда
enable-sharedlib=dir строит статические библиотеки. Если определен каталог,
библиотеки будут помещены в него. Опция используется
для помещения разделяемых библиотек в единое место на
локальных дисках кластера.enable-f90modules - Создать поддержку модулей Фортран 90 (по умолчанию,
если найден компилятор Фортран 90 или 95). Если не
построен ROMIO, модули Фортран 90 не создаются.
Вы можете использоватьenable-strict - Попытаться построить mpich, используя опции strict в
GNU gcc.enable-echo - Заставить configure сообщать о своих действиях
enable-devdebug - Разрешить отладочный код в ADI.
Заметки об использовании configure:
Рекомендации по использованию GNU configure советуют не использовать его для построения различных инструментов, а лишь для контроля некоторых базовых возможностей или вложенных пакетов. Наше использование configure не следует этим правилам, поскольку configure слишком удобен, и нам требуется гибкость, позволяющая пользователю создавать варианты mpich.
Несколько заметок о параметрах командной строки:
Вы можете выбрать разные компиляторы C и Фортран, используя ключи `-cc' и `-fc'. Переменные окружения `C' и `FC' могут также содержать значения этих параметров, но они могут переопределяться скриптом configure. Использование `-cc=$CC -fc= $FC' заставит configure использовать эти компиляторы.
Если указано `-with-cross=file', этот файл используется для кросс-компиляции. Файл должен содержать присваивания в форме
CROSS_SIZEOF_INT=4для каждой переменной кросс-компиляции. Команда
egrep `CROSS_A_Z_=` configure | sed `s/=.*//g'должна показать каждую переменную.
Опция `-opt' позволяет Вам задать опции оптимизации для компиляторов ( и С, и
Фортран). Например, `-opt=-O' выбирает оптимизированную генерацию кода для
большинства систем. `-optcc' и `-optf77' позволяют Вам задать опции только для
компилятора С, либо Фортрана. Используйте
`-cflags' и `-fflags'
для опций, не относящихся к компиляции.
Следует отметить, что опции `-opt' не передаются скриптам `mpicc', `mpif77',
`mpiCC',
`mpif90'. Эти опции используются только при построении mpich.
Опция `-lib' позволяет Вам определить место библиотеки, котрая может понадобиться определенному устройству. Большинство устройств не требуют этой опции; см. инструкции по инсталляции для тех, которым это нужно
Опция `-make' может использоваться для выбора альтернативной программы make. Например, в системах FreeBSD, может потребоваться -make=gnumake, поскольку make, унаследованный из BSD 4.4, не поддерживает операции включения (используя вместо этого форму .include, не такую, как в других make); опция используется в утилите wrappergen.
Опция `disable-short-longs' может использоваться для запрета использования
типов С `long long' (общее расширение) и `long double' (ANSI/ISO C), когда их
размер соответствует размеру типов `long' и `double'. Некоторые системы
позволяют такие длинные типы С, но генерируют предупреждение, когда они
используются; эта опция может использоваться для устранения этих сообщений (и
поддержки этих типов). `
disable-long-long' отключает только `long long'; `
disable-long-double' отключает только `long double'.
Опция `ar_nolocal' упреждает команду архива библиотеки от попыток использования локального каталога для временного хранения. Эту опцию нужно использовать (а) когда в разделе, на котором расположен mpich, недостаточно места (менее 20 Mb) и (b) когда места достаточно в /tmp (или в месте для помещения временных файлов по умолчанию).
Опция `-noranlib' пропускает шаг `ranlib' (необходимый в некоторых системах для создания объектной библиотеки). Это особенно полезно для систем, в которых `ranlib' необязателен (возможен, но не нужен; поскольку он возможен, configure использует его заодно), но может не сработать (некоторые `ranlib' реализованы, как скрипты с использованием `ar'; если они не используют локальный каталог, они могут не сработать, уничтожив в процессе библиотеку, если в каталоге /tmp не достаточно места). Это встречается в некоторых OSF-системах.
Опция `-memdebug' создает избыточный отладочный код внутренней памяти. Это нужно использовать только, если Вы пытаетесь найти проблему с памятью (это может помочь найти проблемы с памятью и в коде пользователя). Запуск программ с опцией `-mpidb memdump' создает после вызова `MPI_Finalize' дамп всей занятой памяти, выделенной MPI. Например, будет указан созданный пользователем тип данных, который позже не был освобожден.
Опция `-tracing' позволяет трассировку внутренних вызовов. Это нужно использовать только для отладки самой реализации mpich.
Опция `-dlast' позволяет трассировать самые последние действия, выполненные устройством. Это может быть вывод при возникновении сигнала (типа SIGINT), ошибки или вызова специальной процедуры. Для этой опции существуют издержки по производительности, но она может быть полезна для разработчиков, пытающихся отладить проблему.
Опция `-rsh' позволяет Вам выбрать альтернативную команду для удаленной
shell (по умолчанию, configure использует `rsh' или `remsh' из
переменной `PATH'). Если Ваш shell не поддерживает опцию `-l'
(некоторые AFS-версии rsh имеют этот недостаток), укажите также опцию
`-rshnol'. Эти опции полезны только при построении сетевой версии mpich (т.е. `with-device=ch_p4').
Специальные опции настройки:
Существует ряд опций для настройки ADI (Abstract Device Interface - интерфейс абстрактного устройства), являющегося интерфейсом передачи сообщений нижнего уровня. Эти опции не нужно использовать, пока Вы не уверены в том, что Вы делаете.
Опция `-pkt-size=LENGTH' позволяет Вам выбрать длину сообщений, при которой ADI переключается с короткого на длинный формат сообщений. LENGTH должна быть положительной.
Опция `-adi_collective' позволяет ADI предоставить некоторые коллективные операции в дополнение к базовым операциям "точка-точка". В настоящее время большинство систем не поддерживают эту опцию (она игнорируется), а на других она недостаточно протестирована.
Примерное использование configure:
Чтобы создать mpich для использования на sun4 с SunOS, в качестве устройства ch_p4, и с каталогом установки, равным текущему каталогу:
./configureИзвестными устройствами являютсяwith-device=ch_p4
with-arch=sun4 make
ch_nx (стандартные вызовы Intel NX),Следующие устройства поддерживались ADI-1, но сейчас не поддерживаются. Пожалуйста, свяжитесь с нами, если Вы заинтересованы помочь нам с поддержкой этих устройств:
ch_mpi (стандартные вызовы IBM EUI или MPL),
ch_p4 (p4),
globus2 (Globus:globus_io/vMPI),
ch_meiko (для Meiko CS2, использую библиотеку совместимости NX),
ch_shmem (системы с разделяемой памятью, типа SMP),
ch_lfshmem (системы с разделяемой памятью, типа SMP; используют
неблокирующиеся буферы сообщений),
ch_cenju3 (стандартные вызовы NEC Cenju-3)
meiko (для Meiko CS2, используя библиотеку elan tport),Они больше не поставляются с дистрибутивом mpich.
nx (Intel Paragon),
t3d (Cray T3D, используя библиотеку Cray shmem),
ch_nc (стандартные вызовы nCube, требует -arch=ncube),
ch_cmmd (стандартные вызовы TMC CM-5 CMMD)
Известные архитектуры включают (регистр важен)
sun4 (SUN OS 4.x)Специальные замечания:
solaris (Solaris)
solaris86 (Solaris on Intel platforms)
hpux (HP UX)
sppux (SPP UX)
rs6000 (AIX for IBM RS6000)
sgi (Silicon Graphics IRIX 4.x, 5.x, 6.x)
sgi5 (Silicon Graphics IRIX 4.x on R4400's, для MESHINE)
IRIX (то же, что и sgi)
IRIX32 (IRIX с 32-битными объектами -32)
IRIXN32 (IRIX c -n32)
IRIX64 (IRIX с 64-битными объектами)
alpha (DEC alpha)
intelnx (Intel i860 или Intel Delta)
paragon (Intel Paragon)
tflops (Intel TFLOPS)
meiko (Meiko CS2)
CRAY (CRAY XMP, YMP, C90, J90, T90)
cray_t3d (CRAY T3D)
freebsd (PC клоны на FreeBSD)
netbsd (PC клоны на NetBSD)
LINUX (PC клоны на LINUX)
LINUX_ALPHA (Linux на процессорах Alpha)
ksr (Kendall Square KSR1 и KSR2)
EWS_UX_V (NEC EWS4800/360AD рабочие станции. Не тестировалось.)
UXPM (UXP/M. Не тестировалось.)
uxpv (uxp/v/ Не тестировалось.)
SX_4_float0
(NEC SX-4; Формат с плавающей точкой 0
Удовлетворяет стандарту IEEE 754.
С: sizeof (int) = 4;sizeof (float) = 4
FORTRAN: sizeof (INTEGER)= 4;sizeof (REAL) = 4)
SX_4_float1
(NEC SX-4; Формат с плавающей точкой 1
Формат с плавающей точкой IBM.
С: sizeof (int) = 4;sizeof (float) = 4
FORTRAN: sizeof (INTEGER)= 4;sizeof (REAL) = 4)
SX_4_float2
(NEC SX-4; Формат с плавающей точкой 2
Формат с плавающей точкой CRAY.
С: sizeof (int) = 4;sizeof (float) = 8
FORTRAN: sizeof (INTEGER) = 8;sizeof (REAL) = 8
!!!ВНИМАНИЕ!!! Версия не работает с процедурами Фортран
sizeof (INTEGER) != sizeof (int))
SX_4_float2_int64
(NEC SX-4; Формат с плавающей точкой 2 и 64-битными целыми
С: sizeof (int) = 8;sizeof (float) = 8
FORTRAN: sizeof (INTEGER)= 8;sizeof (REAL) = 8)
Для многопроцессорных SGI (with-arch=IRIX), работающих с
устройствами ch_p4, используйте -comm=ch_p4, чтобы отключить
использование устройства коммуникации p4 через разделяемую память и
-comm=shared, чтобы включить использование устройства коммуникации p4
через разделяемую память. По умолчанию используется устройство коммуникации
через разделяемую память.
Остальное может быть определено.
Вы должны получить tcl7.3.tar.Z и tk3.6.tar.Z (а также заплатку tk3.6p1.patch). Более поздние версии tcl и tk не совместимы с этими и не работают с nupshot. Программа upshot модифицирована для работы как с tk 3.6, так и с tk 4.0.
Необходимо, чтобы программа wish была доступна пользователям; другие части tcl и tk можно не устанавливать (но убедитесь в том, что все необходимое для wish установлено).
Для сборки Tcl и Tk мы рекомендуем следующий подход:
gunzip -c tcl7.3.tar.Z | tar xf -
gunzip -c tk3.6.tar.Z | tar xf -
cd tk3.6(Отметьте, что используется patch -p; новые версии patch требуют аргумента и правильным в этом случае будет такое значение; другие версии patch могут потребовать -p1 (без пробела между p и 1)).
patch -p 1 < ../tk3.6p1.patch
cd ..
cd tcl7.3
./configure -prefix=/usr/local/tcl73tk36
mkdir /usr/local/tcl73tk36
make
make install
cd ../tk3.6
./configure -prefix=/usr/local/tcl73tk36
make
make install
setenv TCL73TK36_DIR /usr/local/tcl73tk36Это позволит mpich обнаружить эти версии Tcl/Tk.
configureДве подсказки по устранению ошибок для Paragonwith-device=ch_nx -arch=paragon
PGC-W-0115-Duplicate standart type (init.c: 576)О: Это происходит из-за невозможности обработки или игнорирования компилятором long long. Эти предупреждения не наносят вреда.
PGC/Paragon Paragon Rel R5.0: compilation completed with warnings
PGC-W-0115-Duplicate standart type (init.c: 576)
PGC/Paragon Paragon Rel R5.0: compilation completed with warnings
О: Программы на Фортране должны использовать абсолютный путь к файлу `mpif.h' из-за ошибки в компиляторе Фортрана (он просматривает каталоги в неправильном порядке).
icc -o overtake overtake.o test.o -L//mpich/lib/intelnx/ -lmpi -lnodeО: Возможно, Вы пытаетесь построить mpich на древнем 386-ом под управлением System V выпуск 2. Эта версия Unix имеет очень жесткие ограничения на длину имен файлов (более жесткие, чем нам хотелось бы). Главной проблемой здесь является имя файла `mpich/src/context/keyval_create.c', которое слишком длинное для этой системы и некорректно архивируется. Лучше создать mpich на другой, более современной системе (например, Sun под управлением SunOS или Solaris).
/usr/ipcsXDEV/i860/bin/ld860: Error: undefined symbol `_MPI_Keyval_create'
/usr/ipcsXDEV/i860/bin/ld860: Fatal: no output file created
mpireconfig Makefile(mpireconfig находится в одном каталоге с mpirun). Он создаст новый make-файл из Makefile.in с верными параметрами для mpich, который был установлен.
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html mpich_install.tex
The translation was initiated by Alex Otwagin on 2002-12-16
William Gropp
Ewing Lusk 1
William Gropp
Ewing Lusk 1
Новое в 1.2.2:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Основные возможности mpich:
Этот документ предполагает, что mpich уже создан и установлен в соответствии с
инструкциями из руководства по инсталляции mpich.
Поддерживаются также следующие специальные опции:
mpicc -c foo.cи
mpif77 -c foo.f
mpiCC -c foo.C
mpif90 -c foo.f
mpicc -o foo foo.oКоманды для компоновщика могут включать дополнительные библиотеки. Например, для использования процедур из библиотеки math для С, используйте
mpif77 -o foo foo.o
mpiCC -o foo foo.o
mpif90 -o foo foo.o
mpicc -o foo foo.o -lmКомбинирование компиляции и компоновки в единой команде, как показано здесь
mpicc -o foo foo.стакже можно использовать.
mpif77 -o foo foo.f
mpiCC -o foo foo.C
mpif90 -o foo foo.f
Заметьте, что хотя суффиксы .c для программ С и .f для программ Фортрана являются стандартными, такого же соглашения о суффиксах для программ на С++ и Фортране 90 нет. Примеры, показанные выше подходят ко многим, но не ко всем системам. mpich пытается определить приемлемые суффиксы, но не всегда в состоянии сделать это.
Вы можете переопределить выбор компилятора определением переменных окружения
MPICH_CC,
MPICH_F77, MPICH_CCC, MPICH_F90. Однако,
помните, что это будет работать, только если альтернативный компилятор совместим
с компилятором по умолчанию (под совместимостью мы подразумеваем, что они
используют те же самые размеры для типов данных и генерируют объектный код,
который может использоваться библиотеками mpich). Если Вы хотите
переопределить компоновщик, испорльзуйте переменные окружения
MPICH_CLINKER, MPICH_F77LINKER, MPICH_CCLINKER,
MPICH_F90LINKER.
Чтобы создать разделяемые библиотеки для mpich, Вы должны конфигурировать и
собирать mpich с опцией enable-sharedlib. Поскольку каждая
Unix-система и практически каждый компилятор использует различные и зачастую
несовместимые множества опций для создания разделяемых объектов и библиотек,
mpich может не определить коректные опции. В настоящее время mpich
воспринимает Solaris, GNU gcc (на большинстве платформ, включая LINUX и
Solaris) и IRIX. Информацию о построении разделяемых библиотек на друих
платформах можно присылать на mpi-bugs@mcs.anl.gov.
Когда разделяемые библиотеки построены, Вы должны сообщить командам компиляции и компоновки mpich об их использовании (причина, по которой разделяемые библиотеки не используются по умолчанию, будет пояснена ниже). Вы можете сделать это либо опцией командной строки -shlib или установкой переменной окружения MPICH_USE_SHLIB в значение yes. Например,
mpicc -o cpi -shlib cpi.cили
setenv MPICH_USE_SHLIB yesИспользование переменной окружения MPICH_USE_SHLIB позволяет Вам управлять использованием разделяемых библиотек без изменения команд компиляции; это очень полезно в проектах, которые используют make-файлы.
mpicc -o cpi cpi.c
Запуск программы, построенной с испоьзованием разделяемых библиотек, может быть очень сложным. Некоторые (большинство?) систем не запоминают, где находились разделяемые библиотеки, когда компоновался исполняемый файл! Вместо этого, они пробуют найти разделяемые библиотеки либо в каталоге по умолчанию (таком, как `/lib'), либо в каталоге, определяемом переменной окружения, такой, как LD_LIBRARY_PATH, либо в каталоге, определяемом агрументом командной строки, таким, как -R или -rpath (см. ниже более подробно). configure для mpich проверяет их и сообщает, когда исполняемый файл, построенный с разделяемыми библиотеками, вспоминает их размещение. Он также пытается использовать аргументы командной строки компилятора, чтобы заставить исполняемый файл вспомнить размещение разделяемых библиотек.
Если Вам необходимо установить переменные окружения, чтобы указать, где находятся разделяемые библиотеки mpich, Вам необходимо убедиться в том, что и процесс, из которого Вы запустили mpirun, и любые процессы, запущенные mpirun, получат переменную окружения. Простейший способ сделать это - установить переменную окружения внутри Вашего файла `.cshrc' (для пользователей csh или tcsh) или `.profile' (для пользователей sh или ksh).
Однако, установка переменной окружения внутри скриптов запуска может вызвать проблемы, если Вы используете несколько различных систем. Например, у Вас имеется единый файл `.cshrc', который Вы используете в SGI (IRIX) и Solaris. Вы не хотите установить LD_LIBRARY_PATH, чтобы указать SGI на Solaris-версию разделяемых библиотек mpich2. Вместо этого, Вы можете пожелать установить переменную окружения перед запуском mpirun:
setenv LD_LIBRARY_PATH $К сожалению, это не всегда сработает. В зависимости от метода, используемого mpirun и mpich для запуска процессов, переменная окружения может не передаться новому процессу. Это вызовет завершение программы с сообщением видаLD_LIBRARY_PATH
:/usr/local/mpich/lib/shared
mpirun -np 4 cpi
ld.so.1: /home/me/cpi: fatal: libpmpich.so.1.0: open failed:Существуют различные решения этой проблемы; каждое из них зависит от конкретного устройства mpich (например, ch_p4), которое Вы используете, и эти решения обсуждаются в соответствующих разделах в разд.3.
No such file or directory
Killed
Альтернативой использованию LD_LIBRARY_PATH и безопасного сервера является добавление опции к команде компоновки, предоставляющей путь для использования в поиске разделяемых библиотек. К сожалению, опция, которая Вам нужна, это ``добавить этот каталог в путь поиска'' (такая, какую Вы получаете, используя -L). Вместо этого, многие компиляторы предлагают только опцию ``заменить путь поиска на данный путь''3. Например, некоторые компиляторы позволяют использовать -Rpath:path:...:path для определения заменяемого пути. Тогда, если и mpich, и пользователь предоставляют путь поиска библиотек через -R, один из путей будет утерян. В итоге, mpicc и другие скрипты могут проверить наличие опции -R и создать универсальную версию, но сейчас они этого не делают. Вы можете, однако, предложить полный путь поиска самостоятельно, если Ваш компилятор поддерживает такие опции, как -R.
Все предшествующее может звучать как масса лишней работы и в некоторых
случаях это так. Однако, для больших кластеров эти затраты окупаются: программы
будут запускаться быстрее и более надежно, поскольку уменьшается трафик по сети
и файловой системе.
Например, чтобы определить флаги, используемые для компиляции и компоновки программ на С, Вы можете использовать эти команды, вывод которых показан для устройства ch_p4 на рабочей станции Linux.
% mpicc -compile_info
cc -DUSE_STDARG -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1
-DHAVE_STDARG_H=1 -DUSE_STDARG=1 -DMALLOC_RET_VOID=1
-I/usr/local/mpich/include -c
% mpicc -link_info
cc -DUSE_STDARG -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1
-DHAVE_STDARG_H=1 -DUSE_STDARG=1 -DMALLOC_RET_VOID=1
-L/usr/local/mpich/lib -lmpich
mpirunдля запуска программы `a.out' на четырех процессорах. Команда mpirun -help выдаст Вам полный список опций, которые также можно найти в приложении В.np 4 a.out
При выходе mpirun возвращает статус одного из процессов, обычно
процесса с рангом 0 в
MPI_COMM_WORLD.
Для связывания множества многопроцессорных систем выбор устройства
globus2, описанного в разд. 3.6, может быть лучшим, чем устройства
ch_p4.
Единственным аргументом tstmachines является имя архитектуры; оно то же самое, что и расширение файла machines. Например,
/usr/local/mpich/sbin/tstmachines sun4проверяет, что программа в текущем каталоге может исполняться на всех машинах sun4 в списке machines. Эта программа ничего не выводит, если все в порядке; если Вы хотите увидеть, что происходит, используйте аргумент -v (verbose - подробно):
/usr/local/mpich/sbin/tstmachines -v sun4Вывод этой команды может выглядеть примерно так
Trying true on host1.uoffoo.edu ...Если tstmachines обнаружит проблему, он может предположить возможные причины и решения. Вкратце здесь проводятся три теста:
Trying true on host2.uoffoo.edu ...
Trying ls on host1.uoffoo.edu ...
Trying ls on host2.uoffoo.edu ...
Trying user program on host1.uoffoo.edu ...
Trying user program on host2.uoffoo.edu ...
Прежде чем Вы запустите этот сервер, убедитесь, что безопасный сервер установлен для общего использования; если это так, один и тот же сервер можно использовать для всех. В этом режиме для инсталляции сервера необходим доступ супервизора. Если сервер еще не инсталлирован, Вы можете установить его для собственного использования без специальных привилегий командой
chp4_servs -port=1234Она запустит безопасный сервер на всех машинах, перечисленных в файле
Номер порта, указанный опцией -port=, должен отличаться от любого уже используемого порта рабочих станций.
Чтобы разрешить использование безопасного сервера устройствами ch_p4, добавьте в Вашу среду следующие определения:
setenv MPI_USEP4SSPORT yesЗначением MPI_P4SSPORT должен быть порт, на котором Вы хотите запустить безопасный сервер. Когда эти переменные окружения установлены, mpirun пытается использовать безопасный сервер для запуска программ, использующих устройство ch_p4.( Аргумент командной строки -p4ssport для mpirun может использоваться вместо этих переменных окружения; mpirun -help даст Вам дополнительную информацию.)
setenv MPI_P4SSPORT 1234
mercuryопределяющие три однопроцессных машины (mercury, venus, earth), двухпроцессную машину mars и 15-процессную машину jupiter.
venus
earth
mars:2
jupiter:15
По умолчанию mpirun использует не более процессоров, чем указано в файле
machines для каждого узла, до 16 процессов на каждой машине. При установке
переменной окружения MPI_MAX_CLUSTER_SIZE с положительным целым
значением, mpirun может запускать не более MPI_MAX_CLUSTER_SIZE
процессов на машине, разделяя память для взаимодействия. Например, если
MPI_MAX_CLUSTER_SIZE имеет значение 4, то команда mpirun -np 9
для указанного выше файла machines создаст один процесс на машинах
mercury, venus, earth, два процесса на mars (поскольку файл
machines определяет, что mars может иметь два процесса, разделяющих
память) и 4 на jupiter (поскольку jupiter может иметь 15 процессов,
но необходимы только 4). Если необходимо 10 процессов, mpirun стартует
заново с начала файлаmachines, создавая дополнительный процесс на
mercury; значение MPI_MAX_CLUSTER_SIZE предотвращает запуск
mpirun пятого процесса с разделяемой памятью на jupiter.
mpirun -arch sun4 -np 3 -arch IRIX -np 2 program.%aСпециальное имя программы program.%a позволяет Вам определить различные исполняемые файлы программы, поскольку исполняемые файлы Sun не могут работать на рабочих станциях SGI и наоборот. %a заменяется на имя архитектуры; в данном примере program.sun4 работает на машинах Sun и program.IRIX работает на машинах SGI IRIX. Вы также можете поместить программы в различные каталоги; например,
mpirun -arch sun4 -np 3 -arch IRIX -np 3 /tmp/%a/programВажно определить архитектуру через -arch перед определением количества процессоров. Первая команда arch должна относиться к процессору, на котором будет запущена задача. Если не указана опция -nolocal, то первая -arch должна относиться к процессору, с которого запущен mpirun.
mpirun -p4pg pgfile myprogгде pgfile - имя файла. Формат файла определен ниже.
Это необходимо, если Вы хотите жестко контролировать машины, на которых Вы работаете, или mpirun не может создать файл автоматически. Это происходит, если
<hostname> <#procs> <progname> <login>Примером такого файла, где команда будет запущена с машины sun1, может быть
sun1 0 /users/jones/myprogУказанный выше файл определяет четыре процесса, по одному на каждой из трех sun и один на другой станции, где имя профиля пользователя отличается. Отметьте 0 в первой строке. Он здесь, чтобы указать, что на машине sun1 не должен запускаться никакой другой процесс, кроме того, который запускается командой пользователя. Вы можете пожелать запустить все процессы на Вашей собственной машине в качестве теста. Вы можете сделать это, повторив ее имя в файле
sun2 1 /users/jones/myprog
sun3 1 /users/jones/myprog
hp1 1 /home/mbj/myprog mbj
sun1 0 /users/jones/myprogЭта команда запустит три процесса на sun1, взаимодействующих через сокеты. Для запуска на многопроцессорной системе с разделяемой памятью 10 процессов, вы можете использовать файл вида
sun1 1 /users/jones/myprog
sun1 1 /users/jones/myprog
sgimp 9 /u/me/progЗаметьте, что это пример для 10 процессов, один из которых непосредственно запускается пользователем, а другие девять определены в этом файле. Он требует, чтобы mpich был сконфигурирован с опцией -comm=shared; для дополнительной информации см. руководство по инсталляции.
Если Вы находитесь на машине gyrfalcon и хотите запустить задачу с одним процессом на gyrfalcon и тремя процессами на alaska, причем процессы на alaska взаимодействуют через разделяемую память, Вы можете использовать
local 0 /home/jbg/mainНе существует возможности передать различным процессам MPI различные аргументы командной строки.
alaska 3 /afs/u/graphics
mpirun -np 2 mpptest -p4sctrl bufsize=64:writev=n
host1-atm 0 /home/me/a.out
host2-atm 1 /home/me/a.out
chp4_servs -port=1234Безопасный сервер распространяет все переменные окружения на удаленные процессы, и обеспечивает, чтобы среда процесса (содержащего Вашу программу MPI) содержала все переменные окружения, начинающиеся с LD_ (в таком случае система использует LD_SEARCH_PATH или некоторое другое имя для поиска разделяемых бибилиотек).
Начиная с mpich версии 1.2.0 мы ввели новый медот обработки запуска, основанный на демонах. Этот механизм, требующий конфигурирования нового устройства, еще не достаточно широко протестирован, чтобы использоваться в кластерах по умолчанию, но мы надеемся, что в конечном итоге он станет таким. В этой версии mpich он был существенно улучшен и сейчас инсталлируется вместе с mpich по команде make install. В системах с gdb он поддерживает простой параллельный отладчик, который мы называем mpigdb.
Основной идеей является создание перед моментом запуска задачи сети демонов на машинах, которые будут исполнять процессоы MPI, а также на машине, где будет выполняться mpirun. После этого команды запуска задачи (и другие команды) будут обращаться к локальному демону и использовать уже существующие демоны для запуска процессов. Большая часть начальной синхронизации, выполняемой устройством ch_p4, устраняется, поскольку демоны могут использоваться во время выполнения для поддержки установки соединений между процессами.
Для использования нового механизма запуска Вы должны
configurewith-device=ch_p4mpd
make
Демоны можно запустить вручную на удаленных машинах, используя номера портов, выделяемых демонам при их запуске:
fire% mpd &
223792
fire_55681: MPD starting
fire%
soot% mpd -h fire -p 55681 &
16629
soot_35836: MPD starting
soot%
Если демоны не могут назначить порты автоматически, можно найти машину и номер порта, используя команду mpdtrace:
fire% mpd &
fire% mpdtrace mpdtrace: fire_55681:lhs=fire_55681 rhs=fire_55681 rhs2=fire_55681
fire%
soot% mpd -h fire -p 55681 &
soot% mpdtrace
mpdtrace: fire_55681: lhs=soot_33239 rhs=soot_33239 rhs2=fire_55681
mpdtrace: soot_33239: lhs=fire_55681 rhs=fire_55681 rhs2=soot_33239
soot%
Вы можете использовать команду mpd -b для запуска демонов как настоящих демонов, отсоединенных от терминала. Этот метод имеет свои преимущества и недостатки.
Существует пара скриптов в каталоге mpich/mpid/mpd, которые могут помочь:
localmpds <number>запускает <number> экземпляров mpd на локальной машине. Это очень полезно для тестирования. Обычно Вы выполняете
mpd &для запуска одного mpd на локальной машине. Другие mpd на удаленных машинах могут быть запущены через rsh, если возможно:
remotempds <hostfile>где <hostfile> содержит имена других машин для запуска mpd. Это простой файл имен машин, не похожий по формату на файлы MACHINES, используемые устройством ch_p4, которые могут содержать комментарии и другие обозначения.
См. также скрипт startdaemons, который инсталлируется вместе с mpich.
mpirun -np 4 a.outВы можете остановить демонов командой mpichstop.
mpirun -np 16 cpi
mpirun -np 32 fpiПотоки stdin, stdout и stderr будут отображаться обратно в Ваш процесс mpirun, даже если процесс MPI ранга 0 будет выполняться на удаленной машине.
mpirun -np 32 myprog arg1 arg2 -MPDENV- MPE_LOG_FORMAT=SLOGАргумент -MPDENV- - это ограждение. Все аргументы после него обрабатываются mpirun, а не приложением.![]()
GLOBMEMSIZE=16000000
mpirun -np 32 cpiВаши процессы будут запущены на belmont1, belmont2, ..., belmont32. Вы можете заставить Ваши процессы MPI работать где-либо еще, задав mpirun аргументы оптимального размещения. Если Вы вводите
mpirun -np 32 cpi -MPDLOC- belmont33 belmont34 ... belmont64то Ваша задача будет работать на belmont33 belmont34 ... belmont64. В общем, процессы будут запущены только на машинах из списка машин после -MPDLOC-.
Это предварительный и чрезвычайно грубый способ выбрать размещение MPI-процессов для mpirun. В дальнейшем мы предполагаем использовать проект mpd как среду для исследования интерфейсов между расписаниями задач, менеджерами процессов, параллельными приложениями (особенно в динамических средах MPI-2) и командами пользователя.
mpirun -np 32 hostname | sort | uniqЭта команда запустит 32 экземпляра hostname, предполагая наличие /bin в Вашем пути поиска, независимо от того, сколько здесь имеется mpd. Другие процессы будут запускаться по кругу в кольце mpd.
Одно и то же кольцо mpd может использоваться для запуска множества задач с множества консолей в одно и то же время. При обычных условиях необходимо, чтобы для каждого пользователя существовало отдельное кольцо mpd. Для целей безопасности каждый пользователь должен иметь в своем домашнем каталоге доступный для чтения только ему файл `.mpdpasswd', содержащий пароль. Файл будет считываться при запуске mpd. Только mpd, знающие этот пароль, могут войти в кольцо существующих mpd.
Новой является возможность конфигурировать систему mpd, чтобы демоны могли
загружаться как root. Чтобы сделать это после конфигурирования mpich
Вам нужно повторно переконфигурировать ее в каталоге mpid/mpd с опцией
enable-root и пересобрать. Тогда mpirun будет инсталлирован
как программа setuid. Несколько пользователей могут использовать одно и то
же множество mpd, которые были запущены root, несмотря на то, что их
mpirun, менеджеры и клиенты будут запущены от имени пользователя,
вызвавшего mpirun.
% mpirunОпция -1 позволяет Вам, например, запускать mpirun на ``входном узле'' или ``узле разработки'' в Вашем кластере, но запускать все процессы приложения на ``вычислительных узлах''.
Использование: mpirun <аргументы> программа <аргументы программы>
Аргументы:
-np число_процессов_для_запуска (обязательные 2 первых аргумента)
-s (закрыть stdin; может запускаться в фоновом режиме без ввода с терминала)
-g размер_группы (запускает размер_группы процессов на одном mpd)
-m файл_machine (имя файла возможных машин)
-l (метки строк; уникальные метки для вывода от каждого процесса)
-1 (не запускать первый процесс локально)
-y (запускать как задачу для Myrinet)
Программа mpirun запускается в отдельном (не-MPI) процессе, который создает
процессы MPI, выполняющие определенные исполняемые файлы. Он служит единым
процессом, представляющим параллельные процессы MPI, чтобы сигналы, посылаемые
ему, такие как Z и C, передавались через систему демонов MPD ко всем
процессам. Потоки вывода stdout и stderr от процессов MPI
возвращаются в stdout и stderr для mpirun. Как и в большинстве
реализаций MPI, stdin от mpirun направляется в stdin процесса
MPI с рангом 0.
mpirun -tv <другие аргументы>а для устройства ch_p4mpd Вы используете
totalview mpirun <другие аргументы>Здесь mpirun представляет параллельную задачу как целое. TotalView содержит специальные команды для вывода очередей сообщений в процессе MPI. Существует возможность присоединить TotalView к набору процессов, которые уже запущены параллельно; его также можно присоединить к одному из процессов.
donner% mpigdb -np 5 cpi # по умолчанию вывод от всехЕсли отлаживаемый процесс зависает (нет приглашения mpigdb) из-за ожидания текущим процессом действий другого процесса, ctl-C вызовет меню, позволяющее Вам переключать процессы. mpigdb не так развит, как TotalView, но зачастую полезнее и свободно распространяется с mpich.
(mpigdb) b 29 # установить точку останова для
# всех
0-4: Breakpoint 1 at 0x8049e93: file cpi.c, line 29.
(mpigdb)r # запустить все 0-4:
Starting program:/home/lusk/mpich/examples/basic/cpi
0: Breakpoint 1, main (argc=1, argv=0xbffffa84) at cpi.c:29
1-4: Breakpoint 1, main (argc=1, argv=0xbffffa74) at cpi.c:29
0-4: 29 n = 0; # все достигли точки останова
(mpigdb)n # пошаговый режим для всех
0: 38 if (n==0) n=100; else n=0;
1-4: 42 MPI_Bcast (&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
(mpigdb) z0 # stdin только для процесса
# ранга 0
(mpigdb)n # пошаговый режим процесса
# ранга 0
0: 40 startwtime = MPI_Wtime ();
(mpigdb)n # до останова
0: 42 MPI_Bcast (&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
(mpigdb)z # stdin возвращен для всех
# процессов
(mpigdb)n # пошаговый режим для всех
... # до интересующего места
(mpigdb) n
0-4: 52 x = h * ( (double)i0.5);
(mpigdb) px # вывод от всех процессов
0: $1 = 0.0050000000000000001 # значение x процесса 0
1: $1 = 0.014999999999999999 # значение x процесса 1
2: $1 = 0.025000000000000001 # значение x процесса 2
3: $1 = 0.035000000000000003 # значение x процесса 3
4: $1 = 0.044999999999999998 # значение x процесса 4
(mpigdb)c # продолжить все
0: pi is approximately 3.141600986923, Error is 0.000008333333
04: Program exited normally.
(mpigdb)q # выход
donner%
setenv MPI_GLOBMEMSIZE 8388608Большие сообщения передаются частями, так что MPI_GLOBMEMSIZE не может ограничить максимальный размер сообщения, но его увеличение может улучшить производительность. Помните, что системы могут ограничивать количество доступной разделяемой памяти.
По умолчанию, mpich ограничивает количество процессов для устройства
ch_shmem числом 32, несмотря на то, что во время конфигурирования было
определено, что машина может иметь больше процессов. Вы можете переопределить
этот предел, установив переменную окружения PROCESSOR_COUNT в
максимальное число процессов, которое Вы хотите запустить, а затем
переконфигурировать и пересобрать mpich.
Устройство globus2 требует, чтобы на
компьютерах, где будут создаваться процессы, были запущены специальные серверы.
В нашей дискуссии об использовании устройства globus2 мы предполагаем, что
будем использовать globus2 на наборе машин, где уже установлены и запущены
различные серверы Globus. Такой набор часто определяется как ``вычислительная
решетка'', например NASA's Information Power Grid (IPG). Если это возможно, мы
рекомендуем Вам использовать устройство globus2 для таких сред. Если Вы
хотите использовать устройство globus2 в других ситуациях, пожалуйста,
пришлите письмо на developers@globus.org. Детали о запуске программ MPI с
использованием устройства globus2 в вычислительных решетках на основе
Globus приведены в приложении С.
IBM SP. Использование mpirun на компьютерах IBM SP может оказаться
сложным, поскольку существует много различных (и часто взаимоисключающих)
способов запуска программ на них. mpirun, распространяемый вместе с
mpich, работает на системах, использующих планировщик Argonne (иногда
называемый EASY) и в системах, использующих предустановленные величины для
менеджера ресурсов (т.е. тех, которые не требуют от пользователя выбора
RMPOOL). Если у Вас есть проблемы с запуском программ mpich,
попробуйте следовать правилам инсталляции для запуска программы MPL или POE
(при использовании устройства ch_mpl) или для запуска p4 (при
использовании устройства ch_p4).
Ожидается, что mpich будет и далее накапливать процедуры расширения различных направлений. Мы собираем их в библиотеке, названной mpe, от MultiProcessor Environment (многопроцессорная среда).
В настоящее время главными компонентами MPE являются
Простейшим способом генерации log-файлов является связывание Вашей программы со специальной библиотекой MPE, которая использует возможности профилирования MPI перехватывать все вызовы MPI в приложении.
Вы можете создать настраиваемые log-файлы для просмотра с помощью вызовов
различных процедур регистрации MPE. О деталях смотрите man-страницы
MPE. Пример приведен в разд. 5.5.3.
Каждый из этих форматов log-файлов распознается одной или несколькими
программами визуализации. Формат ALOG распознается программой nupshot. Формат
CLOG распознается программой nupshot и jumpshot, базирующейся на
Java. SLOG и Jumpshot-3 способны обрабатывать log-файлы, содержащие
гигабайты данных.
Процедуры управления | |
MPE_Open_graphics | (совместно) открывает дисплей X |
MPE_Close_graphics | Закрывает графическое устройство X11 |
MPE_Update | Обновляет дисплей X11 |
Процедуры вывода | |
MPE_Draw_point | рисует точку на дисплее X |
MPE_Draw_points | рисует точки на дисплее X |
MPE_Draw_line | Рисует линию на дисплее X11 |
MPE_Draw_circle | Рисует окружность |
MPE_Fill_rectangle | Рисует закрашенный прямоугольник на дисплее X11 |
MPE_Draw_logic | Устанавливает логическую операцию для новых пикселей |
MPE_Line_thinkness | Устанавливает толщину линий |
MPE_Make_color_array | Создает массив индексов цветов |
MPE_Num_colors | Возвращает число доступных цветов |
MPE_Add_RGB_color | Добавляет новый цвет |
Процедуры ввода | |
MPE_Get_mouse_press | Возвращает текущие координаты мыши |
MPE_Get_drag_region | Возвращает прямоугольную область |
makeчтобы увидеть параллельный алгоритм вычисления Mandelbrot, который демонстрирует некоторые возможности графической библиотеки MPE.
mpirun -np 4 pmandel
Стандарт MPI упрощает для пользователей определение процедур, вызываемых при
обнаружении ошибки MPI. Зачастую то, что Вы хотите получить, это чтобы программа
вызывала отладчик, чтобы Вы могли диагностировать проблему немедленно. В
некоторых средах сделать это позволяет Вам обработчик ошибок в
MPE_Errors_call_dbx_in_xterm. В дополнение к этому Вы можете
скомпилировать библиотеку MPE с вложенным отладочным кодом. (См. опцию
configure с названием -mpedbg).
int eventID_begin, eventID_end;Log-файл, генерируемый этим кодом, будет отмечать процедуры MPI внутри процедуры MyAmult зелено-голубым прямоугольником. Цвет, использованный в этом коде выбран из файла rgb.txt, предоставленного инсталляцией сервера X, т.е. `rgb.txt' находится в каталоге `/usr/X11R6/lib/X11' в Linux.
...
eventID_begin = MPE_Log_get_event_number ();
eventID_end = MPE_Log_get_event_number ();
...
MPE_Describe_state ( eventID_begin, eventID_end, ``Amult'', ``bluegreen'' );
...
MyAmult ( Matrix m, Vector v )
/* Записывает стартовое событие вместе с размером матрицы */
MPE_Log_event ( eventID_begin, m->n, (char *)0 );
... Код Amult, включая вызовы MPI ...
MPE_Log_event ( eventID_end, 0, (char *)0 );
Если бибилотека регистрации MPE `liblmpe.a' не связаны с программой
пользователя, необходимо использовать перед и после всех вызовов MPE процедуры
MPE_Init_log и MPE_Finish_log. Программы-примеры
`cpilog.c' и `fpi.f' для иллюстрации использования этих процедур MPE
находятся в каталоге исходных кодов MPE `contrib/test' или в установленном
каталоге `share/examples'.
Он показывает параллельные линии времени с состояниями процессов, подобно paraGraph [12]. Вид может увеличиваться или уменьшаться по горизонтали или вертикали, центрироваться на любой точке дисплея, выбранной мышью. На рис. 2 среднее окно происходит от увеличения верхнего окна в выбранной точке, чтобы увидеть больше деталей. Нижнее окно показывает гистограмму продолжительности состояний, с несколькими настраиваемыми параметрами.
Nupshot - это версия upshot, которая быстрее, но
требует устаревшей версии Tcl/Tk. Из-за этих ограничения Nupshot не
создается по умолчанию в текущей версии MPE.
О Jumpshot-2 см. [17] для дополнительной информации. Для
Jumpshot-3 см. файл
`mpe/viewers/jumpshot-3/doc/TourStepByStep.pdf' для
краткого введения.
По мере увеличения размера log-файла уменьшается
производительность Jumpshot-2, что может привести к зависанию
Jumpshot-2 во время чтения файла. Трудно определить, в какой момент происходит
зависание, но мы наблюдали это при файлах менее 10Mb. Если размер файла CLOG
около 4 Mb, производительность Jumpshot-2 начинает заметно снижаться. Это
текущие исследовательский результат, который получается из-за попытки сделать
программу, основанную на Java, значительно более расширяемой. Результаты первой
итерации этих попыток - это SLOG, поддерживающий расширяемую регистрацию
данных и Jumpshot-3, который читает SLOG.
int MPI_Xxx (...)Мы создаем эти процедуры только написанием частей ``сделать что-либо'', схематически, а затем обрамляем их автоматически вызовами PMPI_. Поэтому генерация профилирующих библиотек очень проста. См. также файл README в каталоге `mpe/profiling/wrappergen' или приложение А.
![]()
сделать что-либо для профилирующей библиотеки
retcode = PMPI_Xxx ( . . . );
сделать что-либо еще для профилирующей библиотеки
return retcode;
![]()
Примеры написания заготовок обрамления находятся в подкаталоге
`mpe/profiling/lib'. Здесь Вы найдете исходные коды (файлы .w) для
создания трех профилирующих библиотек, описанных выше. Пример make-файла для
их испытания находится в каталоге `mpe/profiling/examples'.
Несколько примеров определений обрамления представлены в mpich:
Вы можете встраивать эти обрамления вручную в Ваше приложение, что потребует трех этапов в построении Вашего приложения:
$ (CLINKER) <объектные файлы приложения...>![]()
<объектный код обрамления>![]()
<другие необходимые библиотеки (-lmpe)>![]()
<профилирующая бибилотека mpi (-lpmpich)>![]()
<стандартная библиотека mpi (-lmpi)>
Makefile.timing - оболочка timingДля использования этих фрагментов make-файлов:
Makefile.logging - оболочка logging
Makefile.vismess - оболочка animated messages
Makefile.allprof - оболочка timing, logging, and vismess
$(PROF_OBJ)
myapp: myapp.o $(PROF_OBJ)
CFLAGS = -O $(PROF_FLG)
$(CLINKER) myapp.o -L$(MPIR_HOME)/lib $(PROF_LIB) -lmpich
rm -f *.o * myapp $(PROF_CLN)
include $(MPIR_HOME)/mpe/profiling/lib/Makefile.logging
MPE_Errors_call_dbx_in_xtermЭти обработчики ошибок находятся в каталоге MPE. Опция configure ( -mpedbg) включает эти обработчики ошибок в стандартные библиотеки MPI, и разрешает аргумент командной строки -mpedbg, чтобы сделать MPE_Errors_call_dbx_in_xterm обработчиком ошибок по умолчанию (вместо
MPE_Signals_call_debugger
mpirun -dbg=<name of debugger> -np 2 programзапускает program на двух машинах с запущенным выбранным отладчиком на локальной машине. Существует пять скриптов отладки, вложенных в mpich, которые будут находиться в каталоге `mpich/bin' после выполнения make. Они называются mpirun_dbg.%d, где %d может заменяться на dbx, ddd, gdb, totalview, xxgdb. Соответствующий скрипт вызывается при использовании опции -dbg вместе с mpirun.
mpirun -np 2 a.out -mpiversion
mpirun -np 10 myprog -p4dbg 20 -p4rdbg 20приведет к выводу во время выполнения в стандартный вывод информации о трассировке программы на уровне 20. Для получения информации о том, что выводится на конкретном уровне, см. руководство пользователя p4 [2].
Если в командной строке указано -p4norem, mpirun не будет реально запускать процессы. Главный процесс выводит сообщение, подсказывающее пользователю, что он может сделать. Целью этой опции является возможность позволить пользователю, например, запустить удаленные процессы под его любимым отладчиком. Опция имеет смысл лишь тогда, когда процессы запускаются удаленно, например, в сети рабочих станций. Отметьте, что это аргумент программы, а не mpirun. Например, для запуска myprog таким способом, используйте
mpirun -np 4 myprog -p4noremДля запуска cpi двумя процессами, причем второй процесс выполняется под отладчиком, Вам нужно ввести команду вида
mpirun -np 2 cpi -p4noremна первой машине и
ожидание процесса с машины shakey.mcs.anl.gov:
/home/me/mpich/examples/basic/cpi sys2.foo.edu 38357p4amslave
% gdb cpi
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type ``show copying'' to see the conditions.
There is absolutely no warranty for GDB. Type ``show warranty'' for details.
This GDB was configured as ``i586-mandrake-linux''...
(gdb) run sys2.foo.edu 38357 -p4amslave
Запуск прграммы: /home/me/mpich/examples/basic/cpi sys2.foo.edu 38357 -p4amslave
mpirun -np 4 myprog -p4wdir myrundir
mpirun -echo -np 4 myprog -mpiversion -p4dbg 10 x y zто -echo -np 4 интерпретируется mpirun (отображение для mpirun и запуск 4 процессов), -mpiversion интерпретируется mpich (каждый процесс выводит информацию о конфигурации), -p4dbg 10 интерпретируется устройством p4, если Ваша версия сконфигурирована с -device=ch_p4 (устанавливает уровень отладки p4 в 10), а x, y, z пропускаются к приложению. К тому же, MPI_Init обрезает все аргументы, не принадлежащие приложению, так что после вызова MPI_Init в Вашей программе на С вектор аргументов argv содержит лишь
myprog x y zи Ваша программа может обрабатывать свои собственные аргументы командной строки. Отметьте, что массив аргументов для программ Фортрана и Фортрана 77 будет содержать команды mpich, поскольку в Фортране не определен стандартный механизм для доступа или модификации командной строки. обычным способом.
Не существует возможности предоставить различным процессам различные аргументы
командной строки.
mpirun -dbg=gdbили
mpirun -dbg=gdb a.outвызывает скрипт mpirun_dbg.gdb, находящийся в каталоге `mpich/bin'. Этот скрипт захватывает правильные аргументы, вызывает отладчик gdb, и запускает первый процесс под gdb, если это возможно. Существует четыре скрипта отладчика; gdb, xxgdb, ddd и totalview. Их иногда необходимо исправлять, что зависит от Вашей системы. Существует также скрипт отладчика dbx, который должен быть отредактирован, поскольку команды dbx различаются для версий. Вы можете также использовать эту опцию для вызова другого отладчика; например, -dbg=mydebug. Все, что Вам необходимо, это написать скрипт `mpirun_dbg.mydebug', который совпадает по формату с поставляемыми файлами скриптов, и поместить его в каталог `mpich/bin'. Дополнительная информация по использованию отладчика Totalview с mpich приведена в разделе 7.
mpirun -np 4 a.out -mpedbgЕсли Вы не уверены, что Ваш mpich поддерживает эту возможность, Вы можете использовать
dbx a.out 1234или
dbxгде 1234 - идентификатор процесса. Можно также присоединить к работающей программе отладчик TotalView (см. разд. 7.3 ниже).pid 1234 a.out
Поскольку Unix не связывает сигналы в цепь, существует возможность, что различные пакеты могут использовать те же самые сигналы, вызывая ошибки в программе. Например, по умолчанию, устройство ch_p4 использует SIGUSR1; некоторые пакеты потоков также используют SIGUSR1. Если у Вас возникла такая ситуация, см. руководство по инсталляции mpich об информации, как выбрать другие сигналы для использования в mpich.
В некоторых случаях, Вы можете изменить сигнал перед вызовом MPI_Init. В
этих случаях Ваш обработчик сигналов будет вызван после того, как реализация
mpich отреагирует на сигнал. Например, если Вы хотите изменить поведение
SIGSEGV для вывода сообщения, Вы можете установить этот обработчик
сообщения перед вызовом MPI_Init. Для устройств типа ch_p4,
которые обрабатывают SIGSEGV, это вызовет реакцию на Ваш сигнал после
того, как его обработает mpich.
mpirun -dbg=totalview -np 4 cpiTotalView запустится и Вы можете начать выполнение программы, нажав `G'. Появится окно с вопросом, хотите ли Вы остановить процессы после выполнения MPI_Init. Вы можете посчитать более удобным ответить ``нет'' и установить свою собственную точку останова после MPI_Init (см. разд. 7.4). Таким образом, после остановки процесс будет находиться в некоторой строке программы вместо неопределенного места внутри MPI_Init.
Вы переключаетесь от просмотра одного процесса к другому с помощью стрелок в верхнем правом углу главного окна, или непосредственным выбором (левой кнопкой) процесса в корневом окне для фокусировки существующего окна на этом процессе, или углублением (правой кнопкой) через процесс в корневом окне, чтобы открыть новое окно для выбранного процесса. Все ``быстрые клавиши'' указаны в меню, вызываемом средней кнопкой. Команды в основном знакомые. Специфической для MPI является команда `m', которая показывает очереди сообщений, ассоциированые с процессом.
Заметьте также, что при использовании функции MPI-2 MPI_Comm_set_name
для коммуникатора,
TotalView будет показывать это имя, всякий раз показывая
информацию о коммуникаторе, позволяя легко определить каждый коммуникатор.
Пожалуйста, укажите:
uname -aдля Вашей системы. Если Вы работаете на системе SGI, укажите также вывод
hinv
f77 -g -o secondf secondf.o -L/usr/local/mpich/lib/sun4/ch_p4 -lmpichО: Эта программа f77 не принимает команду -L для установки пути поиска библиотек. Некоторые системы предлагают скрипт shell для f77, очень ограниченный по своим возможностям. Чтобы обойти это, используйте полный путь к библиотекам вместо опции -L:
invalid option -L/usr/local/mpich/lib/sun4/ch_p4
ld: -lmpich: No such file or directory
f77 -g -o secondf secondf.o /usr/local/mpich/lib/sun4/ch_p4/libmpich.aНачиная с версии mpich 1.2.0, configure для mpich пытается определить корректную опцию для определения путей библиотек для компилятора Фортрана. Если Вы обнаружили, что configure для mpich делает ошибки, пожалуйста сообщите о них по адресу mpi-bugs@mcs.anl.gov.
f77 -c secondf.fС программами на С этого не происходит.
secondf.f:
MAIN main:
f77 -o secondf secondf.o -L/home/mpich/lib/solaris/ch_shmem -lmpich
Undefined first referenced
symbol in file
getdomainname /home/mpich/lib/solaris/ch_shmem/libmpi.a (shmempriv.o)
ld: fatal: Symbol referencing errors. No output written to secondf
О: Это означает, что Ваш компилятор С предоставляет Вам библиотеки, которые не может предоставить компилятор Фортрана. Найдите опции для компиляторов С и Фортрана, указывающие, какие из бибилотек используются (или же Вы можете обнаружить такие опции, как -dryrun, которая покажет команды, используемые компилятором). Создайте простую программу на С или Фортране и сравните использованные библиотеки (обычно в командной строке ld). Попробуйте те, которые представлены для компилятора С, но отсутствуют для компилятора Фортран.
Error: foo.f, line 30: Inconsistent datatype for argument 1 in MPI_SENDО: Фортран требует, чтобы в двух вызовах одной и той же процедуры типы аргументов совпадали. Т.е., если Вы вызываете MPI_SEND с буфером REAL в качестве первого аргумента, то вызов его с буфером INTEGER в качестве первого аргумента компилятор Фортрана воспринимает как ошибку. Некоторые компиляторы Фортрана 77 могут пропустить это; большинство компиляторов Фортран 90 или Фортран 95 проверяют это. Существует два решения. Одно из них - использование модуля MPI (в версии с ``аргументами по выбору'': используйте опцию -choicemod для mpif90); другим является указание опции компилятору Фортрана 90, допускающей несовпадение аргументов. Использование модуля MPI более предпочтительно. Пользователи Фортрана 77 могут иногда увидеть подобные сообщения, особенно в последних версиях g77. Опция -Wno-globals запрещает появление этих предупреждений.
О: Возможно в Вашей системе процедуры С и Фортрана несовместимы (например, при использовании gcc и фирменного компилятора Фортрана). Если Вы не планируете использование Фортрана, простейший способ исправить это - перестроить все с опцией -nof77 для configure.
Вы также должны попытаться сделать Ваш компилятор на С совместимым с компилятором Фортрана.
Одной из простых, но неэлегантных возможностей является использование f2c для преобразования Фортрана в С с последующей компиляцией компилятором С. Если Вы выбрали этот способ, помните, что каждая процедура Фортрана должна компилироваться с помощью f2c и компилятора С.
С другой стороны, Вы можете использовать различные опции (см. страницы man для Ваших компиляторов), чтобы увидеть, какие библиотеки они добавляют при компоновке. Добавьте эти библиотеки в строку компоновки другого компилятора. Если Вы обнаружили работающий набор библиотек, отредактируйте соответствующие скрипты (например, mpicc). mpich пытается найти все необходимые библиотеки, но это не всегда получается.
cc -g -o testtypes testtypes.o -L/usr/local/mpich/lib/solaris/ch_p4 -lmpich
-lsocket -lnsl -lthreadld: warning: symbol `_defaultstkcache' has differing sizes:
О: Это ошибка в Solaris 2.3, исправленная в Solaris 2.4. Должна существовать заплатка для Solaris 2.3; свяжитесь с Sun для более полной информации.(file /usr/lib/libthread.so value=0x20; file /usr/lib/libaio.so
value=0x8);
/usr/lib/libthread.so definition taken
cc -o pgm pgm.o -L/usr/local/mpich/lib/hpux/ch_p4 -lmpich -lmО: Вам нужна опция компоновки -lV3. Устройство p4 на HP использует сигналы System V; они реализуются библиотекой `V3'.
/bin/ld: Unsatisfied symbols:
sigrelse (code)
sigset (code)
sighold (code)
*** Error code 1
Linking:О: Это ошибка в компиляторе pgf77 (вызванная ошибкой в команде ld для Linux). Вы можете исправить это либо добавлением -lpmpich к строке компоновки, либо изменением `mpif.h', чтобы удалить выражения external pmpi_wtime, pmpi_wtick.
foo.o (.data+0x0): undefined reference to `pmpi_wtime_'
configure для mpich
пытается определить, могут ли pmpi_wtime и pmpi_wtick быть
определены в `mpif.h' и удалает их, если возникает проблема. Если это
произошло и Вы используете pmpi_wtime или pmpi_wtick в Вашей
программе, Вы должны определить их как функции, возвращающие значения двойной
точности.
mpirun -np 2 cpiпоявляется сообщение об ошибке или программа зависает.
О: В некоторых системах, таких, как IBM SP, существует много взаимно исключающих способов запуска параллельных программ; каждая система выбирает способ, подходящий для нее. Скрипт mpirun пробует наиболее общие методы, но может сделать неправильный выбор. Используйте опции -v или -t для mpirun, чтобы увидеть, как он пытается запустить программу, а затем сравните это со специфическими инструкциями для Вашей системы. Вам может понадобиться адаптировать код mpirun для собственных нужд. См. также следующий вопрос.
Используйте : mpirun опции<программа> <узлы выполнения>или<аргументы>
mpirun опции<схема>О: В Вашем пути поиска присутствует команда mpirun, не принадлежащая mpich. Выполните команду
which mpirunчтобы увидеть, какая команда mpirun была действительно найдена. Решением будет либо смена порядка каталогов в пути поиска, чтобы поместить версию mpirun для mpich первой, лиоб определить псевдоним mpirun, использующий абсолютный путь. Например, в csh shell, Вы можете выполнить
alias mpirun /usr/local/mpich/bin/mpirunчтобы установить mpirun на версию для mpich.
p4_error: latest msg from perror: Слишком много открытых файловО: Существует ограничение на количество открытых дескрипторов файла. На некоторых системах Вы можете увеличить это ограничение самостоятельно; на других Вам может помочь системный администратор. Вы можете экспериментировать с безопасным сервером, но это не полное решение. Сейчас мы работаем над более расширяемым механизмом запуска для новой реализации.
mpirunПроблем при запуске одного процесса нет.np 2 cpi
/home/me/cpi: ошибка загрузки разделяемых библиотек: libcxa.so.1: невозможно
открыть разделяемый объектный файл : Файл или каталог не существует
О: Это означает, что некоторые разделяемые библиотеки, используемые системой, не обнаруживаются удаленными процессорами. Существует две возможности:
Многие компоновщики предоставляют способ определения пути поиска для разделяемых библиотек. Трудность состоит в (а) передаче этой команды программе-компоновщику и (b) определении всех необходимых библиотек.
Например, в системах на Linux, команда компоновщика для определения пути поиска разделяемых библиотек - это -rpath path, т.е. -rpath /usr/lib:/usr/local/lib. Чтобы передать эту команду компоновщику посредством компилятора Intel С icc, используется команда -Qoption,link,-rpath,path. По умолчанию, компоновщик Linux проверяет каталог `/usr/lib' и каталоги, определенные в переменной окружения LD_LIBRARY_PATH. Поэтому, чтобы заставить компоновщик включить путь для разделяемых библиотек, Вы можете использовать
mpicc -o cpi cpi -Qoption,link,-rpath,$LD_LIBRARY_PATH:/usr/libЕсли это сработает, то попробуйте изменить значение LDFLAGS в скрипте mpicc, чтобы включить эту опцию.
К сожалению, каждый компилятор использует различные способы передачи этих аргументов компоновщику, а каждый компоновщик использует различный набор аргументов для определения пути поиска разделяемых библиотек. Вам может понадобиться просмотреть документацию Вашей системы об этих опциях.
ld.so.1: cpilog: fatal: libX11.so.4: невозможно открыть файл: errno 2О: Версия X11, обнаруженная configure, не установлена корректно. Это обычная проблема для систем Sun/Solaris. Возможно, что Ваши машины на Solaris выполняют слегка различающиеся версии. Вы можете попробовать статическую компоновку (-Bstatic на Solaris).
С другой стороны, можно попробовать добавить следующие строки в Ваш `.login' (предполагая C shell):
setenv OPENWINHOME /usr/openwin(Вы можете прежде проконсультироваться с Вашим системным администратором, чтобы убедиться, что пути в Вашей системе правильны). Убедитесь, что Вы добавили их перед строками вида
setenv LD_LIBRARY_PATH /opt/SUNWspro/lib:/usr/openwin/lib
if ($?USER == 0 || $?prompt == 0) exit
О: Если Вы открыли файл перед вызовом MPI_INIT, поведение MPI (не только mpich-реализации MPI) неизвестно. На устройстве ch_p4 только нулевой процесс (в MPI_COMM_WORLD) может иметь открытые файлы; другие процессы не могут открывать файлы. Переместите операции, которые открывают файлы и взаимодействуют с внешним миром после MPI_INIT (и перед MPI_FINALIZE).
О: Это может быть вызвано несколькими проблемами. На системах с динамически компонуемыми исполняемыми файлами это может быть вызвано проблемами файловой системы, одновременно получившей запросы от многих процессоров о динамически компонуемых частях исполняемых файлов (это отмечено как проблема с некоторыми реализациями DFS). Вы можете попробовать использовать статическую компоновку Вашего приложения.
В сетях рабочих станций долгие времена запуска могут быть из-за времени, используемого для запуска удаленных процессов; см. обсуждение безопасного сервера в разд. 3.2.3 для устройства ch_p4 или рассмотрите использование устройства ch_p4mpd.
О: Если Вы видите что-нибудь подобное
% mpirun -np 2 cpiили
Нет прав доступа.
% mpirun -np 2 cpiпри использовании устройства ch_p4, это возможно означает, что у Вас нет прав на использование rsh для запуска процессов. Для проверки можно использовать скрипт tstmachines. Попробуйте выполнить
сокет: ошибка протокола при настройке линии
tstmachinesЕсли это окончилось неудачей, Вам могут понадобиться либо файлы `.rhosts' или
Если Ваши системные правила позволяют использовать файл `.rhosts', выполните следующее:
host usernameНапример, если Ваше имя пользователя doe и Вы хотите использовать машины a.our.org и b.our.org, то Ваш файл `.rhosts' будет содержать
a.our.org doeПомните об использовании полных имен машин (некоторые системы этого требуют).
b.our.org doe
В сетях, где использование файлов `.rhosts' не допускается, Вам нужно использовать безопасный сервер для запуска задачи на машинах, которые не являются доверенными к машине, с которой Вы инициируете задачу.
Наконец, Вам может понадобиться использовать нестандартную команду rsh внутри mpich. mpich должен быть переконфигурирован с опцией -rsh=command_name, а также, возможно, с -rshnol, если команда удаленной shell не поддерживает аргумент -l. В системах, использующих Kerberos и/или AFS это может понадобиться. См. разд. в руководстве по инсталляции об использовании безопасной shell ssh.
Другим источником сообщения ``Permission denied.'' является то, что Вы использовали команду su для смены Вашего идентификатора пользователя. На некоторых системах устройство ch_p4 не будет работать в такой ситуации. Зарегистрируйтесь обычным способом и попробуйте еще раз.
О: Если Вы видите что-либо подобное
% mpirun -np 2 cpiэто означает, что Вы не можете запустить удаленную задачу командой удаленной shell на определенной машине, даже если Вы можете сделать это обычным способом. Это может означать, что назначенная машина занята, не имеет свободной памяти или не может создать новый процесс. Страница man для rshd даст Вам подробную информацию. Единственным способом исправить это является просьба к Вашему системному администратору проверить состояние машины, которая выдает это сообщение.
Попробуйте еще раз.
stty: TCGETS: Операция не поддерживается сокетомили
stty: tcgetattr: Нет прав доступаили
stty: Невозможно присвоить требуемый адресО: Это означает, что один из Ваших скриптов загрузки (т.е. `.login' или `.cshrc' или `.profile') имеет незащищенное использование программ stty или tset. Для пользователей C shell типичным исправлением является проверка инициализации переменных TERM или PROMPT. Например,
if ($?TERM) thenДругим решением будет добавление
eval `tset -s -e^\?
-k^U
-Q -I $TERM`
endif
if ($?USER == 0 || $?prompt == 0) exitв начало Вашего файла `.cshrc' (но после любого кода, который настраивает среду выполнения, такую, как пути к библиотекам (т.е., LD_LIBRARY_PATH)).
О: Это означает, что один из Ваших скриптов загрузки (т.е. `.login', или `.cshrc', или `.profile', или `.bashrc') имеет незащищенное использование некоторых программ, которые генерируют вывод, таких, как fortune или даже echo. Для пользователей C shell типичным исправлением является проверка инициализации переменных TERM или PROMPT. Например,
if ($?TERM) thenДругим решением будет добавление
fortune
endif
if ($?USER == 0 || $?prompt == 0) exitв начало Вашего файла `.cshrc' (но после любого кода, который настраивает среду выполнения, такую, как пути к библиотекам (т.е., LD_LIBRARY_PATH)).
poll: ошибка протокола во время создания связиО: Вы можете увидеть это сообщение, если Вы пытаетесь запустить слишком много программ MPI за короткий период времени. Например, в Linux при использовании устройства ch_p4 (без безопасного сервера или ssh), mpich может использовать для запуска процессов MPI rsh. В зависимости от определенного дистрибутива Linux и его версии, может быть установлен лимит на минимум 40 процессов в минуту. При запуске набора тестов mpich или запуске коротких параллельных задач через скрипт возможно превышение этого лимита. Чтобы исправить это, Вы можете сделать следующее:
shell stream tcp nowait root /etc/tcpd2 in.rshdна
shell stream tcp nowait.200 root /etc/tcpd2 in.rshd
arch: Файл или каталог не существуетО: Обычно это проблема в Вашем файле `.cshrc'. Попробуйте команду shell
which hostnameЕсли Вы видите тот же самый странный вывод, то Ваша проблема в Вашем файле `.cshrc'. У Вас имеется некоторый код в Вашем файле `.cshrc', который предполагает, что Ваша shell присоединена к терминалу.
p0_4652: p4_error: ошибка открытия в файле procgroup (procgroup): 0О: Это указывает, что программа mpirun не может создать требуемый входной файл, необходимый для запуска. Наиболее возможной причиной является то, что команда mpirun пытается запустить программу, построенную на устройстве ch_p4 для устройства с разделяемой памятью (ch_shmem) или другого.
Попробуйте следующее:
Запустите программу с использованием mpirun и аргумента -t:
mpirun -t -np 1 fooЭто покажет, что mpirun должен сделать (-t - это тестирование). Вы также можете использовать аргумент -echo, чтобы точно знать, что выполняет mpirun:
mpirun -echo -np 1 fooВ зависимости от выбора, сделанного при инсталляции mpich, Вы должны выбрать версию mpirun для определенного устройства вместо ``общей'' версии. Мы рекомендуем, чтобы префикс инсталляции включал имя устройства, например, `/usr/local/mpich/solaris/ch_p4'.
icy% mpirun -np 2 cpi -mpiversionО: Ваша проблема в том, что программа удаленной shell - это не `/usr/lib/rsh'. Попробуйте следующее:
icy: icy: Файл или каталог не существует
which rshВозможно, в Вашем пути `/usr/lib' указан раньше `/usr/ucb' или `/usr/bin'. Это указывает на ``ограниченную'' shell вместо ``удаленной'' shell. Простейшим исправлением является удаление `/usr/lib' из Вашего пути (некоторым людям это нужно); иначе, Вы можете переместить его на место после каталога, содержащего ``удаленную'' shell rsh.
ls /usr/*/rsh
Другим способом будет добавление ссылки на удаленную shell в каталог, более ранний в пути поиска. Например, у меня `/home/gropp/bin/solaris' стоит раньше в пути поиска, тогда я могу использовать здесь
cd /home/gropp/bin/solaris(предполагая, что удаленная shell - это `/usr/bin/rsh').
ln -s /usr/bin/rsh rsh
пробуем обычную rshО: Вы используете версию удаленной shell, которая не поддерживает аргумент -l. Переконфигурируйте mpich с -rshnol и пересоберите. Вы можете почувствовать некоторые неудобства при попытке запуска на системах, где у Вас другое имя пользователя. Вы можете также попробовать использовать ssh.
ld.so: warning: /usr/lib/libc.so.1.8 имеет более раннюю версию,О: Вы пытаетесь работать на машине с устаревшей версией базовой библиотеки С. К сожалению, некоторые производители не выпускают совместимых разделяемых библиотек между мелкими (или исправленными) версиями их программного обеспечения. Вы должны попросить системного администратора привести все машины к одному и тому же уровню установленного программного обеспечения.
хотя ожидалось 9
Временным исправлением, которое Вы можете использовать, является добавление опции времени компоновки, заменяющей динамическую компоновку системных библиотек статической. На некоторых рабочих станциях Sun это опция -Bstatic.
О: Вначале проверьте, работает ли rsh вообще. Например, если у Вас есть рабочие станции w1 и w2, и Вы работаете на w1, попробуйте
rsh w2 trueЭто должно завершиться очень быстро. Если этого не происходит, попробуйте
rsh w1 true(т.е. используйте rsh для запуска на той же системе, где Вы работаете). Если Вы получили
krcmd: No ticket file (tf_util)то в Вашей системе неправильно установлена rsh. Эта проблема наблюдается в некоторых системах FreeBSD. Попросите системного администратора исправить проблему (часто неправильный набор программ rsh/rshd).
rsh: внимание, используется стандартная rsh: невозможно получить данные
аутентификации Kerberos.
больше пользователей, чем очередей сообщенийО: Это означает, что Вы пробуете запустить mpich в одном режиме, а он сконфигурирован в для работы в другом. В частности, Вы определяете в Вашем файле p4 procgroup, что некоторые процессы будут находиться в разделяемой памяти на определенной машине, помещая либо число, большее 0, в первую строку (где оно означает число локальных процессов вместе с оригинальным), либо число, большее 1, в любую ииз следующих строк (где оно указывает общее число процессов, разделяющих память на этой машине). Вы должны либо изменить Ваш файл procgroup, чтобы указать только один процесс в строке, или переконфигурировать mpich с помощью
configureчто перенастроит устройство p4 так, чтобы несколько процессов могли разделять память на каждой машине. Причина здесь не только подразумевает то, что в такой конфигурации Вы увидите ожидание занятости на каждой станции, но и что устройство будет переключаться между выбором сокета и проверкой внутренних очередей разделяемой памяти.with-device=ch_p4 -comm=shared
Другая причина может состоять в том, что Вы используете библиотеку `-ldxml' (расширенная математическая библиотека) в системе Compaq Alpha. Известно, что она вызывает зависание MPI_Init. На данный момент неизвестен способ обхода этой проблемы; свяжитесь с Compaq для получения исправлений, если Вам необходимо использовать совместно MPI and `-ldxml'.
Причины этой проблемы в том, что устройство ch_p4
использует SIG_USR1, и любая библиотека, которая также использует этот
сигнал может перекрываться с дейтсвиями mpich, когда используется
устройство ch_p4. Вы можете перестроить mpich, чтобы использовать
другой сигнал, с помощью аргумента
with-device=ch_p4:-listener_sig=SIGNAL_NAME для configure и
пересобрать mpich.
p0_2005: p4_error: fork_p4: fork failed: -1О: Размер исполняемого файла Вашей программы может быть слишком велик. Когда запускается программа для устройства ch_p4 или ch_tcp, она может создавать свою копию для обработки некоторых коммуникационных задач. Из-за способа организации кода, это (хотя и временно) полная копия Вашей оригинальной программы, занимающая то же место. Поэтому, если Ваша программа больше, чем половина всего доступного пространства, Вы получите эту ошибку. В системах SGI Вы можете использовать команду size, чтобы определить размер исполняемого файла и swap -l, чтобы узнать размер доступного пространства. Заметьте, что size возвращает размер в байтах, а swap -l возвращает размер в 512-байтовых блоках. Другие системы могут предложить подобные команды. Такая же проблема может возникнуть в IBM SP при использовании устройства ch_mpl; причина та же, но происходит из библиотеки IBM MPL.
устройство ch_p4 p4_error: latest msg from perror: Error 0
Неверный формат exec. Неверная архитектура.О: Возможно, Вы используете NFS (Network File System). NFS может не поддерживать файлы, обновляемые временным способом; эта проблема может вызываться созданием исполняемого файла на одной машине и попыткой использования его с другой. Обычно NFS определяет существование нового файла в течение нескольких минут. Вы можете попробовать использовать команду sync. mpirun, как правило, пытается выполнить команду sync, но во многих системах sync лишь информативна и не гарантирует, что файловая система стала непротиворечивой.
О: Да, это нормально. В реализации ch_p4 второй процесс используется для динамической установки связей с другими процессами. Начиная с mpich версии 1.1.1, эта возможность может помещаться в отдельный поток на многих архитектурах, и этот второй процесс будет невидимым. Чтобы разрешить это, используйте опцию -p4_opts=-threaded_listener в командной строке configure для mpich.
О: Сейчас (в версии 1.2.2) процесс определяет, что другой процесс прерван, толко когда он пытается принимать или посылать сообщение, а прерванный процесс является тем, с которым он соединялся в прошлом. Поэтому, процесс, занятый вычислениями, может не заметить, что один из его коллег выполнил MPI_Abort, несмотря на то, что для многих общих примеров коммуникации это не представляет проблемы. Это будет исправлено в дальнейшей реализации.
% mpirun -np 2 cpiО: Это означает, что mpich был создан компилятором xlC, но некоторые машины в Вашем файле `util/machines/machines.rs6000' не имеют установленного xlC. Либо инсталлируйте xlC, либо пересоберите mpich с использованием другого компилятора (xlc или gcc; преимущество gcc в отсутствии лицензионных ограничений).
Невозможно загрузить программу /home/me/mpich/examples/basic/cpi
Невозможно загрузить библиотеку libC.ashr.o
Ошибка: Файл или каталог не найден
$ mpirun -np 2 helloО: Это значит, что либо mpirun пытается запустить задачи на Вашей SP отличным от поддерживаемого Вашей инсталляцией способом, или существует неисправность в программном обеспечении IBM, управляющем параллельными задачами (все эти сообщения об ошибках происходят от команды IBM poe, которую mpirun использует для запуска задачи MPI). Свяжитесь с Вашим системным администратором для помощи в исправлении этой ситуации. Ваш системный администратор может использовать
ERROR: 0031-124 Невозможно распределить узлы для параллельного исполнения.
Выход ...
ERROR: 0031-603 Распределение менеждера ресурсов для задач: 0, узел:
me1.myuniv.edu, rc = JM_PARTIONCREATIONFAILURE
ERROR: 0031-635 Возвращено ненулевое состояние -1 из pm_mgr_init
dsh -av ``ps aux | egrep -i `poe|pmd|jmd'''с управляющей рабочей станции для поиска случайных задач IBM POE, что может вызывать такое поведение. Файлы /tmp/jmd_err на отдельных узлах могут также содержать полезную диагностическую информацию.
ERROR: 0031-214 pmd: chdir </a/user/gamma/home/mpich/examples/basic>О: Это сообщения от системы IBM tbe, а не от mpirun. Они могут быть вызваны несовместимостью между POE, программой автомонтирования (особенно AMD) и shell, особенно если Вы используете не ksh. Не существует хорошего решения; IBM часто рекомендует сменить Вашу shell на ksh!
ERROR: 0031-214 pmd: chdir </a/user/gamma/home/mpich/examples/basic>
ERROR : Невозможно определить каталог сообщений (pepoe.cat) используя текущий(и другие вариации, упоминающие NLSPATH и ``каталог сообщений'').
NLSPATH
INFO : Если NLSPATH установлен правильно и каталог существует, проверьте
переменные LANG или LC_MESSAGES
(C) Открытие каталога сообщений ``pepoe.cat'' невозможно
О: Это проблема в Вашей системе; свяжитесь с Вашей командой поддержки. Обратите внимание на (а) значение NLSPATH, (b) ссылки из `/usr/lib/nls/msg/prime' к соответствущему языковому каталогу. Сообщения происходят не от mpich; они от кода IBM POE/MPL, который использует реализация mpich.
ERROR: 0031-124 Менее 2 узлов доступно из pool 0О: Это означает, что система IBM POE/MPL не может распределить запрошенные узлы, когда Вы пытаетесь запустить программу; вероятно, систему использует кто-то еще. Вы можете попытаться использовать переменные окружения MP_RETRY и MP_RETRYCOUNT, чтобы заставить задачу ожидать, пока узлы не станут доступны. Используйте man poe для дополнительной информации.
Сообщение номер 0031а затем завершается.254 не найдено в каталоге сообщений.
О: Если Ваше имя пользователя состоит из 8 символов, Вы можете обнаружить ошибку в среде IBM POE. Единственным исправлением, описанным на данный момент, является испоьзование профиля, в котором имя пользователя состоит из 7 символов или менее. Спросите Вашего представителя IBM о PMR 4017X (poe с идентификаторами пользователя длиной 8 символов не работает) и связанным с ним APAR IX56566.
/lib/dld.sl: Вызов по ссылке неудачен(Это пример из HP
/lib/dld.sl: Неверный аргумент
ld.so: libc.so.2: не найдена(Это пример из SunOS 4.1; подобные вещи происходят и в других системах).
О: Проблема в том, что Ваша программа использует разделяемые библиотеки, и библиотеки не доступны на некоторых машинах, с которыми Вы работаете. Чтобы исправить это, перекомпонуйте Вашу программу без разделяемых библиотек. Чтобы сделать это, добавьте соответствующие опции командной строки на этапе компоновки. Например, для системы HP и указанной выше ошибки, исправление состоит в использовании на этапе компоновки -Wl,-Bimmediate. Для Solaris соответствующей опцией будет -Bstatic.
О: Мы наблюдали такую проблему при инсталляциях, использующих AFS. Программа удаленной shell rsh, поставляемая с некоторыми системами AFS, ограничивает количество задач, которые могут использовать стандартный вывод. Это предотвращает выход для некоторых процессов, вызывая зависание задачи. Существует четыре возможных пути решения:
int mask;вместо
mask |= 1 « fd;
select ( fd+1, &mask, ... );
fd_set mask;то этот код неправильный (вызов select изменился, чтобы разрешить более 32 десткипрторов файлов очень давно, а программа rsh (или программист!) не изменились со временем).
FD_SET (fd,&mask);
select ( fd+1, &mask, ... );
О: Это может произойти при использовании устройства ch_p4 и системы, имеющей исключительно малые ограничения на число удаленных shell, принадлежащих Вам. Некоторые системы используют ``Kerberos'' (пакет безопасности сети), позволяющий иметь только три или четыре удаленных shell; на этих системах размер MPI_COMM_WORLD будет ограничен этим же числом (плюс один, если Вы используете и локальную машину).
Единственный способ обойти это - попытаться использовать безопасный сервер; это описано в руководстве по инсталляции mpich. Отметьте, что Вы должны запускать серверы ``вручную'', поскольку скрипт chp4_servs использует удаленную shell для запуска серверов.
О: Коллективные процедуры MPI могут использовать ассоциативность для достижения лучшего параллелизма. Например,
MPI_Allreduce ( &in, &out, MPI_DOUBLE, 1, ... );может вычислять
или может вычислять![]()
где a, b, ... - значения in в каждом из восьми процессов. Эти выражения эквивалентны для целых, вещественных и других привычных объектов из математики, но не эквивалентны для типов данных, таких, как данные с плавающей точкой, используемых в компьютерах. Ассоциация, которую использует MPI, зависит от количества процессов, таким образом, Вы можете не получить тот же самый результат при использовании различного числа процессов. Отметьте, что Вы не получите неверный результат, а просто другой (большинство программ предполагают, что арифметические операции ассоциативны).![]()
О: Компилятор С, с помощью которого был построен mpich и компилятор Фортрана, который Вы используете, имеют различные правила выравнивания для таких вещей, как DOUBLE PRECISION (двойная точность). Например, GNU C компилятор gcc может предположить, что все значения double выравниваются по 8-байтовой границе, а язык Фортран требует только такого выравнивания DOUBLE PRECISION для INTEGER, которое делается по 4-байтовой границе.
Хорошего решения не существует. Рассмотрим перестроение mpich с компилятором С, который поддерживает слабые правила выравнивания данных. Некоторые компиляторы Фортрана позволяют Вам задать 8-байтовое выравнивание для DOUBLE PRECISION (например, опции -dalign в -f некоторых компиляторах Фортрана для Sun); заметьте, однако, что это может испортить некоторые корректные программы Фортрана, взломав правила ассоциации хранения в Фортране.
Некоторые версии gcc могут поддерживать -munaligned-doubles; mpich должен быть перестроен с этой опцией, если Вы используете gcc версии 2.7 или выше. mpich пытается определить и использовать опцию, если она доступна.
О: Реализация mpich не полностью совместима с потоками и не не поддерживает ни fork, ни создание нового процесса. Заметьте, что спецификация MPI полностью совместима с потоками, но от реализаций этого не требуется. На данный момент некоторые реализации поддерживают потоки, хотя это уменьшшает производительность реализации MPI (сейчас Вам нужно определить, нужен ли Вам захват потока, даже если захват и освобождение более дорогостоящие).
Реализация mpich поддерживает вызов MPI_Init_thread; посредством этого вызова, нового для MPI-2, Вы можете определить, какой уровень поддержки потоков позволяет реализация MPI. Начиная с mpich версии 1.2.0 поддерживается только MPI_THREAD_SINGLE. Мы уверены, что версия 1.2.0 и выше поддерживает MPI_THREAD_FUNNELED, и некоторые пользователи используют mpich в этом режиме (особенно вместе с OpenMP), но мы недостаточно протестировали mpich в этом режиме. Будущие версии mpich будут поддерживать MPI_THREAD_MULTIPLE.
class Z![]()
public:
Z ()cerr « "*Z" « endl;
![]()
Z ()cerr « "+Z" « endl;
![]()
;
Z z;
int main (int argc, char **argv)при запуске с устройством ch_p4 на два процесса выполняет деструктор дважды для каждого процесса.![]()
MPI_Init (&argc, &argv);
MPI_Finalize ();
![]()
О: Ряд процессов, запущенных перед MPI_Init или после MPI_Finalize не определяются ; Вы не можете полагаться на определенное поведение. В случае ch_p4 порождается новый процесс для обработки запросов соединения; он прекращается после окончания программы.
Вы можете использовать контролирующий процесс в потоке с устройством ch_p4 или использовать вместо этого устройство ch_p4mpd. Заметьте, однако, что этот код непереносим, поскольку он полагается на поведение, которое не определяет стандарт MPI.
О: Попробуйте компилировать и компоновать программы Фортрана с опцией +T. Это может быть необходимым, чтобы среда Фортрана корректно обрабатывала прерывания, используемые mpich для создания соединений с другими процессами.
О: Убедитесь, что Вы компонуете программу со всеми корректными библиотеками. Если Вы не используете mpicc, попробуйте использовать mpicc для компоновки Вашего приложения. Причиной этого является то, что правильная работа версии с разделяемой памятью может зависеть от дополнительных библиотек, предоставляемых системой. Например, в Solaris, должна использоваться библиотека потоков, иначе критичные для корректного функционирования реализации MPI нефункциональные версии процедур mutex будут взяты из `libc'.
p0_1835: p4_error: Найдено неработающее соединение при ожидании сообщений: 1О: Дело в том, что реализация TCP на этой платформе решает, что соединение ``оборвалось'', когда его в действительности еще нет. Текущая реализация mpich предполагает, что реализация TCP не закрывает соединений и не имеет процедур для восстановления оборванных соединений. Будущие версии mpich будут обходить эту проблему.
К тому же, некоторые пользователи обнаружили, что ядро Linux для одного процессора более стабильно, чем ядро SMP.
Таймаут при ожидании завершения процессов. Это может вызываться дефектной
программой rsh (Некоторые версии Kerberos rsh имеют эту проблему).
Это не проблема P4 или mpich, а проблема операционной среды. Для многихЧто это означает?
приложений эта проблема замедляет прекращение процессов.
О: Если что-либо вызывает завершение MPI_Finalize за время более, чем 5 минут, в этом подозревается реализация rsh. rsh, используемая в некоторых инсталляциях Kerberos предполагает, что sizeof (FD_SET) == sizeof (int). Это означает, что программа rsh предполагает, что наибольшее значение FD это 32. Если программа использует fork для создания процессов, которые запускают rsh с поддержкой stdin, stdout, и stderr порожденных процессов, это предположение неверно, поскольку FD, которые rsh создает для сокета, могут быть > 31, если запущено достаточно много процессов. При использовании такой неисправной реализации rsh симптомом является то, что задача никогда не завершается, поскольку задачи rsh ждут (благодаря select) закрытия сокета.
Устройство ch_p4mpd исключает эту проблему.
О: Это зависит от возможностей Вашей системы выполнения С и/или Фортрана. Для С, попробуйте
setbuf ( stdout, (char *)0 );или
setvbuf ( stdout, NULL, _IONBF, 0 );
О: Это свойство системы IBM POE. Существует процедура POE, mpc_flush
(1), которую Вы можете использовать для очистки вывода. Прочтите страницу man
для этой процедуры; она синхронизирована во всей задаче и не может
использоваться, пока все процессы в MPI_COMM_WORLD не вызовут ее. С
другой стороны, Вы всегда можете оканчивать Вывод символом новой строки
(n); это вызовет очистку вывода и также поместит ввод от
пользователя на новую строку.
О: mpich не имеет для этого встроенного способа. Кстати, сам по себе он пытается собрать стандартный вывод для Вас. Вы можете сделать следующее:
Нет имени дисплея и переменой окружения $DISPLAYО: Это проблема с Вашей средой X. Upshot - это программа для X. Если имя Вашей рабочей станции `foobar.kscg.gov.tw', то перед запуском программы X, Вы должны выполнить
setenv DISPLAY foobar.kscg.gov.tw:0Если Вы работаете на какой-либо другой машине и выводите результат на foobar, Вам может понадобиться выполнить
xhost +othermachineна foobar; это даст othermachine разрешение для записи на дисплей foobar.
Если у Вас нет дисплея X (Вы входите в систему с машины под Windows без возможностей X), Вы не можете использовать upshot.
upshot: Команда не найдена.О: Вначале проверьте, находится ли upshot в Вашем пути. Вы можете использовать команду
which upshotчтобы сделать это.
Если он находится в Вашем пути, проблема может быть в том, что имя интерпретатора wish (используемого upshot) слишком длинное для Вашей системы Unix. Проверьте первую строку файла `upshot'. Она должна выглядеть примерно так
#! /usr/local/bin/wish -fЕсли она выглядит как
#! /usr/local/tcl7.4-tk4.2/bin/wish -fэто может быть слишком длинным именем (некоторые системы Unix ограничивают первую строку 32 символами). Чтобы исправить это, Вам нужно поместить ссылку на `wish' где-нибудь еще, чтобы имя было достаточно коротким. Также, Вы можете запустить upshot через
/usr/local/tcl7.4-tk4.2/bin/wish -f /usr/local/mpich/bin/upshot
set: Имя переменной должно начинаться с буквы.или
upshot: ощибка синтаксиса в строке 35: ' (' неопределенаО: Ваша версия HP-UX ограничивает имена shell до очень коротких строк. upshot является программой, выполняемой wish shell, и по некоторым причинам HP-UX отказывает в исполнении в этой shell, а затем пытается выполнить программу upshot в Вашей текущей shell (т.е., `sh' или `csh'), вместо выдачи разумного сообщения об ошибке, что имя команды слишком велико. Существует два способа исправления:
ln -s /usr/local/tk3.6/bin/wish /usr/local/bin/wishЗатем отредактируйте скрипт upshot для использования этого имени. Это может потребовать прав доступа root, в зависимости от того, где Вы поместили ссылку.
#! /bin/sh(с соответствующими именами для исполняемых файлов `wish' и `upshot'). Поместите сообщение об ошибке HP в файл. В настоящее время, сообщение об ошибке здесь неверно; нет причины ограничивать выбор общей shell ( в противоположность shell загрузки).
/usr/local/tk3.6/bin/wish -f /usr/local/mpi/bin/upshot
wrappergen использует три источника ввода:
Список функций представляет собой просто файл имен функций, разделенных пробелами. Если он опущен, любые макросы forallfn или fnall будут расширены на каждую функцию в файле определений.
Если описания функций отсутствуют, используются те, которые находятся в `mpi_proto' (это множество с определением PROTO_FILE в `Makefile').
Опции wrappergen:
cd mpe/profiling/libРезультирующий код требует только версию MPI_Finalize для вывода временных величин. Она может быть написана либо добавлением MPI_Finalize и MPI_Init к `mpiio_proto', либо через простое редактирование версии, полученной при использовании `mpi_proto' вместо `mpiio_proto'.
../wrappergen/wrappergen -p ../wrappergen/mpiio_proto![]()
-w time_wrappers.w > time_io.c
Целочисленный индекс представляет, из какого файла обрамления происходит макрос. Это полезно при описании глобальных для файла переменных, чтобы избежать пересечения имен. Рекомендуется, чтобы все идентификаторы, описанные вне функций, оканчивались на _fileno
. Например:
static double overhead_time_может расширяться до:fileno
;
static double overhead_time_0;(конец примера).
forallfn <function name escape> <функция A>
<функция B> ...
...
endforallfn
Код междуforallfn
и
endforallfn
копируется один раз для каждой профилируемой функции, исключая перечисленные функции, заменяя <function name escape> именем каждой из функций. Например:
может расширяться до:forallfn fn_name
static int
fn_name
_ncalls_
fileno
;
endforallfn
static int MPI_Send_ncalls_1;(конец примера).
static int MPI_Recv_ncalls_1;
static int MPI_Bcast_ncalls_1;
foreachfn <function name escape> <функция A>
<функция B> ...
...
endforeachfn
foreachfn
- это то же самое, что и
forallfn
, за исключением того, что обрамления будут написаны только для точно названных функций. Например:
может расширяться до:forallfn fn_name mpi_send mpi_recv
static int
fn_name
_ncalls_
fileno
;
endforallfn
static int MPI_Send_ncalls_2;(конец примера).
static int MPI_Recv_ncalls_2;
fnall <function name escape> <функция A>
<функция B> ...
...
callfn
...
endfnall
fnall
определяет обрамление, используемое для всех функций, исключая названные.
wrappergen расширяет их в полное определение функции в традиционном формате С. Макросcallfn
сообщает wrappergen, где вставить вызов функции, которая будет профилироваться. Должен быть только один экземпляр макроса
callfn
в каждом определении оболочки. Макрос, определенный <function name escape> заменяется именем каждой из функций.
Внутри определения обрамления распознаются другие макросы.
vardecl <type> <arg> <arg> ...
Используйте vardecl для объявления переменных внутри определения обрамления. Если вложенный макрос требует переменных, заданных посредством vardecl с теми же именами, wrappergen создаст уникальные имена добавлением последовательных целых в конец требуемого имени (var, var1, var2, ...), пока не будет создано уникальное имя. Неразумно объявлять переменные в определении обрамления вручную, поскольку имена переменных могут конфликтовать с другими обрамлениями, а определения переменных могут встретиться в коде позже, чем выражения из других обрамлений, что запрещено в классическом и ANSI C.<varname>
Если переменная описана через vardecl, то требуемое имя для этой переменной (которое может отличаться от унифицированной формы, которая появится в финальном коде) становится временным макросом, который будет расширен в унифицированную форму. Например,может расширяться до:vardecl int id
int i, d3;(конец примера)<argname>
Рекомендуемый, но не необходимый макрос, состоящий из имени одного из аргументов профилируемой функции, расширяется до имени соответствующего аргумента. Этот макрос служит небольшой цели, иной чем вставка, чтобы профилируемая функция имела аргумент с заданным именем.<argnum>
Аргументы профилируемой функции могут также адресоваться увеливающимся номером, начиная с 0.returnVal
returnVal расширяется до переменной, используемой для хранения возвращаемого результата профилируемой функции.
callfn расширяется до вызова профилируемой функции. При вложенных определениях обрамления, это также представляет точку для вставки кода любой вложенной внутренней функции. Порядок вложенности определяется порядком, в котором встречаются обрамления программе wrappergen. Например, если два файла `prof1.w' и `prof2.w' каждый содержат два обрамления для MPI_Send, профилированный код, созданный с использованием обоих файлов, имеет вид:int MPI_Send ( аргументы...)
объявление аргументов...
![]()
/*код перед вызовом функции из обрамления 1 из prof1.w */
/*код перед вызовом функции из обрамления 2 из prof1.w */
/*код перед вызовом функции из обрамления 1 из prof2.w */
/*код перед вызовом функции из обрамления 2 из prof2.w */
returnVal = MPI_Send ( аргументы... );
/*код после вызова функции из обрамления 2 из prof2.w */
/*код после вызова функции из обрамления 1 из prof2.w */
/*код после вызова функции из обрамления 2 из prof1.w */
/*код после вызова функции из обрамления 1 из prof1.w */
return returnVal;
![]()
fn <function name escape> <function A> <function
B> ...
...
callfn
...
endfnall
fn идентично fnall, за исключением генерации обрамлений только для точно названных функций. Например:будет расширен до:fn this_fn MPI_Send
![]()
vardecl int i
![]()
callfn
![]()
printf ( ``Вызовthis_fn
.
n'' );
printf ( ``i
не используется.
n'' );
printf ( ``Первый аргумент дляthis_fn
это
0
n'' );
endfn
int MPI_Send (buf, count, datatype, dest, tag, comm )
void * buf;
int count;
MPI_Datatype datatype;
int dest;
int tag;
MPI_Comm comm;
![]()
int returnVal;
int i;
returnVal = PMPI_Send ( buf, count, datatype, dest, tag, comm );
printf ( "Вызов MPI_Send.n" );
printf ( "i не используется.n" );
printf ( "Первый аргумент для MPI_Send это bufn" );
return returnVal;![]()
fn_num
Это номер, начинающийся с 0. Он наращивается при каждом использовании.Простой файл обрамления находится в `sample.w', а соответствующий вывод в `sample.out'.
mpirun опции mpirun ...<имя программы> опции...
опции mpirun:
-arch <архитектура>Опции для устройства globus2: За исключением -h, устройством globus поддерживаются только опции mpirun.
Определяет архитектуру (должен быть соответствующий
файл machines.<arch> в /usr/local/mpich/bin/machines)
если используется execer
-h Эта справка
-machine <имя машины>
Использовать стартовую процедуру для <имя машины>
В настоящее время поддерживаются:
paragon
p4
sp1
ibmspx
anlspx
sgi_mp
ipsc860
inteldelta
cray_t3d
execer
smp
symm_ptx
-machinefile <имя файла machine>
Брать список возможных машин для запуска из файла <machine-filename>.
Это список всех доступных машин; используйте -np <np> для
указания определенного числа машин.
-np <np>
Определить количество процессоров для запуска
-nodes <nodes>
Определить количество узлов для запуска (для систем SMP,
сейчас поддерживается только устройством ch_mpl)
-nolocal
не запускать на локальной машине (работает только для задач
ch_p4)
-all-cpus, -allcpus
Использовать все доступные CPU на всех узлах.
-all-local
Запускать все процессы на главном узле.
-exclude <list>
Исключить узлы из списка, разделенного двоеточием.
-map <list>
Использовать список, разделенный двоеточием для определения,
какой ранг работает на каком узле.
-stdin filename
Использовать filename как стандартный ввод программы. Это
необходимо для программ, запускаемых как пакетные задачи, как на
некоторых системах IBM SP и Intel Paragon с использованием NQS
(см. ниже -paragontype).
Используйте
-stdin /dev/null
если ввода нет и Вы предполагаете запустить программу в фоновом
режиме. Альтернативой является перенаправление стандарного ввода
из /dev/null, как в
mpirun -np 4 a.out < /dev/null
-t Тестирование - не запускать, а выводить, что должно было произойти
-v Выводить подробные комментарии
-dbg Опция `-dbg' сожет использоваться для выбора отладчика.
Например, -dbg=gdb вызывает скрипт mpirun_dbg.gdb, находящийся в
каталоге `mpich/bin'. Этот скрипт захватывает нужные аргументы вызывает
отладчик gdb, и запускает первый процесс под управлением gdb, если это
возможно. Существует 4 отладочных скрипта; gdb, xxgdb, ddd, totalview. Они
могут потребовать редактирования, что зависит от Вашей системы. Существует
еще скрипт для dbx, но он всегда должен редактироваться, поскольку команды
для dbx варьируются от версии к версии. Вы можете также использовать эту
опцию для вызова другого отладчика; например, -dbg=mydebug. Вам нужно
написать скрипт `mpirun_dbg.mydebug', который следует формату
встроенных скриптов отладки и поместить его в каталог mpich/bin.
-ksq Хранить очереди передачи. Это полезно, если Вы предполагаете
позже добавить totalview к запущенной (или блокированной) задаче, и хотите
просмотреть очереди сообщений. (Обычно они не поддерживают
просмотр отладчиком).
-machinefile <machine-file name>Специальные опции пакетных сред:
Взять список возможных машин для запуска из
файла <machine-file name>
-np <np>
Определить количество процессоров для запуска
-dumprsl
Показывает строку RSL, используемую для отсылки задачи.
Использование этой опции не запускает задачу.
-globusrsl <globus-rsl-file name>
SPMgt;<globus-rsl-file name> содержит строку Globus RSL.
При использовании этой опции все другие опции mpirun игнорируются.
-mvhomeСпециальные опции для IBM SP2:
Перемещает исполняемые файлы в домашний каталог. Это необходимо,
если все файловые системы не кросс-монтированы. Сейчас используется только anlspx.
-mvback files
Перемещает указанные файлы обратно в текущий каталог. Нужно
только при использовании -mvhome; в ином случае не имеет эффекта.
-maxtime min
Максимальное время выполнения задачи в минутах. Сейчас используется только
anlspx. Значение по умолчанию $max_time минут.
-nopoll
Не использовать коммуникацию в режиме опроса. Доступны только для IBM SP.
-cac nameПри выходе mpirun возвращает состояние 0, если не обнаружена проблема, иначе возвращается ненулевое состояние.
CAC для планировщика ANL. Сейчас используется только anlspx.
Если не указано, используется любой приемлемый CAC.
При использовании устройства ch_p4 несколько архитектур
может обрабатываться при указании
нескольких аргументов -arch и
-np. Например, для запуска программы на 2-х sun4 и 3-х rs6000, и если локальная
машина - sun4, используйте
mpirun -arch sun4 -np 2 -arch rs6000 -np 3 programЭто предполагает, что программа работает для обеих архитектур. Если нужны различные исполняемые файлы, строка `%a' может заменяться именем архитектуры. Например, если программы - это
mpirun -arch sun4 -np 2 -arch rs6000 -np 3 program.%aЕсли вместо этого исполняемые файлы находятся в различных каталогах, например, `/tmp/me/sun4' и `/tmp/me/rs6000', команда будет
mpirun -arch sun4 -np 2 -arch rs6000 -np 3 /tmp/me/%a/programВажно определить архитектуру через -arch перед определением числа процессоров. Первая команда arch должна относиться к процессору, на котором будет запущена задача.Если не определена опция -nolocal, то первая -arch должна относиться к процессору, с которого запускается mpirun.
Каждая команда mpirun для устройства
globus2 передает на сеть компьютеров, ориентированную на Globus, скрипт на
языке определения ресурсов Globus, или RSL скрипт. Каждый скрипт RSL
состоит из одной или нескольких подзадач RSL, обычно по одной на каждую машину в
вычислениях. Вы можете создать Ваш собственный скрипт RSL6
точно для mpirun (используя опцию -globusrsl <rslfilename>), в
случае чего Вы не должны определять больше никаких опций mpirun, или Вы
можете заставить mpirun создать скрипт RSL для Вас, основанный на
аргументах, которые Вы передаете mpirun, и на содержимом Вашего файла
machines (обсуждается ниже). В этом случае важно помнить, что
коммуникация между узлами в различных подзадачах всегда производится по TCP/IP,
а более эффективный фирменный MPI поставщика используется только среди узлов
одной и той же подзадачи.
Использование mpirun для создания скрипта RSL для Вас требует наличия файла machines. Команда mpirun определяет, какой из файлов machines будет использоваться, следующим образом:
Файл machines используется для указания компьютеров, на которых Вы
можете пожелать запустить свое приложение. Компьютеры перечисляются указанием
``сервиса'' Globus на данной машине. Для большинства приложений используется
сервис по умолчанию, требующий только указания полного доменного имени.
Проконсультируйтесь с Вашим администратором Globus или веб-сайтом Globus
www.globus.org для дополнительной информации относительно специальных
сервисов Globus. Например, рассмотрим следующую пару двоично-совместимых машин
m1,m2
.utech.edu, имеющих доступ к единой файловой
системе. Здесь приведен файл machines, использующий сервисы Globus по
умолчанию.
``m1.utech.edu'' 10Число, появляющееся на конце каждой строки необязательно (по умолчанию 1). Оно определяет максимальное число узлов, которые могут быть созданы в одной подзадаче RSL на каждой машине. mpirun использует определение -np для ``обхода'' файла machines. Например, используя файл, указанный выше, mpirun -np 8 создает RSL с одной подзадачей с 8-ю узлами на m1.utech.edu, в то время, как mpirun -np 12 создает две подзадачи, где первая имеет 10 узлов на m1.utech.edu, а вторая имеет 2 узла на m2.utech.edu, и наконец, mpirun -np 17 создает три подзадачи с 10 узлами на m1.utech.edu, 5 узлами на m2.utech.edu, и заканчивая третьей подзадачей с 2 узлами снова на m1.utech.edu. Заметьте, что меж-подзадачные сообщения всегда передаются через TCP, даже если две отдельные подзадачи находятся на той же машине.
``m2.utech.edu'' 5
Простейший способ научиться писать свои собственные запросы RSL - изучить запросы, созданные для Вас mpirun. Рассмотрим пример, в котором мы хотим запустить приложение на кластере рабочих станций. Вспомним, что наш файл machines выглядит так:
``m1.utech.edu'' 10Чтобы увидеть запрос RSL, сгенерированный в этом случае, без запуска программы, мы набираем следующую команду mpirun:
``m2.utech.edu'' 5
% mpirun -dumprsl -np 12 myapp 123 456что приведет к выводу:
+Отметьте, что (тип задачи=mpi) может встретиться только в тех подзадачах, машины которых имеют фирменные реализации MPI. Дополнительные переменные окружения могут быть добавлены так, как в примере ниже:
( &(resourceManagerContact=``m1.utech.edu'')
(количество=10)
(тип задачи=mpi)
(метка=``subjob 0'')
(среда=(GLOBUS_DUROC_SUBJOB_INDEX 0))
(аргументы=`` 123 456'')
(каталог=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus)
(исполняемый файл=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus/myapp)
)
( &(resourceManagerContact=``m2.utech.edu'')
(количество=2)
(тип задачи=mpi)
(метка=``subjob 1'')
(среда= (GLOBUS_DUROC_SUBJOB_INDEX 1))
(аргументы=`` 123 456'')
(каталог=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus)
(исполняемый файл=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus/myapp)
)
+После редактирования Вашего собственного файла RSL Вы можете передать его непосредственно mpirun следующим образом:
( &(resourceManagerContact=``m1.utech.edu'')
(количество=10)
(тип задачи=mpi)
(метка=``subjob 0'')
(среда=(GLOBUS_DUROC_SUBJOB_INDEX 0))
(MY_ENV 246)
(аргументы=`` 123 456'')
(каталог=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus)
(исполняемый файл=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus/myapp)
)
( &(resourceManagerContact=``m2.utech.edu'')
(количество=2)
(тип задачи=mpi)
(метка=``subjob 1'')
(среда= (GLOBUS_DUROC_SUBJOB_INDEX 1))
(аргументы=`` 123 456'')
(каталог=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus)
(исполняемый файл=/homes/karonis/MPI/mpich.yukon/mpich/lib/IRIX64/globus/myapp)
)
% mpirun -globusrsl <ваш файл запроса RSL>Отметьте, что при поддержке Вашего собственного файла RSL он должен быть единственным аргументом, определяемым для mpirun.
RSL является гибким языком, способным
выполнять гораздо больше, чем представлено здесь. Например, он может
использоваться для установки исполняемых файлов и переменных окружения на
удаленных компьютерах перед началом выполнения. Полное описание языка можно
найти на
http://www.globus.org.
Благодарности
Выполнению работы, описанной в этом документе, способствовало много людей. Мы также благодарны тем, кто помогал в реализации mpich, особенно Patrick Bridges и Edward Karrels. Особенная благодарность Nathan Doss и Anthony Skjellum за ценную помощь в реализации и разработке mpich. Debbie Swider, работавшая в группе по mpich несколько лет помогала в поддержке и улучшении реализации mpich. David Ashton, разрабатывал версию mpich для Windows NT, поддержаваемую грантом корпорации Microsoft. Устройство globus2 разработано Nick Karonis из Northern Illinois University и Brian Toonen из Argonne National Laboratory. Привязки к C++ были выполнены Andrew Lumsdaine и Jeff Squyres из Notre Dame. Параллельная система ввода-вывода ROMIO MPI-2 была разработана Rajeev Thakur из Argonne.
mpireconfig Makefile(но не mpireconfig Makefile.in). Эта команда создаст `Makefile' из `Makefile.in'. Затем введите:
make
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html mpich_userguide.tex
The translation was initiated by Alex Otwagin on 2002-12-16
William Gropp
Ewing Lusk 1
William Gropp
Ewing Lusk 1