Руководство пользователя для MPICH, переносимой реализации MPI версия 1.2.1

William Gropp и Ewing Lusk
перевод Балуева А.Н. (мат-мех факультет СПбГУ)

Оглавление

  • 9. ЧТО ДЕЛАТЬ ПРИ ОБНАРУЖЕНИИ НЕПОЛАДОК.
    • 9.1 Проблемы с компиляцией или компоновкой программ на Фортране.
    • 9.2 Проблемы с компоновкой Си-программ.
    • 9.3 Проблемы с запуском программ.
    • 9.4 Неудачи при старте программ.
    • 9.5 Программы отказывают после старта.
    • 9.6 Неприятности с вводом и выводом.
    • 9.7 Upshot and Nupshot

      9. Что делать при обнаружении неполадок.

      В начало страницы

      Этот раздел описывает некоторые общие случаи нестыковок и способы их разрешения. В нем также рассматриваются конфликты, связанные с машинным оборудованием. С затруднениями, которые не разрешаются после знакомства с данным разделом, обращайтесь в mpi-bugs@mcs.anl.gov. При этом нужно указать:

      версию mpich (например, 1.2.1); выход исполняемой программы с аргументом –mpiversion

      (например, mpirun –np 1 a.out –mpiversion); выход uname –a

      для вашей системы. Если вы пользуетесь системой SGI, то также и от hinv. Если проблема связано со сценарием конфигурации или mpirun, выполните

      сценарий с аргументом –echo (например, mpirun –echo –np 4 a.out ).

      Если используете сети рабочих станций, вышлите также выход от bin/tstmachines CHECK not sbin4.

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

      9.1 Проблемы с компиляцией или компоновкой программ на Фортране.

      9.1.1 Общие вопросы.

      В начало страницы

      1. Q: При компоновке тестовой программы было выдано следующее сообщение:

      f77 –g –o secondf secondf.o –L/usr/local/mpich/lib/sun4/ch.p4 –lmpich invalid option –L/usr/local/mpich/lib/sun4/ch.p4 ld: –lmpich: No such file

      or directory A: Эта программа на f77 не принимает команды –L установки пути для поиска библиотеки. Некоторые системы обеспечивают оболочечный сценарий для f77, который очень ограничен в возможностях. Чтобы преодолеть это, используйте полную форму пути к библиотеке вместо параметра –L: f77 –g –o secondf secondf.o /usr/local/mpich/lib/sun4/ch.p4/libmpich.a А что касается версии mpich 1.2.0, то конфигурирование mpich пытается найти правильный параметр для указания библиотечного пути для компилятора с Fortran. Если вы нашли, что в конфигурации mpich допущена ошибка, пошлите сообщение в mpi-bugs@mcs.anl.gov. 2. Q: При компоновке программ на Фортране я получил неопределенные символы, такие как

      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 4tstmachines is not supported in the globus2 device С программами на Си не было никаких проблем.

      A: Это значит, что компилятор с Си снабжает вас библиотеками, которыми не пользуется компилятор с Fortran. Найдите параметры для компиляторов с Си и с Fortran, которые указывают, какие библиотечные файлы они используют (или можете найти параметр, такой как –dryrun, который показывает, какие команды используются компилятором). Постройте простые Си и Фортран-программы и сравните используемые библиотеки (обычно по ld в командной строке). Попробуйте те, которые присутствуют для компилятора с Си и отсутствуют для Fortran.

      3. Q: Пытаясь запустить конфигурацию, я получил сообщение об ошибке вида ./configure: syntax error at line 20: `(' unexpected

      A: Вы имеете устаревшую версию оболочки Bourne (sh). MPICH требует, чтобы sh-оболочка поддерживала процедуры; это было стандартом в большинстве оболочек Bourne многие годы. Для исправления вы можете:

      (a) получить обновленную версию у вашего поставщика, (b) установить одну из общедоступных замен sh-shell.

      9.2 Проблемы с компоновкой Си-программ.

      9.2.1 Общие вопросы.

      В начало страницы

      1. Q: При компоновке программ я получаю сообщения о том, что ..builtin.saveregs не определены.

      A: Может быть, вы имеете систему, на которой подпрограммы Си и Fortran несовместимы (например, используют gcc и Fortran-компилятор от поставщика).

      Если вы не планируете использовать Fortran, проще всего перестроить систему с параметром конфигурации –nof77. Можно также попытаться сделать ваш компилятор с Си совместимым с вашим компилятором с Fortran. Один из способов – использовать f2c для конверсии Fortran к C, затем использовать компилятор с Си для всех компиляций. Если вы изберете этот путь, помните, что каждая подпрограмма на Fortran должны быть компилирована с использованием f2c и потом Си-компилятора.

      9.2.2 Sun Solaris

      В начало страницы

      1. Q: При компоновке на Solaris, я получил ошибку вида:

      cc –g –o testtypes testtypes.o –L/usr/local/mpich/lib/solaris/ch.p4 –lmpich –lsocket –lnsl –lthread ld: warning: symbol `.defaultstkcache' has differing sizes: (file /usr/lib/libthread.so value=0x20; file /usr/lib/libaio.so value=0x8); /usr/lib/libthread.so definition taken

      A: Это – ошибка в Solaris 2.3, которая исправлена в Solaris 2.4.

      Можно получить исправление для Solaris 2.3; свяжитесь с Sun для получения дополнительной информации.

      9.2.3 HPUX 1.

      В начало страницы

      Q: При компоновке на HPUX я получил сообщение вида:

      cc –o pgm pgm.o –L/usr/local/mpich/lib/hpux/ch.p4 –lmpich –lm /bin/ld: Unsatisfied symbols: sigrelse (code) sigset (code) sighold (code) *** Error code 1

      A: Нужно добавить параметр компоновки –lV3. Устройство p4 использует на НР сигнальную систему System V; она обеспечивается библиотекой `V3'.

      9.2.4 LINUX

      В начало страницы

      1. Q: При компоновке программы на Fortran я получил:

      Linking: foo.o(.data+0x0): undefined reference to `pmpi.wtime.' A: Это ошибка в компиляторе pgf77 (внесенная при исправлении ошибки в команде LINUX ld). Ее можно исправить, либо добавив –lpmpich к строке компоновки, либо изменив `mpif.h' удалением оператора external pmpi.wtime, pmpi.wtick. Конфигурация mpich пытается определить, можно ли объявить pmpi.wtime и pmpi.wtick в `mpif.h' и удаляет их в случае

      ошибок. Если это случилось, а вы используете pmpi.wtime или pmpi.wtick в вашей программе, вам нужно описать их как функции со значением

      double precision.

      9.3 Проблемы с запуском программ.

      9.3.1 Общие вопросы

      В начало страницы

      1. Q: Пытаясь запустить программу с mpirun –np 2 cpi

      я или получаю сообщение об ошибке или программа зависает.

      A: На Intel Paragons и IBM SP1 и SP2 имеется много взаимно исключающих способов исполнения параллельных программ; каждый может выбирать

      доступные для него подход(ы). Сценарий mpirun пробует один из наиболее общих методов, но может сделать плохой выбор. Попробуйте параметр –v or –t

      в mpirun, чтобы посмотреть, как он пытается исполнять программу и затем сравните это со специальными инструкциями узла по использованию вашей системы.

      Вам может оказаться необходимым изменить код mpiirun для ваших нужд. 2. Q: Стараясь запустить программу с, например, mpirun –np 4 cpi, я получаю

      usage : mpirun options !executable? !dstnodes? – !args? илиmpirun options !schema?A: Вы употребляете команду с именем mpirun, которое стоит в вашем пути раньше версии mpich. Выполните команду which mpirun, чтобы увидеть, какая

      команда с именем mpirun была фактически найдена. Для исправления либо измените порядок каталогов в вашем пути, чтобы первой обнаруживалась

      mpich-версия для mpirun, или определить алиас для mpirun, который использует абсолютный путь. Например, в оболочке csh, вы можете написать

      alias mpirun /usr/local/mpich/bin/mpirun 3.

      Q: Пытаясь запустить большое количество процессов на сети рабочих станций, я получил сообщение

      p4.error: latest msg from perror: Too many open files A: Имеется ограничение на число открытых дескрипторов файлов. В некоторых системах можно самому увеличить этот предел; на других вы должны получить для этого помощь от системного администратора. Можно попробовать эксперименты с сервером безопасности, но это не будет полным решением. Мы сейчас работаем над более масштабируемым механизмом запуска для следующей версии.

      4. Q: При попытке выполнить cpilog я получил следующее сообщение:

      ld.so.1: cpilog: fatal: libX11.so.4: can't open file: errno 2 A: Версия X11, которую нашла конфигурация, не установлена правильно. Это общая проблема для систем Sun/Solaris. Одна из возможных причин состоит в том, что ваши машины Solaris исполняют слегка отличающиеся версии. Вы можете попробовать принудительную статическую компоновку (-Bstatic на SunOS). Как альтернативу, попробуйте добавить следующие строки к вашему `.login' (подразумевается оболочка С): setenv OPENWINHOME /usr/openwin setenv LD.LIBRARY.PATH /opt/SUNWspro/lib: /usr/openwin/lib

      (сначала нужно проверить у вашего системного администратора, что пути соответствуют вашей системе). Проверьте, что добавка предшествует всем

      строчкам подобным if ($?USER == 0 – $?prompt == 0) exit

      5. Q: Моя программа отказывает при попытке записи в файл.

      A: Если вы открыли файл до вызова MPI.INIT, то поведение MPI (не только mpich) не определено. На версии ch.p4 только нулевой процесс (в MPI.COMM.WORLD)

      будет иметь открытый файл; другие процессы не откроют файлы. Перенесите операции, которые открывают файлы и взаимодействуют с внешним миром, на место после MPI.INIT (и до MPI.FINALIZE).

      6. Q: Программа как будто без конца стартует.

      A: Это может произойти по одной из нескольких причин.

      На системах с динамически компонуемыми выполнимыми программами причиной может быть то, что файловая система внезапно получает запросы от многих процессоров на динамически компонуемые части кода (это может быть оценено как проблема с некоторыми реализациями DFS). Вы можете попробовать статическую компоновку вашей прикладной программы.

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

      9.3.2 Сети рабочих станций.

      В начало страницы

      1. Q: При использовании mpirun я получил сообщение Permission denied отказ в допуске .

      A: Ели вы получили что-то подобное такому:

      % mpirun –np 2 cpi Permission denied.

      или такому % mpirun –np 2 cpi socket: protocol failure in circuit setup

      при использовании устройства ch.p4 device, это вероятно означает, что вы не имеете разрешения использовать rsh для запуска процессов. Нужно воспользоваться сценарием tstmachines для проверки этого. Например, если тип архитектуры (согласно аргументу конфигурации –arch) есть sun4, то попробуйте tstmachines sun4. Если это не поможет, вам могут понадобиться файлы `.rhosts' или `/etc/hosts.equiv' (и встреча с вашим системным администратором) или вам может понадобиться использовать сервер p4 (см. Section 3.1.3). Другая возможная причина может крыться в выборе отдаленной программной оболочки; некоторые системы имеют не одну оболочку. Справьтесь у вашего системного администратора о том, какую версию rsh или remsh вы должны использовать. Если это ssh, посмотрите раздел об использовании ssh в руководстве по установке. Если ваша система допускает файл `.rhosts', то сделайте следующее:

      (a) создайте файл `.rhosts' в вашем основном каталоге; (b) измените защиту на нем для пользователя на read/write only:

      chmod og-rwx .rhosts; (c) добавьте одну строку к файлу `.rhosts' для каждого процессора, который вы хотите использовать, формата host username. Например, если ваше пользовательское имя есть doe и вы хотите использовать машины a.our.org и b.our.org, то ваш файл `.rhosts' должен содержать a.our.org doe b.our.org doe Заметьте употребление полных составных имен хостов (некоторые системы этого требуют). В сетях, где не допускается употребление файлов .rhosts (таких как одна в MCS при Argonne), вам нужно использовать сервер p4 server для исполнения на машинах, которые не подчинены машине, с которой вы запустили задание. Наконец, вам может понадобиться использовать нестандартную команду rsh внутри MPICH. Тогда MPICH необходимо реконфигурировать с –rsh=command.name, и вероятно также с –rshnol, если отдаленная команда оболочки не имеет аргумента –l. Это может понадобиться для систем, использующих Kerberos и/или AFS. См. раздел в Руководстве по установке об использовании оболочки безопасности ssh, например. Другой возможный источник сообщения «Permission denied» может быть то, что вы употребили команду su для изменения вашего действующего идентификатора пользователя. На некоторых системах устройство ch.p4 не работает в такой ситуации. Зарегистрируйтесь нормально и попробуйте снова.

      2. Q: Когда я использую mpirun, я получаю сообщение Try again. A: Если вы видите что-нибудь подобное

      % mpirun –np 2 cpi Try again, это означает, что вам не удалось запустить отдаленное задание с помощью оболочечной команды на какой-то отдаленной машине, хотя нормально вы это можете сделать. Это значит, что машина очень занята, не хватает памяти или процессов. Справка в man page о rshd может дать вам больше информации. Единственный способ исправить дело – попросить вашего системного администратора взглянуть на машину, с которой выдается сообщение. 3. Q: При выполнении на рабочей станции версии (-device=ch.p4) я получал сообщения вида

      stty: TCGETS: Operation not supported on socket или stty: tcgetattr: Permission denied или

      stty: Can't assign requested address A: Это значит, что один ваш регистрационный стартовый сценарий (т.e., `.login' и `.cshrc' или `.profile') содержит незащищенное употребление программ stty или tset. Для пользователей оболочки Cи обычный способ исправления – проверить инициализацию переменных TERM или PROMPT. Например,

      if ($?TERM) then eval `tset –s –e^»? –k^U –Q –I $TERM` endif

      Другой способ – посмотреть, не поможет ли добавка if ($?USER == 0 – $?prompt == 0)

      exit в начале вашего файла `.cshrc' (но после всякого кода, который устанавливает

      окружения исполнения, такие как пути к библиотекам (e.g., LD.LIBRARY.PATH)). 4. Q: При исполнении на версии рабочей станции (-device=ch.p4) и выполнении или сценария tstmachines для проверки машинных файлов или тестов MPICH, я получал сообщение о неожиданной выдаче или об отличии от ожидаемого результата. Я также получал дополнительные выдачи при выполнении других программ. Однако программы MPI, по-видимому, работали. A: Это означает, что один из ваших регистрационных стартовых сценариев (т.e., `.login' и `.cshrc' или `.profile' или `.bashrc') содержит незащищенное обращение к какой-то программе, которая генерирует выдачу, такой как fortune или даже echo. Для пользователей оболочки Си обычный способ исправления состоит в проверке инициализации переменных TERM или PROMPT. Например,

      if ($?TERM) then fortune endif Другое решение – попробовать добавить

      if ($?USER == 0 – $?prompt == 0) exit в начале вашего файла `.cshrc' file (но после всех кодов, которые

      устанавливают окружения для исполнения, такие как пути к библиотекам (e.g., LD.LIBRARY.PATH)).

      5. Q: Используя mpirun, я получил странное сообщение вида arch: No such file or directory

      A: Обычно это происходит из-за ошибок в вашем файле `.cshrc'. Попробуйте команду оболочки which hostname. Если вы увидите тот же самый странный ответ, то причина в вашем файле `.cshrc'.

      6. Q: Когда я пытаюсь выполнять мою программу, я получаю p0.4652: p4.error: open error on procgroup file (procgroup): 0

      A: Это показывает, что программа mpirun не создает нужный вход для исполнения программы. Наиболее вероятная причина состоит в том, что команда mpirun

      пытается выполнять программу, построенную с устройством ch.p4 (сети рабочих станций), как для устройства совместной памяти или некоторой специальной системы. Попробуйте следующее: запустите программу, используя mpirun и аргумент –t:

      mpirun –t –np 1 foo Это должно показать, что mpirun будет делать (-t означает testing).

      Или можно попробовать аргумент –echo, чтобы увидеть точно, что mpirun делает:

      mpirun –echo –np 1 foo В зависимости от выбора, сделанного установщиком mpich, вы должны выделить приспособленную для устройства версию mpirun из «generic»– версии. В установках mpich, которые были построены на месте с обычными параметрами по умолчанию, нужная mpirun может быть найдена в `build/!architecture?/!device?/bin'.

      7. Q: Пытаясь выполнить программу, я получил сообщение:

      icy% mpirun –np 2 cpi –mpiversion icy: icy: No such file or directory A: Дело в том, что `/usr/lib/rsh' не есть программа отдаленной оболочки. Попробуйте следующее: which rsh ls /usr/*/rsh Вы вероятно имеете `/usr/lib' на вашем пути перед `/usr/ucb' or `/usr/bin'. Это приводит к выбору `restricted' оболочки вместо `remote' оболочки. Простейший способ – убрать `/usr/lib' из вашего пути (он нужен очень немногим); или можно перенести его на место после каталога, содержащего `remote' оболочку rsh. Другой способ – добавить связь к каталогу, расположенному ранее на пути поиска отдаленной оболочки. Например, у меня

      `/home/gropp/bin/solaris' стоит раньше на моем пути; я могу использовать cd /home/gropp/bin/solaris ln –s /usr/bin/rsh rsh

      где предполагается, что `/usr/bin/rsh' есть отдаленная оболочка. 8. Q: Стараясь выполнить программу, я получил такое сообщение:

      trying normal rsh A: Вы пользуетесь версией программы отдаленной оболочки, которая не имеет аргумента –l. Переконфигурируйте с –rshnol и перестройте MPICH. Вы можете пострадать от некоторой потери функциональности при попытках исполнения на системах, где вы имеете другие пользовательские имена. Можно также попробовать использовать ssh.

      9. Q: При исполнении моей программы я получаю сообщения вида – ld.so: warning: /usr/lib/libc.so.1.8 has older revision than expected 9

      A: Вы пытаетесь выполнять программу на другой машине с устаревшей версией базисной библиотеки Cи. По разным причинам некоторые изготовители не делают

      общие библиотеки совместимыми со старыми ( и даже эксплуатируемыми) выпусками их программного обеспечения). Нужно, чтобы ваш системный администратор перевел

      машины на одинаковый программный уровень. Временно вы можете добавить параметр link-time для перехода к статической компоновке вместо

      динамической. Для некоторых рабочих станций Sun этот параметр есть –Bstatic. 10. Q: Программы никогда не запускаются. Даже tstmachines висит.

      A: Проверьте сначала, работает ли вообще rsh. Например, если вы имеете рабочие станции w1 и w2 и исполняете на w1, попробуйте

      rsh w2 true Это должно быстро завершится. Если нет, попробуйте

      rsh w1 true (то есть, заставьте rsh выполнять true на системе, на которой вы работаете). Если вы получите permission denied, посмотрите соответствующий help.

      Если же вы получите krcmd: No ticket file (tf.util) rsh: warning, using standard rsh:

      can't provide Kerberos auth data, то в вашей системе rsh неправильно установлена. Некоторые системы FreeBSD сталкивались с этой проблемой. Попросите вашего системного администратора исправить ошибку (часто она в несовместимости множества программ rsh/rshd). 11. Q: Выполняя версию для рабочих станций (-device=ch.p4), я получил сообщение об ошибке вида more slaves than message queues A: Это значит, что вы пытаетесь выполнять mpich не в том режиме, для которого она была сконфигурирована. В частности, вы указываете в вашем p4 procgroup файле, что несколько процессов должны совместно использовать память на некоторой машине. Для этого вы либо помещаете номер больше 0 в первую строку файла (где он определяет число локальных процессов кроме одного оригинального), либо число больше 1 в любую из следующих строк (где оно указывает общее количество процессов, совместно использующих память на этой машине). Вы должны либо изменить ваш файл procgroup, указав только один процесс в строке, или переконфигурировать mpich с configure –device=ch.p4 –comm=shared, что переконфигурирует устройство p4 так что многие процессы смогут разделять память на каждом хосте. Причиной того, что это не делается по умолчанию, есть то обстоятельство, что при такой конфигурации вы будете свидетелем активного ожидания на каждой рабочей станции, когда устройство мечется туда и сюда между выбором гнезда socket и проверкой внутренней очереди на совместно используемую память.

      12. Q: Мои программы по-видимому зависают в MPI.Init. A: Это может произойти по нескольким причинам:

      (a) Одна из выбранных вами для исполнения рабочих станций мертва (попробуйте `tstmachines' 5).

      (b) Вы скомпонованы с пакетом FSU pthreads; это, как сообщают, приводит к проблемам, особенно в системе с избранным вызовом, которая есть часть Unix

      и используется в mpich.

      Дело может быть и в том, что вы используете библиотеку `-ldxml' (расширение math library) на системах Digital Alpha. Было замечено, что это приводит к

      зависанию MPI.Init. Мы в настоящее время не знаем путей обхода. Свяжитесь с Digital, если вы хотите использовать вместе MPI и `-ldxml'. Корень проблемы

      в том, что устройство ch p4 использует SIG USR1, и поэтому всякая библиотека, которая также пользуется этим сигналом, может конфликтовать с действиями

      mpich в использовании ch p4. Вы можете перестроить mpich для использования другого сигнала посредством конфигурационного аргумента

      -listener.sig=SIGNAL.NAME и перестройки mpich. 13. Q: Моя программа (использующая устройство ch.p4) отказывает с p0.2005: p4.error: fork.p4: fork failed: –1 p4.error: latest msg from perror: Error 0

      A: Размер вашей выполняемой программы, может быть, слишком велик. Когда запускается программа устройства ch.p4 или ch.tcp, она может создавать свою копию для обработки некоторых задач коммуникаций. Из-за способа организации кода это (по крайней мере временно) есть полная копия вашей оригинальной программы и занимает тот же объем памяти. То есть если ваша программа больше половины максимально доступного пространства, вы получите вашу ошибку. В системах SGI вы можете воспользоваться командой size для получения размера исполнимой программы и применить swap –l для получения достаточного пространства. Заметим, что size выдает размер в байтах, а swap –l дает размер в блоках по 512 байтов. Другие системы также имеют подобные команды.

      Аналогичные проблемы могут случиться на IBM SPx, использующих устройства ch.mpl; причина та же, но она возникает внутри библиотеки IBM MPL.

      14. Q: Иногда я получаю ошибку Exec format error. Wrong Architecture.

      A: Вероятно, вы используете NFS (Network File System). NFS может отказать хранить файлы, обновленные по timely way ?; эта ошибка может иметь также

      причиной создание рабочей программы на одной машине и попытку использовать ее с другой машины. Обычно, NFS прерывается при появлении нового файла в

      пределах нескольких минут.

      Можно также попробовать использовать команду sync. Фактически mpirun пытается выполнить команду sync, но на многих системах sync – опытная

      команда и не гарантировано, что файловая система совместима с ней. 15. Q: По-видимому, имеются по две копии моей программы при исполнении на каждом узле. Это удваивает требование памяти в моей программе. Нормально ли это? 5`tstmachines' не поддерживается в системе globus2.

      A: Да, это нормально. В реализации ch.p4 второй процесс используется для динамического установления связи с другими процессами. В версии MPICH

      1.1.1 это действие может быть помещено в отдельный поток thread на многих архитектурах, и этот второй процесс невидим. Чтобы задействовать его, задайте параметр –threaded.listener для `configure' в `mpid/ch.p4/p4'.

      Это можно сделать, употребив –p4.opts=-threaded.listener в команде configure в командной строке для mpich.

      16. Q: MPI.Abort иногда не работает. Почему? A: В настоящее время (версия 1.2.1) процессы узнают, что другой процесс был убит только при попытке получить от него сообщение. Поэтому возможно, что процесс, занятый вычислениями, не замечает, что один из равноправных с ним процессов выдал MPI.Abort, хотя во многих обычных формах коммуникаций это не является проблемой. Это будет исправлено в следующих версиях.

      9.3.3 Intel Paragon

      В начало страницы

      1. Q: Как я должен выполнять задания с mpirun под управлением NQS на моем Paragon?

      A: Укажите в mpirun аргумент –paragontype nqs.

      9.3.4 IBM RS6000

      В начало страницы

      1. Q: Пытаясь выполнить программу на IBM RS6000 с устройством ch.p4, я получал % mpirun –np 2 cpi Could not load program /home/me/mpich/examples/basic/cpi

      Could not load library libC.a shr.o Error was: No such file or directory

      A: Это значит, что MPICH была построена с компилятором xlC, но одна из машин, указанных в вашем файле `util/machines/machines.rs6000'не имеет

      установленного xlC. Нужно или установить xlC или перестроить MPICH для использования другого компилятора (или xlc или gcc; gcc имеет преимущество

      в том, что никогда не имел лицензионных ограничений).

      9.3.5 IBM SP

      В начало страницы

      1. Q: При запуске мое программы на IBM SP я получил такое:

      $ mpirun –np 2 hello ERROR: 0031-124 Couldn't allocate nodes for parallel execution. Exiting … ERROR: 0031-603 Resource Manager allocation for task: 0, node: me1.myuniv .edu, rc = JM.PARTIONCREATIONFAILURE ERROR: 0031-635 Non-zero status –1 returned from pm.mgr.init

      A: Это значит, что или mpirun пытается запустить задания на вашем SP способом, неподдерживаемым на вашей установке, или что имеется неисправность

      в вашем программном обеспечении IBM, управляющем параллельными заданиями (все эти сообщения об ошибках происходят от команды IBM poe, которую mpirun

      использует для запуска задания MPI). Обратитесь к вашему системному администратору за разъяснением ситуации. Ваш системный администратор может

      использовать dsh –av «ps aux – egrep –i 'poe-pmd-jmd'»

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

      Файлы /tmp/jmd.err на отдельных узлах могут также содержать полезную диагностическую информацию.

      2. Q: Пытаясь выполнять программу на IBM SP, я получаю такие сообщения от mpirun:

      ERROR: 0031-214 pmd: chdir !/a/user/gamma/home/mpich/examples/basic?

      ERROR: 0031-214 pmd: chdir !/a/user/gamma/home/mpich/examples/basic? A: Эти сообщения идут от системы IBM, а не от mpirun. Они могут иметь причиной несовместимость между POE, автомонтировщиком (особенно автомонтировщиком AMD) и оболочкой, особенно если вы пользуетесь оболочкой, отличной от ksh.

      Тут нет хорошего решения; IBM обычно рекомендует изменить оболочку на ksh! 3. Q: Когда я пытался выполнять свою программу на IBM SP , я получал

      ERROR : Cannot locate message catalog (pepoe.cat) using current NLSPATH INFO : If NLSPATH is set correctly and catalog exists, check

      LANG or LC.MESSAGES variables (C) Opening of «pepoe.cat» message catalog failed

      (и другие варианты с упоминанием NLSPATH и «message catalog»). A: Это ошибки в вашей системе. Войдите в контакт с обслуживающим персоналом.

      Пусть они проверят (a) значение NLSPATH, (b) связи от `/usr/lib/nls/msg/prime' к каталогом соответствующих языков. Приведенные

      сообщения поступают не от MPICH, а от кода IBM POE/MPL, который использует реализация MPICH.

      4. Q: Пытаясь выполнить программу на IBM SP, я получил такое сообщение:

      ERROR: 0031-124 Less than 2 nodes available from pool 0 A: Это значит, что система IBM POE/MPL не может отвести затребованные узлы, когда вы пытаетесь запустить вашу программу; наиболее вероятно, что кто-то занимал систему. Можно попробовать использовать переменные окружения

      MP.RETRY и MP.RETRYCOUNT для побуждения задания ждать освобождения узлов. 5. Q: При выполнении на IBM SP мое задание выдало сообщение:

      Message number 0031-254 not found in Message Catalog. И затем было окончено. A: Если ваше пользовательское имя имеет длину 8 знаков, возможно, что причина в ошибке в реализации IBM POE. Надо было бы попробовать во время получения этого сообщения использовать регистрационную запись длиной в 7 знаков или меньше. Спросите вашего представителя IBM о PMR 4017X (poe с идентификаторами пользователей длины 8 не работают) и связанных с ними

      APAR IX56566.

      9.4 Неудачи при старте программ.

      9.4.1 Общие вопросы

      В начало страницы

      1. Q: В некоторых системах можно увидеть /lib/dld.sl: Bind-on-reference call failed /lib/dld.sl: Invalid argument

      (это пример от HP-UX) или ld.so: libc.so.2: not found

      (этот пример от SunOS 4.1; подобные вещи случаются и на других системах). A: Причина в том, что ваша программа использует совместные библиотеки, а библиотеки недоступны на некоторых из машин, на которых исполняется ваша программа. Чтобы избавится от этого, перекомпонуйте вашу программу без совместных библиотек. Для этого нужно добавить на шаге компоновки в командную строку соответствующие параметры. Например, для системы HP, которая выдала приведенную выше ошибку, используйте на шаге компоновки –Wl,-Bimmediate.

      Для SunOS соответствующий параметр будет –Bstatic.

      9.4.2 Сети рабочих станций.

      В начало страницы

      1. Q: Я могу исполнять программу с небольшим количеством процессов, но однажды, когда я запросил больше чем 4-8 процессов, я не получил результатов от всех

      своих процессов и программа так и не завершилась. A: Мы видели такие проблемы на установках, использующих AFS. Программа отдаленной оболочки, rsh, пользующаяся несколькими системами AFS, ограничивала количество заданий, которые могут использовать стандартный вывод. Она, по-видимому, также не давала некоторым из процессов нормально завершиться, что приводило к зависанию заданий. Имеется четыре способа выхода из этой ситуации: (a) Использовать разные команды rsh. Вероятно, это можно сделать, расположив впереди на вашем PATH каталог, содержащий не-AFS версию. Но этот вариант может быть недоступен вам из-за вашей системы. При одном узле не-AFS версия находится в `/bin/rsh'. (b) Использовать сервер безопасности (serv.p4). См. дискуссию в Руководстве пользователя. (c) Перенаправить все стандартные выходы в файл. Подпрограмма MPE MPE.IO.Stdout.to.file может сделать это.

      (d) Получить фиксированную команду rsh.

      Вероятный источник проблемы – неправильное использование выбранного обращения к системе в команде rsh. Если код делает что-то вроде

      int mask; mask –= 1 !! fd; select( fd+1, &mask, … ); вместо

      fd.set mask; FD.SET(fd,&mask); select( fd+1, &mask, … ); то код ошибочный (выбранный вызов изменен много лет назад, чтобы допускать более чем 32 файловых дескрипторов, а программа rsh (или программист!) не

      меняются с течением времени).

      Четвертая возможность – получить версию AFS для rsh, которая исправляет эту ошибку. Поскольку мы сами не пользуемся AFS, мы не знаем, есть ли такая заплатка.

      2. Q: Не все процессы стартуют.

      A: Это может случиться при использовании устройства ch.p4 в системе, которая имеет чрезвычайно малый предел для количества отдаленных оболочек, которые вы можете иметь. Некоторые системы, использующие «Kerberos» (пакет сетевой безопасности) допускают только 3 или 4 дистанционные оболочки; на этих системах размер MPI.COMM.WORLD ограничен до того же количества (плюс один, если вы используете локальный хост). Единственный путь обхода этого – попробовать сервер безопасности; это описано в Руководстве по установке mpich. Заметим, что вы должны запускать серверы «вручную», поскольку сценарий chp4.servs использует отдаленную оболочку для запуска серверов.

      9.5 Программы отказывают после старта.

      9.5.1 Общие вопросы.

      В начало страницы

      1. Q: Я использую MPI.Allreduce, и я получаю разные ответы в зависимости от количества используемых процессов.

      A: Коллективные подпрограммы MPI могут использовать ассоциативность, чтобы добиться лучшего параллелизма. Например, одна из

      MPI.Allreduce( &in, &out,MPI.DOUBLE, 1, … ); могла вычислять в порядке (((((((a + b) + c) + d) + e) + f ) + g) + h) или в таком:

      ((a + b) + (c + d)) + ((e + f ) + (g + h)), где a, b, …. есть значения, полученные в восьми процессах. Приведенные выражения эквивалентны для целых, вещественных и других обычных объектов математики, но не эквивалентны

      для таких типов данных как числа с плавающей точкой в компьютерах. Ассоциативность, которую использует MPI, зависит от количества процессов, и вы можете получить разные результаты при различных их количествах. Заметим, что вы не получите неверный результат, а только несколько отличный (большинство программ предполагают ассоциативность арифметических операций).

      2. Q: Я получил сообщение No more memory for storing unexpected messages when running my program.

      A: mpich была сконфигурирована для «агрессивной» доставки сообщений. Это свойственно для определенного типа параллельных программ и может дать высокую производительность. Вместе с тем это может привести к нехватке памяти для прикладной программы, когда сообщения доставляются быстрее, чем обрабатываются. Реализация mpich старается управлять использованием памяти, но в этом направлении еще не все сделано.

      Для избежания этой проблемы вы можете ввести синхронизацию отсылок или барьеры в вашем коде. Необходимость этого будет устранена в следующих версиях mpich;

      версия 1.2.0 и последняя гораздо более экономны в использовании памяти. 3. Q: Моя программа на Fortran прерывается ошибкой типа BUS.

      A: Компилятор с Cи, с помощью которого построена MPICH, и Fortran-компилятор, который используете вы, имеют разные правила для выравнивания по границам адресов объектов, подобных DOUBLE PRECISION. Например, компилятор GNU C gcc может предполагать, что все двойные выравниваются по восьми байтовой границе, но язык Фортран требует выравнивания DOUBLE PRECISION только для INTEGER, которые располагаются на 4-байтной границе. Здесь трудно указать хороший обход. Попробуйте перестроить MPICH с компилятором Cи, который имеет более слабые требования к выравниванию. Некоторые компиляторы с Фортрана позволяют вам потребовать 8-байтового выравнивания для DOUBLE PRECISION (например. –dalign или –f на некоторых компиляторах Sun Fortran); заметим, впрочем, что это может испортить некоторые правильные программы на Fortran, которые используют Фортрановские правила ассоциации памяти. Некоторые версии gcc могут поддерживать –munaligned-doubles; mpich нужно перестроить с этим параметром, если вы используете gcc версии 2.7 или позднейших.

      4. Q: Я использовал и вилки fork для создания нового процесса и создавал новый порожденный процесс, но моя программа не работала.

      A: Реализация mpich не является безопасной для многопоточной организации is not thread safe и не поддерживает ни вилки, ни создание новых процессов. Отметим, что спецификации MPI многопоточно безопасны, но от реализаций этого не требуется. В этом контексте не многие реализации многопоточно безопасны, прежде всего потому, что это снижает производительность реализации MPI (по крайней мере нужно проверять необходимость блокировки процессов, так как фактическое блокирование и снятие блокировки еще дороже). Реализация mpich использует вызов MPI.Init.thread; с помощью этого вызова( новости в MPI-2) вы можете выяснить, какой уровень порожденных процессов поддерживает реализация MPI. Что касается версии 1.2.0 mpich, то она поддерживает только MPI.THREAD.SINGLE. Мы надеемся, что версии 1.2.0 и следующая поддерживают

      MPI.THREAD.FUNNELED (и некоторые пользователи употребляли mpich в этом режиме) но мы сами этого не проверяли. Будущие версии mpich

      должны будут обеспечивать MPI.THREAD.MULTIPLE. Q: Программы C++ выполняют глобальные деструкторы (или конструкторы) большее количество раз, чем ожидалось. Например:

      class Z – public:

      Z() – cerr !! «*Z» !! endl; «» ~Z() – cerr !! «+Z» !! endl; «» «»; Z z; int main(int argc, char **argv) –

      MPI.Init(&argc, &argv); MPI.Finalize(); «» при выполнении с устройством ch.p4 на двух процессах выполняли деструктор

      дважды на каждом процессе. A: Количество процессов, выполняемых до MPI.Init или после MPI.Finalize не определено в стандарте MPI; нельзя полагаться на какое-то определенное поведение. В случае устройства ch.p4 новый процесс разветвляется для обработки требуемых связей; он заканчивается с концом программы.

      9.5.2 HPUX

      В начало страницы

      1. Q: Моя Fortran-программа по-видимому отказала с SIGSEGV при выполнении на рабочих станциях HP.

      A: Попробуйте компиляцию и компоновку Fortran-программ с параметром +T.

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

      9.5.3 Устройство ch shmem.

      В начало страницы

      1. Q: Моя программа иногда зависает при использовании устройства ch.shmem.

      A: Проверьте, что вы при компоновке используете правильные библиотеки.

      Если вы не используете mpicc, попробуйте ее для компоновки в вашей программе.

      Резон для этого в том, что правильные действия в версии с совместной памятью зависят от дополнительных, обеспечиваемых системой библиотек. Например, в

      Solaris, должна использоваться библиотека с многопоточной поддержкой.

      В противном случае в дело пойдут подпрограммы mutex из 'libc' , критичные для правильного функционирования реализации MPI.

      9.5.4 LINUX

      В начало страницы

      1. Q: Процессы отказывают с сообщениями вида p0.1835: p4.error: Found a dead connection while looking for messages: 1

      A: Дело в том, что реализация TCP на этой платформе решает, что связь «отказала», хотя на самом деле этого нет. Текущая реализация MPICH предполагает, что реализация TCP не будет закрывать связи и не имеет кода для реанимации оборвавшихся связей. В следующих версиях MPICH этот недостаток будет устранен. Кроме того, некоторые пользователи находят, что единственное процессорное ядро более устойчиво, чем ядро SMP.

      9.5.5 Сети рабочих станций.

      В начало страницы

      1. Q: Мое задание доходит до завершения, но выход сопровождается сообщением:

      Timeout in waiting for processes to exit.

      Это может иметь причиной дефект в программе rsh. (Было замечено, что некоторые версии Kerberos rsh имеют этот недостаток). Это не связано с P4 или MPICH, а происходит от операционного окружения. Для многих приложений это только замедляет процесс окончания. Что это все означает?

      A: Если что-то заставляет MPI.Finalize занимать больше 5 минут, подозрение падает на реализацию rsh. Эта программа в установке Kerberos предполагает, что sizeof(FD.SET) == sizeof(int). Это значит, что программа rsh считает

      наибольшее значение FD равным 31. Когда программа использует вилку для создания процессов, которые запускают rsh, поддерживая stdin/out/err для

      разветвленных forked процессов, то это предположение отбрасывается, поскольку FD, которое rsh создает для гнезда socket, может быть ? 31 ???, если исполняется достаточное количество процессов. Симптомом такой испорченной реализации rsh может быть отсутствие завершения задания, потому что задания с

      rsh дожидаются (выборочно) закрытия гнезда. Устройство ch.p4mpd исключит эту проблему, если это устройство готово для общего употребления.

      9.6 Неприятности с вводом и выводом.

      9.6.1 Общие вопросы

      В начало страницы

      1. Q: Я хочу, чтобы результат от printf появлялся немедленно.

      A: На самом деле это – свойство вашей C и/или Fortran системы исполнения.

      Для Си рассмотрите setbuf( stdout, (char *)0 );

      9.6.2 IBM SP

      В начало страницы

      1. Q: В коде моей программы содержатся подсказки пользователю с последующим вводом со стандартного входа. На системах IBM SP подсказка не появляется до тех пор, пока пользователь не ответит на подсказку!

      A: Это – свойство системы IBM POE. Имеется подпрограмма POE, mpc.flush(1), которую вы можете использовать, чтобы подстегнуть вывод. Прочтите об этой подпрограмме в man page; она синхронизируется со всем заданием и не может работать, если не все процессы в MPI.COMM.WORLD вызвали ее. Как альтернативу, вы можете всегда оканчивать вывод знаком новой строки («n); это побудит вывод к действию, но будет также помещать пользовательский вход на следующую строку.

      9.6.3 Сети рабочих станций.

      В начало страницы

      1. Q: Я хочу направлять стандартный вывод (stdout) от каждого процесса в отдельный файл.

      A: mpich не имеет встроенного пути для этого. Наоборот, она гордится тем, что собирает для вас стандартные выводы. Вы можете предпринять одно из следующего: (a) Использовать встроенные команды Unix для перенаправления stdout изнутри вашей программы (dup2, etc.). Подпрограмма MPE MPE.IO.Stdout.to.file, в

      `mpe/mpe.io.c', показывает один из путей для этого. Заметим, что в Fortran подход с использованием dup2 будет работать только если Fortran PRINT пишет в stdout. Это обычно, но не универсально.

      (b) Писать явно в файлы вместо stdout (используя fprintf вместо printf, и т.д.). Имя файла можно задать с помощью ранга процесса. Это самый универсальный

      способ.

      9.7 Upshot and Nupshot

      В начало страницы

      Программы upshot и nupshot требуют специальные версии языков tcl и tk. В этом разделе описываются только проблемы, которые могут обнаружиться, если эти

      инструменты успешно построены.

      9.7.1 Общие вопросы.

      В начало страницы

      1. Q: Когда я пытаюсь исполнять upshot или nupshot, я получаю No display name and no $DISPLAY environment variables

      A: Ваша проблема проистекает от вашего X-окружения. Upshot есть X-программа. Если имя вашей рабочей станции есть `foobar.kscg.gov.tw', то перед выполнением любой X-программы вам необходимо выполнить

      setenv DISPLAY foobar.kscg.gov.tw:0 Если вы исполняетесь на какой-нибудь другой системе и выдаете на foobar, вам может понадобиться xhost +othermachine на foobar, или даже xhost + , что дает всем другим машинам разрешение писать на дисплей foobar. Если вы не имеете X-дисплея (зарегистрированы на машине Windows без возможностей X ), то вы не можете использовать upshot.

      2. Q: Стараясь выполнить upshot , я получил upshot: Command not found.

      A: Сначала проверьте, присутствует ли upshot на вашем пути. Вы можете использовать для этого команду which upshot. Если он лежит на вашем пути, причина может быть в том, что имя интерпретатора wish слишком длинно для вашей системы 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

      9.7.2 HP-UX

      В начало страницы

      1. Q: Пытаясь исполнить upshot под HP-UX, я получал сообщения об ошибке вида set: Variable name must begin with a letter. Или

      upshot: syntax error at line 35: `(' unexpected A: Ваша версия HP-UX ограничивает имена оболочек очень короткими строками. Upshot есть программа, которая выполняется оболочкой wish , и по какой-то причине HP-UX отказывает в исполнении в этой оболочке и одновременно пытается выполнить программу upshot, используя вашу текущую оболочку (например, `sh' или `csh'), вместо выдачи истинного сообщения об ошибке от слишком большой длины командного имени. Исправить дело можно двумя способами:

      (a) добавить звено с более коротким именем, например ln –s /usr/local/tk3.6/bin/wish /usr/local/bin/wish

      Затем обновить сценарий upshot с использованием этого короткого имени.

      Это может потребовать корневого доступа, в зависимости от того, где вы проложите звено.

      (b) Создать регулярную программу оболочки с строками #! /bin/sh /usr/local/tk3.6/bin/wish –f /usr/local/mpi/bin/upshot

      (с подходящими именами для обеих исполнимых `wish' и `upshot').

      Также сформируйте файл для сообщения об ошибке в HP. И последнее, сообщение об ошибке здесь неправильно; также ни к чему ограничивать общие

      выборы оболочки ( в противоположность оболочкам регистрации).


<<< Оглавление Страницы: 9  A >>>