Средства разработки программ на компьютере Alpha DS20E
/ Компиляция программ / Библиотеки подпрограмм /
/ Отладка программПрофилирование программ /
/ Средства разработки параллельных программ /
/ Средства визуализации данных /
    Компьютер Compaq Alpha DS20E работает под управлением операционной системы Tru64 UNIX  4.0F (сама система идентифицирует себя как OSF1), разработанной фирмой Compaq, и является на сегодня самым мощным компьютером в ЮГИНФО ЮФУ. Основное назначение - решение объемных вычислительных задач, поэтому вопросам поддержки различных сервисных служб не уделяется большого внимания. Общее руководство для программистов см. здесь.

Компиляция программ
     На системe установлено два комплекта компиляторов - свободно распространяемый пакет проекта GNU (версия egcs-1.1.2) и пакет компиляторов фирмы Compaq.
    Компиляторы проекта GNU

gcc - компилятор  языка С
g77 - компилятор языка Фортран77
g++ - компилятор языка С++
Для отладки программ следует использовать отладчик gdb.
Компиляторы оптимизирующие, поддерживается три уровня оптимизации (опции -O, -O2, -O3 ). Эти компиляторы рекомендуется использовать только для компиляции приложений, распространяемых в рамках проекта GNU. В отличие от компьютеров SUN, на компьютере Alpha нет количественного ограничения на использование фирменных компиляторов, которые на сегодня считаются одними из лучших в мире. Поэтому для высокопроизводительных вычислений рекомендуется использовать компиляторы, поставляемые фирмой Compaq.
    Компиляторы  фирмы Compaq
cc - компилятор  языка С
f77 - компилятор языка Фортран77
f90 - компилятор языка Фортран90
f95 - компилятор языка Фортран95
cxx - компилятор языка С++
Компиляторы оптимизирующие, поддерживается  пять уровней оптимизации (опции -O1, -O2, -O3, -O4, -O5;  задание опции -O соответствует уровню -O4 на Фортране ). Сочетание опций -fast -On, задает режим максимального ускорения программы на соответствующем уровне оптимизации. Для отлаженных программ включение оптимизации обязательно. В большинстве случаев ускорение работы программы может достигать 2-3 раз. Компилятор f77 на самом деле является символьной ссылкой на компилятор f90. Чтобы использовать чистый f77, следует набрать команду f77 -old_f77.
Отладка программ выполняется с помощью отладчика dbx  или более мощного ladebug. Типичная строка компиляции простой программы имеет вид
f77 -fast -O4 -o prog prog.f
Удобным средством поддержки больших проектов, когда текст программы разбит на несколько файлов, является утилита make. Она ищет в текущем каталоге файлы makefile или Makefile, которые представляют собой инструкции, описывающие, какие действия должны быть выполнены для достижения конечной цели проекта (обычно такой целью является получение исполнимого файла программы). Имеется краткое описание этой утилиты на русском языке (см. здесь).  Пример простого Makefile, пригодного для компиляции программ с языков С и Фортран77 (в том числе и на смеси языков),  см. здесь. Разработаны универсальные Makefiles  для компиляции программ на любой из высокопроизводительных систем (для языков   Фортран, С, С++). В этих Makefiles следует только выбрать архитектуру системы, на которой будет выполняться компиляция программы, и изменить значения переменных PROG (имя программы) и OBJ (список файлов, содержащих вашу программу с расширением .о).

Кроме перечисленных компиляторов,  к средствам разработки программ можно отнести командные языки (sh, ksh,csh,tcsh), а также высокоуровневые интерпретирующие языки Perl и Tcl/Tk.

Библиотеки подпрограмм ускоряют разработку программ и позволяют получить на системах максимальную производительность. Как правило, высокие результаты тестов производительности, публикуемые производителями вычислительных систем, достигаются использованием высокооптимизированных библиотек.

1. Compaq Extended Math Library (CXML или DXML) - по своему составу близка к библиотеке  Sun Performance Library, однако имеет некоторые отличия. В ее состав не входят подпрограммы пакета LINPACK, но зато имеется пакет подпрограмм для решения систем линейных алгебраических уравнений с разреженными матрицами ( как прямыми методами, так и итерационными).  Описание библиотеки в pdf формате - см. здесь.  Может использоваться со всеми компиляторами, однако хранение данных подразумевается фортрановское. Библиотека подключается стандартным образом:

f77 -O -o progname progname.f -lcxml
2. ATLAS (Automatically Tuned Linear Algebra Software) - новая версия самонастраивающейся библиотеки BLAS (Basic Linear Algebra Subprograms). Подпрограммы этой библиотеки реализуют базовые операции векторной и матричной алгебры и широко используются совместно с другими библиотеками.  Имеются интерфейсы к языкам C и Фортран.  Совместно с библиотекой LAPACK (свободно распространяемой и соответственно не оптимизированной) демонстрирует производительность, сравнимую с CXML.  Подключение библиотеки:
сс -fast -O4 -o progname progname.c -lcblas -latlas   -на языке С
f77 -fast -O4 -o progname progname.f -lf77blas -latlas -на языке Фортран
3. ARPACK (ARnoldi PACKage) - библиотека подпрограмм на языке Фортран77 для нахождения собственных значений и собственных векторов разреженных матриц большого размера. Она может использоваться только компиляторами с языка Фортран фирмы Compaq, причем совместно с библиотекой CXML. Подключение библиотеки:
f77 -fast -O4 -o progname progname.f -larpack -lcxml
5.FFTW - быстрое преобразование Фурье

Отладка программ. В зависимости от используемых компиляторов для отладки программ следует использовать либо отладчик gdb  (компиляторы GNU), либо отладчик  dbx  (компиляторы  Compaq). Подробное описание отладчика gdb можно найти здесь, а описание dbx в соответствующем разделе документации ( см. здесь).  Фирма Compaq поставляет альтернативный отладчик ladebug, который может использоваться как в режиме командной строки, так и вызываться через графический интерфейс dxladebug.  Имеется руководство по работе с отладчиком, как в режиме командной строки, так и через графический интерфейс ( см. здесь). Кроме того, на компьютере Alpha, как и на всех других компьютерах, установлен графический интерфейс  ddd к стандартным отладчикам gdb и dbx. Он поддерживает работу со множеством отладчиков, поэтому его нужно предварительно настроить на определенный тип. Запускается он командой ddd &. Затем в разделе меню Edit выбирается пункт Preferences. После нажатия на этот пункт появится новое окно, в котором в разделе Startup и следует установить требуемый отладчик. Для отладки программы с помощью этого приложения следует набрать команду:

ddd progname &
В этом случае в центральном окне приложения сразу появится текст вашей головной программы. Порядок работы с отладчиком интуитивно ясен, он очень похож на интегрированные среды ОС Windows. Это приложение позволяет легко, с помощью мыши, расставлять точки останова и просматривать значения переменных наведением на них указателя мыши. В нижнем окне остается доступным командный режим работы с отладчиком.

Для работы со всеми отладчиками программы должны быть откомпилированы с опцией -g.

Правила работы со всеми отладчиками весьма схожи. Рассмотрим простейший сеанс работы с отладчиком dbx:
1. Компилируем программу в отладочном режиме

f77 -g -o progname progname.f
2. Запускаем программу через отладчик
dbx progname ,
при этом выдается довольно объемная шапка с различными подсказками. Листаем ее клавишей <пробел>, пока не появится приглашение на ввод команды.
3. Набираем команду run. При возникновении прерывания выдастся:
- сообщение о причине прерывания
- номер строки, где это произошло
- текст этой строки
С помощью команды print можно посмотреть значения переменных
print var
Некоторую осторожность следует соблюдать при печати массивов. Если массив большой, то его выдача может занять очень много времени. Чтобы избежать этого, следует печатать диапазон элементов
print vec(3:11)
4. Выходим из отладчика (команда quit).

Внимание!   На компьютере Alpha в отличие от компьютеров SUN и Linux-кластера выполнение программы останавливается при возникновении прерываний процессора  по делению на нуль, переполнению разрядной сетки и др., как при использовании компиляторов Compaq, так и компиляторов  GNU. Можно заблокировать эти прерывания специальными опциями ( при использовании компиляторов Compaq ).

Профилирование программ.  Профилирование  программ предоставляет простой и удобный механизм исследования выполнения программы с целью ее оптимизациию. В Tru64 Unix для этих целей используются стандартные Unix утилиты:
prof - построение плоского профиля программы, подсчитывающего количество вызовов каждой функции и общее время их выполнения. Для этого программа должна быть скомпилирована с опцией -p .
gprof - построение графа выполнения программы. Граф вызовов показывает, для каждой функции, какие функции ее вызывали, какие функции вызывала она сама и сколько раз. Также здесь показано, сколько времени было затрачено на выполнение подпрограмм в каждой функции. Программа должна компилироваться с опцией -pg.
Итак, для построения плоского профиля следует:
    1. Откомпилировать программу в режиме профилирования
         cc -p -o prog prog.c
         f77 -p -o prog prog.f
    2. Запустить программу на исполнение. После окончания выполнения программы будет создан файл mon.out.
    3. Запустить команду prof для генерации отчета
        prof prog
Аналогичным образом выполняется построение графа вызовов.
Более детальную информацию смотри здесь

Средства разработки параллельных программ

1. Многопоточный режим

Поддержка многопоточного режима в операционной системе Tru64 UNIX осуществляется через Compaq Multithreading Run-Time Library - DECthreads. Пакет  DECthreads реализует стандарт POSIX 1003.1c threads с некоторыми расширениями.  Различные потоки могут выполняться параллельно на разных процессорах, разделяя одно и то же адресное пространство. Таким образом, этот механизм позволяет распараллелить выполнение программы для достижения максимальной производительности на многопроцессорной системе с общей памятью.
На компьютере Alpha организация многопоточного режима выполнения программы обеспечивается следующими компонентами:
- поддержка многопоточного режима компилятором cc ( опция -pthread );
- Run-Time библиотекой libpthread;
- поддержка многопоточности в математических библиотеках.
Детальное руководство по разработке многопоточных приложений см. здесь. Компиляция программ:
 cc -o myprog myprog.c -pthread
При этом, в отличие от MPI, на мультипроцессорной системе выполняется один счетный процесс, но использующий несколько процессоров.  Никакого автоматического или полуавтоматического распараллеливания компиляторы Compaq не поддерживают. Высокоуровневое распараллеливание реализовано через пакет DIGITAL Parallel Software Environment (PSE), который в настоящее время поддерживает только специальный язык параллельного программирования High Performance Fortran (HPF).

2. High Performance Fortran (HPF)

HPF представляет собой расширение языка Фортран90 для разработки параллельных программ для многопроцессорных систем. Это расширение состоит, во-первых, в добавлении некоторых языковых конструкций (например, оператора FORALL) и, во-вторых, некоторого набора директив компилятору о способе распределения данных и указании, какие циклы должны выполняться параллельно. Такой подход позволяет изготавливать параллельную версию программы путем вставки в  обычную программу строк с псевдокомментариями, не затрагивая самого текста программы. Обычный компилятор будет просто игнорировать эти строки. На компьютере Alpha файлы с программами на HPF должны иметь расширение .f90, а компиляция выполняется обычным компилятором с добавлением специальной опции (-wsf). Например:

f77 -fast -wsf -o prog prog.f90
При запуске программы на исполнение система будет запускать задачу на максимально доступном числе процессоров, в независимости от того, заняты они в данный момент или нет. Для указания, на каком числе процессоров должна выполняться программа, служит специальная опция:
prog -peers n ,
где n - число процессоров, на котором должна быть запущена программа. В нашем случае n может принимать значения 1 или 2.
Внимание!   Запуск программы на двух процессорах, если занят хотя бы один процессор, приводит к резкому замедлению работы программы ( программа работает значительно медленнее, даже чем на одном процессоре ). Т.е. на двух процессорах программа должна выполняться в монопольном режиме.
Особенности реализации языка HPF на компьютере Alpha можно найти в документации по PSE. А общую информацию по языку HPF см. здесь.

3. Механизм передачи сообщений

Наиболее предпочтительным для разработки параллельных программ является использование механизма передачи сообщений, который на компьютере Alpha обеспечивется двумя пакетами PVM и MPI, поставляемыми в составе PSE. Бесспорным преимуществом такого подхода (в первую очередь речь идет об использовании MPI) является, во-первых, переносимость программ на другие многопроцессорные системы, в том числе Linux-кластер, а, во-вторых, наличие библиотек параллельных подпрограмм, использующих среду MPI.  Компиляция параллельных MPI-программ на компьютере Alpha выполняется стандартной командой компиляции с подключением библиотеки -lmpi:
f77 -fast -O4 -o progname progname.f -lmpi         - на языке Фортран
cc  -fast -O4 -o progname progname.c -lmpi         - на языке С
Запуск программ на исполнение выполняется специальной командой dmpirun:
dmpirun -np n progname ,
где n - число процессоров.
Внимание!   Для запуска MPI-программы обязательно использовать команду dmpirun даже в том случае, если программа запускается на одном процессоре.
Команда генерации PBS скрипта этого не делает, поэтому  на компьютере Alpha необходима ручная правка PBS скриптов для MPI программ. Кроме того, MPI программы иногда не запускаются из-за сбоев PSE системы. Тогда следует произвести очистку системы командой mpiclean.
Всю необходимую информацию по MPI можно найти на специальной странице, посвященной MPI, и в части II  методического пособия "Многопроцессорные системы и параллельное программирование".

   Библиотеки параллельных подпрограмм,  базирующиеся на коммуникационной библиотеке MPI

1. ScaLAPACK - Scalable LAPACK параллельная версия библиотеки LAPACK. Включает в себя широкий набор подпрограмм для решения стандартных задач линейной алгебры. Имеется методическое пособие по работе с библиотекой (см. здесь). На компьютере Alpha требуетcя подключение вспомогательных библиотек (BLACS, BLAS, MPI):

f77 -fast -o prog prog.f -lscalapack -lblacsF -lblacs -lblacsC -lcxml -lmpi
2. Aztec - библиотека параллельных подпрограмм для решения больших систем линейных алгебраических уравнений с разреженными матрицами итерационными методами Крылова.  Имеется методическое пособие по работе с библиотекой (см. здесь). Используется совместно с  библиотеками BLAS и MPI:
f77 -fast -o prog prog.f -laztec -lcxml -lmpi
3. P_ARPACK (ARnoldi PACKage) - параллельная версия библиотеки подпрограмм на языке Фортран77 для нахождения собственных значений и собственных векторов разреженных матриц большого размера. Она может использоваться только компиляторами с языка Фортран фирмы Compaq, причем совместно с библиотеками CXML и MPI. Подключение библиотеки:
f77 -fast -O4 -o progname progname.f -lparpack -lcxml -lmpich
 4.FFTWMPI версия быстрого преобразования Фурье

Средства визуализации данных

Для работы с графическими приложениями на рабочем местe должен быть запущен Х-сервер. Запуск графических приложений возможен только в интерактивном режиме. Как отмечалось выше, компьютер рекомендуется использовать в основном для объемных вычислительных задач. Тем не менее, некоторый минимальный набор графических приложений поддерживается.

1. Приложения
gnuplot - терминальное интерактивное приложение в среде ОС UNIX. Позволяет выполнять построение 2-х и 3-х мерных графиков функций. Функции могут задаваться как в аналитическом виде, так и в виде табличных данных, хранящихся в файлах.  Набор команд для построения некоторого графика (или группы графиков) может быть записан в файл и выполнен одной командой:

gnuplot graph,
где graph -  имя командного файла (скрипта) для gnuplot.  Пример такого командного файла для построения графиков 4-х фунций, каждая из которых хранится в виде отдельного столбца в файле out.dat, см. здесь.

2. Библиотеки - служат для написания собственных программ визуализации данных.
OpenGL - библиотека, ставшая стандартом для построения 3-х мерных графических изображений. В настоящее время входит в состав программного обеспечения практически всех операционных систем.  Библиотека является платформенно независимой и поэтому в нее не входят фунции взаимодействия с устройствами ввода-вывода. Чаще всего она используется совместно с другими интерфейсными библиотеками - GLUT или AUX. На компьютере Alpha установлена довольно старая версия свободно распространяемой библиотеки Mesa, c вспомогательной библиотекой AUX, и пока не прослеживается необходимость в ее обновлении. Компиляция программ:

cc -O -o prog prog.c -lMesaaux -lMesatk -lMesaGLU -lMesaGL -lXext -lX11 -lm
PGPLOT - высокоуровневая библиотека для построения 2-х и 3-х мерных графиков, контурных линий, отображения векторных и скалярных  полей. Поддерживает множество устройств вывода, в том числе:   дисплей компьютера (при наличии Х-сервера), графические файлы (GIF,PS и др.) и многое другое. На экран дисплея воэможен вывод динамических изображений. Библиотека написана  на Фортране (кроме драйверных подпрограмм) и ориентирована в основном на Фортран, однако поддеживаются интерфейсы к С, Tcl/Tk и MOTIF.  Компиляция программ:

Фортран

f77 -O -o prog  prog.f -lpgplot -lX11
С
cc -O -c -I/usr/local/include cpgdemo.c
f77 -o cpgdemo cpgdemo.o -lcpgplot -lpgplot -lX11
MOTIF
cc -O -c  -I/usr/local/include pgmdemo.c
f77 -o pgmdemo pgmdemo.o  -lXmPgplot -lcpgplot -lpgplot -lXm -lXt -lX11
Tcl/Tk
cc -O -c  -I/usr/local/include pgtkdemo.c
f77 -o pgtkdemo pgtkdemo.o  -ltkpgplot -lcpgplot -lpgplot -ltk8.0 -ltcl8.0 -lX11
Обращаем внимание, что программы на C собираются в два приема - сначала компилятором cc получаем объектный файл, из которого с помощью фортрановского  компилятора изготавливаем исполнимый файл.  Предлагается образец Makefile  для компиляции всех демонстрационных программ пакета PGPLOT.

Tcl/Tk - интерпретирующий язык высокого уровня, позволяющий легко создавать оконные интерфейсы приложений.