Next:4.4. Получение информации о системе и управление процессами
Up:4. МНОГОПРОЦЕССОРНАЯ ВЫЧИСЛИТЕЛЬНАЯ СИСТЕМА nCUBE2
Prev:4.2. Структура программного обеспечения nCUBE2

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 (далеко не полный перечень):

-c
Запретить фазу редактирования связей и сохранить все полученные объектные файлы.
-g
Генерировать при компиляции дополнительную информацию для отладчика.
-help
Вывести список опций ncc. То же при запуске ncc без аргументов.
-L dir
Добавить директорию dir в список директорий, в которых редактор связей nld ищет библиотеки.
-l name
Подключить библиотеку libname.a. Порядок поиска в библиотеках зависит от положения в командной строке других библиотек и объектных файлов.
-O
Оптимизировать объектный код. После окончания отладки программы использовать эту опцию обязательно. Выигрыш в производительности может быть очень существенный (в 2-3 раза).
-o file
Присвоить исполнимому модулю указанное имя file вместо используемого по умолчанию имени a.out.
-I dir
Добавить директорию dir к стандартному пути поиска include-файлов. В случае нескольких опций -I директории просматриваются в порядке их следования.
-p
Генерировать дополнительную информацию для профилировщика nprof.
-bounds
Проверять границы массивов. При выходе индексов массива из границ программа останавливается и вызывается отладчик.
-d num
Задать размерность подкуба, который по умолчанию будет выделяться программе при запуске, если его размерность не будет указана в команднлй строке. По умолчанию программы компилируются для работы на 0-мерном кубе, то есть на единственном узле.

При отсутствии аргументов в команде 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.

  1. Загрузка программы из командного интерпретатора хост-компьютера с помощью команды xnc.
  2. Загрузка slave-программы (ведомой) из master-программы (головной), исполняющейся на хост-компьютере, с помощью подпрограмм специальной библиотеки хост-компьютера libncube.a:

    Примечание: Помимо этих функций в состав библиотеки входят функции, обеспечивающие обмен информацией между master- и slave-программами.

  3. Загрузка slave-программы из master-программы, выполняющейся на nCUBE2, с помощью подпрограмм Run-time библиотеки:

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

Например, команда
xnc -d 5 prog
загружает программу prog в 5-мерный подкуб (32 процессора).

Систаксис команды xnc:
xnc [ options ] [ program [ args ]]
где
program - имя исполнимого файла;
args - список аргументов, передаваемых программе.

Наиболее важные опции команды xnc:

-d dim
Выделить подкуб размерности dim. Количество выделяемых процессоров равно 2dim (по умолчанию 0).
-F
Блокировать вызов отладчика при ошибке во время выполнения.
-g
Запустить задачу в фоновом режиме.
-l loadfile
Использовать информацию для загрузчика из файла loadfile. Этот механизм позволяет загружать в различные процессоры подкуба разные программы (реализация режима программирования Multiple Programs Multiple Data - MPMD). Каждую строку файла загрузчик xnc выполняет как отдельную загрузку, но синхронизирует все программы перед их выполнением.
-Ncomm size
Задать размер коммуникационного буфера size байт; по умолчанию 65536. Эта опция аннулирует значение Ncomm, установленное командой ncc.
ВНИМАНИЕ: это очень важная опция - если размер передаваемого сообщения больше размера буфера, то возможно зависание программы или выход по ошибке.
-Nfile count
Задать максимальное число файлов count, которые могут быть открыты одновременно (по умолчанию 8). Эта опция аннулирует значение Nfile, установленное в ncc.
-T timeout
Устанавливает время выполнения программы timeout секунд. Если запущенная программа не завершится в течение указанного времени, процесс 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




Next:4.4. Получение информации о системе и управление процессами
Up:4. МНОГОПРОЦЕССОРНАЯ ВЫЧИСЛИТЕЛЬНАЯ СИСТЕМА nCUBE2
Prev:4.2. Структура программного обеспечения nCUBE2