Средства разработки программ на Linux-кластере
/ Компиляция программ / Библиотеки подпрограмм /
/ Отладка программ  / Профилирование программ /
/ Средства разработки параллельных программ /
/ Средства визуализации данных /
Компиляция программ
    Компьютеры Linux-кластера работают под управлением операционной системы Red Hat 9, в состав которой входит свободно распространяемый пакет компиляторов проекта GNU (версия gcc-3.2.2).  Компиляция программ для Linux-кластера должна выполняться на хост-компьютере ( rsucl.cc.rsu.ru ). Прямое подключение к узлам кластера запрещено.
    Компиляторы проекта GNU
gcc - компилятор  языка С
g77 - компилятор языка Фортран77
g++ - компилятор языка С++
Компиляторы оптимизирующие, поддерживается три уровня оптимизации (опции -O, -O2, -O3 ). На разных программах более эффективной может оказаться та или другая опция. В большинстве случаев наиболее приемлемой бывает опция -O2, при этом ускорение работы программы может достигать 2-3 раз. Типичная команда компиляции:
g77 -O2 -o prog prog.f         - для языка Фортран77
gcc -O2 -o prog prog.c         - для языка С
Для отладки программ следует использовать отладчик gdb.

    Компиляторы  Intel(R) 8.0 Release

     icc - компилятор  языков С и С++
     ifort - компилятор  f77, f90 и f95

Компиляторы оптимизирующие, поддерживается  три уровня оптимизации (опции -O1, -O2,
-O3,;  задание опции -O соответствует уровню -O2). Сочетание опций -fast -On, задает
режим максимального ускорения программы на соответствующем уровне оптимизации. Для
отлаженных программ включение оптимизации обязательно. В большинстве случаев ускорение
работы программы может достигать 2-3 раз.  Имеется  полный комплект документации.

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

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

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

1. Intel Kernel Math Library -  в ее состав входит несколько стандартных библиотек, которые можно найти практически на всех высокопроизводительных системах (BLAS,  LAPACK - подпрограммы для решения задач линейной алгебры и FFTPACK -  подпрограммы быстрого преобразования Фурье).  Библиотека ориентирована в основном на язык Фортран, хотя может вызываться с любыми компиляторами. Более того, для подпрограмм библиотек BLAS и FFT имеется специально изготовленный интерфейс к языку С. Подробное и очень хорошо оформленное описание библиотеки MKL имеется в PDF формате (Intel Math Kernel Library. Reference Manual -  объем около 13 Мб). Подключение библиотек для вызова подпрограмм библиотеки LAPACK производится командой:

g77 -O2 -o prog prog.f -lmkl_lapack -lmkl_p4 -lguide
2. ATLAS (Automatically Tuned Linear Algebra Software) - новая версия самонастраивающейся библиотеки BLAS (Basic Linear Algebra Subprograms). Подпрограммы этой библиотеки реализуют базовые операции векторной и матричной алгебры и широко используются совместно с другими библиотеками. Имеются интерфейсы к языкам C и Фортран. Библиотека компилировалась из исходных текстов на С, но показывает просто удивительную производительность, примерно в 5-6 выше, чем при компиляции обычной библиотеки BLAS.  Совместно с библиотекой LAPACK (свободно распространяемой и соответственно не оптимизированной) демонстрирует  производительность примерно того же уровня, как и библиотека Intel Kernel Math Library. Подключение библиотеки:
сс -fast -O4 -o progname progname.c -lcblas -latlas   -на языке С
g77 -fast -O4 -o progname progname.f -lf77blas -latlas -на языке Фортран
3. LAPACK (Linear Algebra PACKage) - свободно распространяемая библиотека, написанная на языке Фортран77.  Содержит множество подпрограмм для решения стандартных задач линейной алгебры. Требует подключения библиотеки BLAS (рекомендуется использовать ATLAS). Хорошее описание подпрограмм библиотеки LAPACK в документации по Sun Performance Library. Подключение библиотеки:
g77 -fast -O4 -o progname progname.f -llapack -lf77blas -latlas
4. ARPACK (ARnoldi PACKage) - библиотека подпрограмм на языке Фортран77 для нахождения собственных значений и собственных векторов разреженных матриц большого размера. Она может использоваться только компилятором g77, и требует подключения библиотек LAPACK и BLAS (рекомендуется использовать ATLAS). Подключение библиотеки:
g77 -fast -O4 -o progname progname.f -larpack -llapack -lf77blas -latlas
5.FFTW - быстрое преобразование Фурье

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

g77 -g -o progname progname.f
2. Запускаем программу через отладчик
gdb progname
3. Устанавливаем точку прерывания:
break function_name
Внимание! В языке Фортран головная программа имеет имя MAIN__
4. Набираем команду run. При возникновении прерывания выдастся:
- сообщение о причине прерывания
- номер строки, где это произошло
- текст этой строки
С помощью команды print можно посмотреть значения переменных
print var
Некоторую осторожность следует соблюдать при печати массивов. Если массив большой, то его выдача может занять очень много времени. Чтобы избежать этого, следует печатать диапазон элементов
print vec(3:11)
5. Выходим из отладчика (команда quit).

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

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

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

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

1. Механизм передачи сообщений. Основным подходом для разработки параллельных программ на Linux-крастере является использование механизма передачи сообщений, который обеспечивается библиотекой MPI. Бесспорным преимуществом такого подхода является, во-первых, переносимость программ на другие многопроцессорные системы,  а, во-вторых, наличие библиотек параллельных подпрограмм, использующих среду MPI.  Компиляция параллельных MPI-программ на компьютерах Linux-кластера выполняется командой:

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

2. HPF - язык параллельного программирования High Performance Fortran. Установлена бесплатно распространяемая версия пакета Adaptor. Для работы с системой должна быть установлена переменная окружения PHOME=/usr/local/adp - указывающая расположение корневого каталога системы. В стандартном файле .cshrc эта переменная корректно устанавливается для компиляции программ для nCUBE  и Linux-кластера. Имена файлов с программами и подпрограммами на языке HPF должны иметь расширение .hpf. Компиляция программ
выполняется командой:

gmdhpf -hpf -dm -o progname progname.hpf
Запуск программы выполняется обычным способом через систему PBS. Команда запуска в PBS скрипте должна иметь вид:
 mpirun -np n progname
где n - число процессоров, на которых должна выполняться программа.

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

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

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

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

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

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

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

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

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

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

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

Фортран

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

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