Next:ЗАКЛЮЧЕНИЕ
Up:СОДЕРЖАНИЕ
Prev:4.4. Пример параллельной программы с использованием средств PSE

5. ВЫСОКОПРОИЗВОДИТЕЛЬНЫЙ ВЫЧИСЛИТЕЛЬНЫЙ КЛАСТЕР

В дополнение к вычислительным ресурсам nCUBE2, в РГУ создан и введен в эксплуатацию вычислительный кластер из 10-ти компьютеров Pentium III 500 Mhz, соединенных между собой сетью Fast Ethernet через коммутатор Cisco Catalyst 2900. Использование коммутатора этого типа обеспечивает прямые независимые коммуникации между любыми парами компьютеров кластера. Все компьютеры кластера являются полнофункциональными компьютерами, снабжены 17 дюймовыми мониторами и могут использоваться в качестве рабочих мест. Ниже приведены технические характеристики вычислительного кластера, установленного в РГУ:

число узлов 10
число процессоров в узле Pentium III 500 Mhz 1
оперативная память на один процессор (Мб) 128*
объем дисковых накопителей в узле (Гб) 10
суммарная пиковая производительность (Gflops) 5.0**

* планируется расширение до 256 Mb
** на тесте Linpack получена производительность 2.5 Gflops при решении системы линейных алгебраических уравнений с 9000 неизвестными. На реальных приложениях средняя производительность кластера около 600 Mflops

На компьютерах кластера установлена операционная система Linux RedHat 6.2 и среда параллельного программирования MPI (MPICH 1.2.1). Для обеспечения полной программной совместимости на уровне исходных текстов с nCUBE2 на кластер перенесены также компилирующая система с языка HPF Adaptor и библиотеки параллельных подпрограмм ScaLAPACK и Aztec.

Домашние директории пользователей экспортируются на все машины кластера с компьютера SUN Ultra 60, являющегося также хост-компьютером nCUBE2. Поэтому при работе с различными высокопроизводительными системами (SUN, nCUBE2 и кластер) не требуется пересылка файлов с одной машины на другую. Одна и та же программа может быть откомпилирована как для nCUBE2, так и для кластера (а также для компьютеров SUN и Alpha DS20E, на которых также установлены MPI и библиотеки параллельных подпрограмм). Ниже представлен образец универсального Makefile, в котором достаточно поменять название системы, чтобы выполнить компиляцию программы с помощью команды make для любой из перечисленных выше систем. Разумеется, компиляция должна выполняться на той системе, для которой изготавливается исполнимый модуль. Для nCUBE2 рекомендуется выполнять компиляцию на компьютере SUN, а для кластера - на любом из компьютеров кластера (в их имена входит номер компьютера: rsucl0, rsucl1, ... , rsucl9).

С точки зрения MPI компьютеры кластера образуют кольцевую топологию. Соединение возможно с любой машиной кластера, а запущенная программа будет выполняться на заказанном числе компьютеров, начиная с того, с которого запущена задача. Например, если запуск задачи выполняется с машины под номером 8 и заказано 4 процессора, то задача будет выполняться на машинах 8, 9, 0, 1.

Для компиляции программ используются команды:
mpif77 -O -o program program.f - для программ на языке FORTRAN77
mpicc   -O -o program program.c - для программ на языке C.

Эти команды представляют собой командные файлы, которые выполняют все необходимые настройки для поиска требуемых include-файлов и библиотеки MPI.

Запуск программ на исполнение выполняется с помощью команды
mpirun -np N program
где N - заказываемое число процессоров (компьютеров).

ВНИМАНИЕ: Необходимо избегать одновременного выполнения нескольких счетных процессов на одном компьютере, особенно если хотя бы один из процессов является ветвью параллельной программы, поскольку при этом во много раз возрастают непроизводительные расходы.

Прежде, чем производить соединение с каким-либо компьютером кластера, рекомендуется соединиться с компьютером SUN Ultra 60, который является в некотором смысле центральной машиной суперкомпьютерного центра РГУ. Поскольку на нем находятся домашние директории пользователей, то все работы по редактированию и транспортировке файлов рекомендуется выполнять на нем. Планируется в будущем превратить его в полноценный хост-компьютер кластера, а пока что в его программное обеспечение добавлено несколько информационных и административных команд для управления кластером. В частности, имеется команда, которая показывает текущее состояние кластера:
  clcmd w

По сути дела, это запуск команды w на всех машинах кластера, что позволяет посмотреть количество пользователей, работающих на каждой из машин, и загрузку процессоров.

По каждой из машин будет выдана примерно следующая информация:

rsucl0.cc.rsu.ru
3:01pm up 51 days, 16:51, 1 user, load average: 0.01, 0.08, 0.03
USER  TTY    FROM           LOGIN@  IDLE  JCPU  PCPU  WHAT
kate  pts/0  six.ip.rsu.ru  1:33pm  3:32  0.28s 0.21s -tcsh

Здесь load average показывает загрузку процессора за последние 1 минуту, 5 минут и 15 минут. Значение 1.0 соответствует одному счетному процессу.

Исходя из этой информации и следует делать выбор, к какому компьютеру кластера целесообразнее подключиться в данный момент (на каком запускать свою задачу).

Кроме того, для пользователей доступна команда уничтожения всех процессов пользователя на всех компьютерах кластера:
  killu   <username>

В заключение раздела приведем пример универсального Makefile, предназначенного для компиляции программ с использованием библиотеки Aztec. Первая строка указывает, что компиляция будет выполняться для Linux-кластера (возможные значения переменной MACHINE:   SUN, ALPHA, NCUBE, LINUX). В данном случае подразумевается, что исполнимая программа будет собираться из головного исходного файла testaz.f и двух подпрограмм sub1.f и sub2.f.

MACHINE = LINUX

PROG = testaz
OBJ  = $(PROG).o sub1.o sub2.o

FC_SUN    = mpif77
FC_ALPHA  = f77
FC_NCUBE  = ncc
FC_LINUX  = mpif77

FFLAGS_SUN    = -fast -O4 -I/usr/local/include
FFLAGS_ALPHA  = -fast -O4 -I/usr/local/include
FFLAGS_NCUBE  = -O
FFLAGS_LINUX  = -O -I/usr/local/include

LDFLAGS_SUN    = -fast -O4
LDFLAGS_ALPHA  = -fast -O4
LDFLAGS_NCUBE  = -O -Ncomm 3000000
LDFLAGS_LINUX  = -O

LIB_SUN    = -laztec.mpi -lmpich -lsocket -lnsl
LIB_ALPHA  = -laztec.mpi -lmpi
LIB_NCUBE  = -laztec -lmpi -lblasn -lf -lm
LIB_LINUX  = -laztec.mpi -lmpi

F77      = $(FC_${MACHINE})
FFLAGS   = $(FFLAGS_${MACHINE})
LIBS     = $(LIB_${MACHINE})
LDFLAGS  = $(LDFLAGS_${MACHINE})

all: exe
exe: $(TESTOBJ)
     ${F77} ${LDFLAGS} -o $(PROG)_${MACHINE} ${OBJ} ${LIBS}

clean :
      rm -f *.o

.f.o : ; $(F77) -c ${FFLAGS} $*.f
.c.o : ; $(CC) -c $(CCFLAGS) $(CDEFS) $*.c

После запуска команды make на одной из машин кластера будет создан исполнимый файл с именем testaz_LINUX. Если переменной MACHINE присвоить значение NCUBE и запустить команду make на компьютере SUN, то будет создан исполнимый файл testaz_NCUBE для многопроцессорной системы nCUBE2.




Next:ЗАКЛЮЧЕНИЕ
Up:СОДЕРЖАНИЕ
Prev:4.4. Пример параллельной программы с использованием средств PSE