4.3. Работа на многопроцессорной системе nCUBE2
Технологический цикл разработки параллельных прикладных программ включает:
Подготовка текстов программ производится на хост-компьютере с помощью стандартных средств UNIX систем (vi, mc или nedit и xmedit при работе в X-window среде). Текст программы может также готовиться на персональном компьютере с последующей передачей на хост-компьютер с помощью средств ftp. В этом случае передачу файла следует производить в текстовом формате для преобразования из DOS формата в UNIX формат. Если коммуникационная программа такого преобразования не выполняет, то следует воспользоваться утилитами преобразования dos2unix (на SUN), to_unix (на SGI).
Компиляция параллельных программ осуществляется на хост-компьютере с помощью команды ncc, которая представляет собой интерфейс к компилирующим системам с языков C и FORTRAN77. Вызов той или иной системы происходит в зависимости от расширения имени исходного файла ('.с' для программ на языке C и '.f' для программ на языке FORTRAN). Двоичные коды хост-компьютера и многопроцессорной системы nCUBE2 несовместимы между собой.
Синтаксис команды ncc:
ncc [[options] sourcefiles [-l libraries]]
Примечание: в скобках здесь и далее будут помечаться необязательные компоненты командной строки.
Наиболее часто используемые опции ncc (далеко не полный перечень):
При отсутствии аргументов в команде ncc выдается подсказка по ее использованию.
Для компиляции программы myprog.c
в режиме оптимизации должна быть набрана команда:
ncc -O -o myprog myprog.c
В результате будет создан исполнимый файл с именем myprog
. Если на приглашение командного интерпретатора хост-компьютера набрать имя созданной программы
myprog
то она автоматически загрузится в первый свободный процессор nCUBE2.
Команда
ncc -O -d 4 -o myprog myprog.c
создаст исполнимый модуль, который автоматически будет загружаться в первый свободный подкуб размерности 4, т.е. в подкуб из 16 процессоров. Более гибкое управление загрузкой выполняется командой xnc.
Запуск программ на многопроцессорной системе nCUBE2. Программное обеспечение nCUBE2 предоставляет три различных варианта загрузки программ в многопроцессорную систему nCUBE2.
nopen
открывает подкуб требуемой размерности;nodeset
специфицирует список процессоров для загрузки;rexec
загружает указанную программу в nCUBE2.Примечание: Помимо этих функций в состав библиотеки входят функции, обеспечивающие обмен информацией между master- и slave-программами.
nodeset
специфицирует список процессоров для загрузки;rexec
загружает указанную программу в nCUBE2.Наиболее типичным вариантом запуска программ на многопроцессорной системе nCUBE2 является запуск ее из командного интерпретатора хост-компьютера с использованием загрузчика xnc. В этом случае вне зависимости от того, для какого числа процессоров была откомпилирована программа, одна и та же копия программы будет загружена в требуемое число процессоров.
Например, команда
xnc -d 5 prog
загружает программу prog
в 5-мерный подкуб (32 процессора).
Систаксис команды xnc:
xnc [ options ] [ program [ args ]]
где
program
- имя исполнимого файла;
args
- список аргументов, передаваемых программе.
Наиболее важные опции команды xnc:
При отсутствии каких-либо аргументов в команде xnc выдается подсказка по использованию этой команды.
Команда xnc загружает исполнимый модуль в первый свободный подкуб запрошенной размерности и передает запросы ввода/вывода системе ввода/вывода хост-компьютера. Следовательно, программе может быть выделено 1, 2, 4, 8, 16 и т.д. процессоров. Для адресации процессоров прикладная программа использует логические номера процессоров в пределах подкуба, а не физические аппаратные адреса. В пределах подкуба процессоры нумеруются с 0. Например, любой 2-мерный подкуб имеет четыре процессора с логическими номерами 0, 1, 2, 3. При этом прикладная программа ограничена выделенным пространством узлов, т.е. не может взаимодействовать с узлами за пределами выделенного подкуба. При отсутствии свободного подкуба запрошенной размерности запрос на запуск программы просто отвергается. После завершения программы процесс xnc автоматически освобождает процессоры, после чего они могут быть выделены для других программ.
Программы, требующие длительного времени для своего выполнения, могут быть запущены в
фоновом режиме с перенаправлением ввода/вывода:
xnc -d 4 myprog [<inputfile ] > outputfile &
где
inputfile
- файл с входной информацией;
outputfile
- файл для выходной информации;
&
- символ, означающий исполнение задачи в фоновом режиме.
Вопросы, связанные с загрузкой выполняемых модулей из других программ, т.е. организацию режима master-slave, в данном руководстве мы рассматривать не будем.
Отладка параллельных программ. Среда параллельного программирования включает два отладчика:
Оба отладчика позволяют:
Примечание: для работы с отладчиком программа должна быть скомпилирована с опцией -g.
Отладчик ndb вызывается автоматически, если программа при выполнении на nCUBE2 завершается аварийно. После вызова отладчика появляется приглашение на ввод команд. Наиболее полезной командой для определения текущего состояния программы является команда where
, которая показывает точку останова, несколько верхних уровней стека вызванных подпрограмм и их аргументы. Для просмотра значений переменных служит команда print
. Например, можно выдать на терминал значения переменных X и Y, набрав:
ndb> print X, Y X = 12 Y = 0.145
ВНИМАНИЕ: отладчик не работает при запуске программ с хост-компьютеров второго уровня. Для работы с ним программа должна быть запущена с главного хост-компьютера sgi1.rnd.runnet.ru, причем из оболочки csh или sh (не tcsh или bash).
Профилирование параллельных программ позволяет получить детальные сведения о процессе исполнения программы, анализируя которые можно существенно повысить ее производительность. Утилиты профилирования:
xtool | - | профилирует выполнение программы, подсчитывая время, которое программа тратит на исполнение каждой из подпрограмм на каждом процессоре; |
ctool | - | профилирует сообщения программы, следит за трафиком межпроцессорных сообщений и подсчитывает накладные расходы программы на различные виды коммуникационных операций; |
etool | - | профилирует определенные пользователем события, запоминая время наступления события, тип события, значение указанной переменной программы на момент наступления события. |
В процессе профилирования исполняемой программы собранные данные сохраняются в файлах exprof.prx, exprof.prc, exprof.pre.
Для активизации профилировщиков xtool, ctool и etool надо переменной окружения EXPROF_SWITCHES присвоить символьное значение, являющееся любой комбинацией соответственно букв x, с и е. Например, после исполнения команды
setenv EXPROF_SWITCHES xс
при запуске любой программы на nCUBE2 будет происходить сбор информации для профилировщиков в файлах exprof.prx и exprof.prc. Эту информацию можно будет проанализировать, запустив один
из выбранных профилировщиков:
xtool myprog
ctool myprog