Средства разработки программ на компьютерах SUN
/ Компиляция программ / Библиотеки подпрограмм /
/ Отладка программ  / Профилирование программ /
/ Средства разработки параллельных программ /
/ Средства визуализации данных /
Компиляция программ
    Компьютеры SUN работают под управлением операционной системы Solaris 2.7, разработанной компанией Sun Microsystems. На системах установлено два комплекта компиляторов - свободно распространяемый пакет проекта GNU (версия gcc-3.2.3) и пакет фирмы Sun Microsystem (Sun WorkShop 5.0)
    Компиляторы проекта GNU
gcc - компилятор  языка С
g77 - компилятор языка Фортран77
g++ - компилятор языка С++
Компиляторы оптимизирующие, поддерживается три уровня оптимизации (опции -O, -O2, -O3 ). Эти компиляторы рекомендуется использовать для небольших программ и компиляции приложений, распространяемых в рамках проекта GNU. Они не могут подключать высокооптимизированные библиотеки из Sun WorkShop. Для отладки программ следует использовать отладчик gdb.  Для высокопроизводительных вычислений рекомендуется использовать компиляторы из пакета Sun WorkShop.
    Компиляторы Sun WorkShop
cc - компилятор  языка С
f77 - компилятор языка Фортран77
f90 - компилятор языка Фортран90
СС - компилятор языка С++
Компиляторы оптимизирующие, поддерживается  пять уровней оптимизации (опции -O1, -O2, -O3, -O4, -O5;  задание опции -O соответствует уровню -O3 ). Сочетание опций -fast -On, задает режим максимального ускорения программы на соответствующем уровне оптимизации. Для отлаженных программ включение оптимизации обязательно. В большинстве случаев ускорение работы программы может достигать 2-3 раз.
Внимание!
1. На все компиляторы Sun WorkShop имеется только по одной лицензии. Запуск задания на компиляцию захватывает  эту лицензию на 10 сек., поэтому, если в течение этого времени появляются другие задания, то они буферизуются и будут обслуживаться по мере освобождения лицензии. О том, что лицензия занята, пользователям выдается сообщение. Не следует пытаться каким-либо образом прервать задание (клавишами Ctrl C и тем более Ctrl Z).
2. Опция -fast  - максимальная оптимизация не всегда работает корректно (по крайней мере с компилятором f77). Поэтому ее следует включать только на окончательно отлаженных программах и при этом убедиться, что это не повлияло на результат.
Отладка программ выполняется с помощью отладчика   dbx.

Удобным средством поддержки больших проектов, когда текст программы разбит на несколько файлов, является утилита make. Она ищет в текущем каталоге файлы makefile или Makefile, которые представляют собой инструкции, описывающие, какие действия должны быть выполнены для достижения конечной цели проекта (обычно такой целью является получение исполнимого файла программы). Имеется краткое описание этой утилиты на русском языке (см. здесь).  Пример простого Makefile, пригодного для компиляции программ с языков С и Фортран77 (в том числе и на смеси языков) на компьютере SUN см. здесь. Разработаны универсальные Makefiles  для компиляции программ на любой из высокопроизводительных систем (для языков   Фортран, С, С++). В этих Makefiles следует только выбрать архитектуру системы, на которой будет выполняться компиляция программы, и изменить значения переменных PROG (имя программы) и OBJ (список файлов, содержащих вашу программу с расширением .о).

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

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

1. Sun Performance Library - является составной частью  пакета Sun WorkShop и не может использоваться с другими компиляторами. В ее состав входит несколько стандартных библиотек, которые можно найти практически на всех высокопроизводительных системах (BLAS, LINPACK, LAPACK - для решения задач линейной алгебры и FFTPACK -  быстрое преобразование Фурье). Может использоваться со всеми компиляторами из состава  Sun WorkShop. Библиотека подключается особым образом, с помощью опции -xlic_lib=sunperf. Например:

f77 -O -o progname progname.f -xlic_lib=sunperf
2. ATLAS (Automatically Tuned Linear Algebra Software) - новая версия самонастраивающейся библиотеки BLAS (Basic Linear Algebra Subprograms). Подпрограммы этой библиотеки реализуют базовые операции векторной и матричной алгебры и широко используются совместно с другими библиотеками. Библиотека компилировалась компиляторами Sun WorkShop, поэтому может использоваться только с ними. Имеются интерфейсы к языкам C и Фортран.  Совместно с библиотекой LAPACK (свободно распространяемой и соответственно не оптимизированной) демонстрирует более высокую производительность, чем фирменная Sun Performance Library. Подключение библиотеки:
сс -fast -O4 -o progname progname.c -lcblas -latlas   -на языке С
f77 -fast -O4 -o progname progname.f -lf77blas -latlas -на языке Фортран
3. LAPACK (Linear Algebra PACKage) - свободно распространяемая библиотека, написанная на языке Фортран77.  Содержит множество подпрограмм для решения стандартных задач линейной алгебры. Требует подключения библиотеки BLAS (рекомендуется использовать ATLAS). Хорошее описание подпрограмм библиотеки LAPACK в документации по Sun Performance Library. Подключение библиотеки:
f77 -fast -O4 -o progname progname.f -llapack -lf77blas -latlas
4. SLATEC - общая математическая библиотека. Язык Фортран77. Подключение -lslatec.

5. ARPACK (ARnoldi PACKage) - библиотека подпрограмм на языке Фортран77 для нахождения собственных значений и собственных векторов разреженных матриц большого размера. Она может использоваться только компилятором f77 из пакета Sun WorkShop, и требует подключения библиотек LAPACK и BLAS (рекомендуется использовать ATLAS). Подключение библиотеки:

f77 -fast -O4 -o progname progname.f -larpack -llapack -lf77blas -latlas

6.FFTW - быстрое преобразование Фурье
 

Отладка программ. В зависимости от используемых компиляторов, для отладки программ следует использовать либо отладчик gdb  (компиляторы GNU), либо отладчик  dbx  (компиляторы SUN). Подробное описание отладчика gdb можно найти здесь, а описание dbx в соответствующем разделе документации Sun WorkShop ( см. здесь ). Для работы с отладчиком программы должны быть откомпилированы с опцией -g .
Внимание!  По умолчанию ни компиляторы из пакета GNU, ни компиляторы Sun WorkShop не останавливают выполнение программы при возникновении прерываний процессора по делению на нуль, переполнению разрядной сетки и др. Результату присваивается значение Infinity и программа продолжает работать с непредсказуемым результатом. Однако компиляторы Sun WorkShop позволяют включить реакцию на сигналы процессора с помощью специальной опции: -ftrap=common . В компиляторах GNU такая возможность отутствует. Большую помощь отладчики могут оказать в тех случаях, когда происходит прерывание программы по неизвестной причине с диагностикой - Abort (core dumped). Правила работы с отладчиками весьма схожи. Рассмотрим простейший сеанс работы с отладчиком dbx:
1. Компилируем программу в отладочном режиме

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

    Имеется очень хороший графический интерфейс для работы с отладчиками -  ddd, однако для работы с ним необходима среда X-windows. Он поддерживает работу со множеством отладчиков, поэтому его нужно предварительно настроить на определенный тип. Запускается он командой ddd &. Затем в разделе меню Edit выбирается пункт Preferences. После нажатия на этот пункт появится новое окно, в котором в разделе Startup и следует установить требуемый отладчик. Для отладки программы с помощью этого приложения следует набрать команду:

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

Профилирование программ.  Профилирование  программ предоставляет простой и удобный механизм исследования выполнения программы с целью ее оптимизациию. В ОС Solaris для этих целей используются стандартные 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. Многопоточный режим

Компьютеры SUN относятся к семейству симметричных мультипроцессорных систем (SMP), поддерживающих механизм порождения "нитей" (threads). Этот механизм позволяет распараллеливать выполнение программ на мультипроцессорных системах путем включения в программу функций библиотеки libthread.  При этом, в отличие от MPI, на мультипроцессорной системе выполняется один счетный процесс, но использующий несколько процессоров. Кроме того, этот механизм используется в распараллеливающих компиляторах  пакета Sun WorkShop (для языков Фортран и С). Поддерживается как автоматическое распараллеливание, так и явное распараллеливание с  помощью директив компилятору. Выбор типа распараллеливания определяется опциями:
-autopar  -  автоматическое распараллеливание
-explicitpar - явное распараллеливание с помощью директив в исходном тексте программ
-parallel - комбинация обоих режимов
Пример команды компиляции программы с автоматическим распараллеливанием:
f77 -fast -O4 -autopar -o progname progname.f
Распараллеливанию  подвергаются только циклы DO, в которых компилятор не обнаружил зависимости по шагам.
Запуск параллельной SMP программы выполняется как обычной программы, но предварительно должна быть установлена переменная окружения (PAPALLEL=n), указывающая, что программа должна использовать n процессоров.  В связи с этим PBS скрипт должен быть специального типа ( см. здесь).
Замечание: Автоматическое распараллеливание достаточно эффективно работает на небольших программах, однако для больших программ его эффективность очень низка. Имеет смысл использовать этот механизм, если коэффициент ускорения на 2-х процессорах превышает 1.6. В противном случае - это пустая трата вычислительных ресурсов.
Более подробную информацию о параллельном программировании для SMP систем можно найти в документации по использованию компиляторов Sun WorkShop (см. здесь)

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

Более предпочтительным для разработки параллельных программ является использование механизма передачи сообщений, который на компьютерах SUN обеспечивается библиотекой MPI. Бесспорным преимуществом такого подхода является, во-первых, переносимость программ на другие многопроцессорные системы, в том числе Linux-кластер, а, во-вторых, наличие библиотек параллельных подпрограмм, использующих среду MPI.  Компиляция параллельных MPI-программ на компьютерах SUN выполняется командой:
mpif77 -fast -O4 -o progname progname.f         - на языке Фортран
mpicc -fast -O4 -o progname progname.c          - на языке С
Здесь mpif77 и mpicc - командные файлы, вызывающие стандартные компиляторы с настройкой путей к необходимым include-файлам и подключением MPI библиотеки. Возможно прямое использование компиляторов, но тогда библиотеку нужно подключать явным образом:
f77 -fast -O4 -I/usr/local/mpi/include -o prog prog.f -lmpich
Всю необходимую информацию по MPI можно найти на специальной странице, посвященной MPI, и в части II  методического пособия "Многопроцессорные системы и параллельное программирование".

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

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

f77 -O -o prog prog.f -lscalapack -lblacsF -lblacs -lblacsC -lf77blas -latlas -lmpich
2. Aztec - библиотека параллельных подпрограмм для решения больших систем линейных алгебраических уравнений с разреженными матрицами итерационными методами Крылова.  Имеется методическое пособие по работе с библиотекой ( см. здесь). Используется совместно с  библиотеками BLAS и MPI:
f77 -O -o prog prog.f -laztec -lmpich -lf77blas -latlas
3. P_ARPACK - параллельная версия библиотеки подпрограмм ARPACK нахождения собственных значений и собственных векторов разреженных матриц большого размера. Используется только компилятором f77 из пакета Sun WorkShop совместно с библиотеками LAPACK, BLAS (рекомендуется использовать ATLAS) и MPI. Подключение библиотеки:
f77 -fast -O4 -o progname progname.f -lparpack -llapack -lf77blas -latlas -lmpich
4.FFTWMPI версия быстрого преобразования Фурье

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

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

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

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

Scilab  (свободно распространяемая версия пакета Matlab) - математический пакет , включающий в себя мощную поддержку 2-х и 3-х мерной графики.

OpenDX - мощное графическое приложение визуализации данных, разработанное IBM. Запускается командой

dx
Имеет встроенную обучающую систему.

2. Библиотеки - служат для написания собственных программ визуализации данных.
OpenGL - библиотека, ставшая стандартом для построения 3-х мерных графических изображений. В настоящее время входит в состав программного обеспечения практически всех операционных систем.  Библиотека является платформенно независимой и поэтому в нее не входят фунции взаимодействия с устройствами ввода-вывода. Чаще всего она используется совместно с другими интерфейсными библиотеками - GLUT или AUX. На компьютерах SUN установлено два комплекта библиотеки OpenGL - библиотека, поставляемая фирмой Sun Microsystems (-lGLU, -lGL работает очень быстро, но только с экраном консоли) и бесплатно распростаняемая версия Mesa-2.4 (-lMesaGLU, -lMesaGL более медленная, но позволяет выводить результаты на экран удаленного компьютера). Обе библиотеки ориентированы в основном на работу с языком C, но для библиотеки Mesa имеется интерфейс к языкам Фортран77 и Фортран90, причем для второго случая поддержка более полная. Компиляция программ возможна как компиляторами сс, так gcc:

cc -O -o prog prog.c -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm
cc -O -o prog prog.c -lglut -lMesaGLU -lMesaGL -lXmu -lXi -lXext -lX11 -lm
f77 -O -o example -I/usr/local/include example.f  \
 -lfglut -lfGLU -lfGL -lglut -lMesaGLU -lMesaGL \
 -lXaw -lXt -lXmu -lXi -lXext -lX11
f90 -O -o prog90 -M/usr/local/include/GL prog.f90 \
 -lf90glut -lf90GLU -lf90GL -lglut -lGLU -lMesaGL \
 -lXaw -lXt -lXmu -lXi -lXext -lX11
При написании программ на Фортране90 в текстах программ должны быть подключены модули:
use opengl_gl
use opengl_glu
use opengl_glut,
а в команде компиляции указано их местонахождение  /usr/local/include/GL

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 собираются в два приема - сначала компилятором С получаем объектный файл, из которого с помощью фортрановского  компилятора изготавливаем исполнимый файл.  Предлагается образец Makefile  для компиляции всех демонстрационных программ пакета PGPLOT.

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