Next:5.2. Система пакетной обработки заданий
Up:5. ВЫСОКОПРОИЗВОДИТЕЛЬНЫЙ ВЫЧИСЛИТЕЛЬНЫЙ КЛАСТЕР
Prev:5. ВЫСОКОПРОИЗВОДИТЕЛЬНЫЙ ВЫЧИСЛИТЕЛЬНЫЙ КЛАСТЕР

5.1. Архитектура вычислительного кластера

В разделе 1.4 отмечалось, что наиболее доступный способ создания вычислительных ресурсов суперкомпьютерного класса предоставляют кластерные технологии. В простейшем случае с помощью сетевых коммуникационных устройств объединяются однотипные компьютеры, и в их программное обеспечение добавляется коммуникационная библиотека типа MPI. Это позволяет использовать набор компьютеров как единый вычислительный ресурс для запуска параллельных программ. Однако вряд ли такую систему можно назвать полноценным кластером. Очень скоро обнаруживается, что для эффективной эксплуатации такой системы совершенно необходима некоторая диспетчерская система, которая бы распределяла задания пользователей по вычислительным узлам и блокировала бы запуск других заданий на занятых узлах. Существует достаточно большое число таких систем, как коммерческих, так и бесплатно распространяемых. Причем большинство из них не требует идентичности вычислительных узлов. В РГУ создан гетерогенный вычислительный кластер на базе диспетчерской системы Open PBS [14].

В состав высокопроизводительного вычислительного кластера в настоящее время входят:

  1. Compaq Alpha DS20E  - 2-х процессорная SMP система с общей памятью объемом 1 Гб и объемом дискового пространства 2x18 Гб. Пиковая производительность одного процессора 1 Gflops. На однопроцессорном тесте LINPACK достигается производительность 190 Mflops без использования специальных библиотек и 800 Mflops при использовании оптимизированной библиотеки CXML. На параллельной MPI-версии теста LINPACK получена производительность 1.6 Gflops на двух процессорах.
  2. SUN Ultra 60  - 2-х процессорная SMP система с общей памятью объемом 1 Гб и объемом дискового пространства 18 Гб. Пиковая производительность одного процессора 800 Mflops. На однопроцессорном тесте LINPACK достигается производительность 85 Mflops без использования специальных библиотек и 470 Mflops при использовании оптимизированных библиотек LAPACK+ATLAS. На параллельной MPI-версии теста LINPACK получена производительность 0.8 Gflops на двух процессорах. Компьютер выполняет также функции сетевой информационной службы (NIS) для авторизации пользователей и файлового сервера (NFS), экспортирующего домашние директории пользователей на все другие вычислительные системы (nCUBE2, Linux-кластер, Alpha DS20E). Используется также как хост-компьютер для работы с nCUBE2.
  3. Linux-кластер  - вычислительная система из 10 узлов, соединенных служебной сетью Fast Ethernet через коммутатор Cisco Catalyst 2900 и скоростной вычислительной сетью Gigabit Ethernet через коммутатор фирмы Allied Telesyn. Каждый из узлов представляет собой компьютер с процессором Pentium 4 2.4 Ггц,  512 Мб оперативной памяти (RAMBUS PC-1066) и 20 Гб жестким диском. Возможно исполнение как однопроцессорных, так и параллельных программ. Среда параллельного программирования - MPI (Mpich-1.2.2). Запуск программ осуществляется в пакетном режиме через систему PBS. На однопроцессорном тесте LINPACK достигается производительность 280 Mflops без использования специальных библиотек и 2750 Mflops при использовании оптимизированных библиотек  mkl_p4+LAPACK. На параллельной MPI-версии теста LINPACK достигнута производительность  24.4 Gflops для всего кластера в целом. Для компилиции и отладки программ выделен специальный компьютер с такими же характеристиками, как и вычислительные узлы, но на нем диспетчерская система счетные задачи не запускает.

Система сконфигурирована таким образом, что на каждом из 14 процессоров может выполняться не более одного счетного процесса. Таким образом, одновременно может обрабатываться не более 14 обычных однопроцессорных программ. Для параллельных программ не поддерживается механизм выполнения одной программы на процессорах разной архитектуры. Пользователь должен заранее определиться, на какой из 3-х перечисленных выше архитектур должна быть выполнена его программа, и поставить ее в соответствующую очередь. Таким образом, на системах Alpha и SUN одна программа может использовать не более двух процессоров, а на Linux-кластере - не более 10. При отсутствии необходимых ресурсов в момент запуска задания оно ставится в очередь до освобождения требуемых ресурсов.

На компьютерах Linux-кластера установлена свободно распространяемая операционная система Linux RedHat 9, а на компьютерах Alpha и SUN - лицензионные ОС фирм-производителей: Tru64 Unix 4.0F и Solaris 2.7 соответственно. Прикладное программное обеспечение всех вычислительных систем в максимально возможной степени унифицировано для обеспечения переносимости программ на уровне исходных текстов. Это было достигнуто установкой на всех системах коммуникационной библиотеки MPI, системы компиляции программ с языка HPF, базовой библиотеки линейной алгебры ATLAS, однопроцессорной и параллельной версий библиотеки LAPACK, параллельной версии библиотеки для решения систем линейных алгебраических уравнений с разреженными матрицами Aztec (рассматривается в части 3). Это позволило пользователям компилировать исходные тексты программ на любой из перечисленных вычислительных систем без какой-либо их модификации.

В качестве коммуникационной среды на Linux-кластере используется скоростная вычислительная сеть Gigabit Ethernet с коммутатором фирмы Allied Telesyn. Это обеспечивает пиковую скорость передачи данных 62 Мб/сек между любыми парами узлов. На 2-х процессорных системах Alpha и SUN в качестве коммуникационной среды MPI используется разделяемая память, что обеспечивает значительно большую скорость обмена между параллельными процессами, а именно, 260 Мб/сек и 80 Мб/сек соответственно.

Домашние директории пользователей расположены на компьютере SUN Ultra 60, выполняющего функции NFS сервера, и с которого они экспортируются на все машины высокопроизводительного вычислительного кластера. Учитывая, что этот компьютер является также хост-компьютером многопроцессорной системы nCUBE2, это позволяет работать с любой высокопроизводительной системой без пересылки и дублирования файлов исходных текстов программ. Одна и та же программа без какой-либо модификации может быть откомпилирована для любой из высокопроизводительных систем. Разумеется, компиляция должна выполняться на той системе, для которой изготавливается исполнимый модуль. Для nCUBE2 рекомендуется выполнять компиляцию на компьютере SUN, а для Linux-кластера - на специально выделенном хост-компьютере с такими же характеристиками, как и вычислительные узлы.

Для компиляции программ можно использовать стандартные команды вызова компиляторов, но при этом необходимо учитывать, что компилятор должен найти пути к коммуникационной библиотеке и необходимым include-файлам. На Linux-кластере и компьютере SUN для компиляции программ используются специальные команды:
mpif77 -O -o program program.f - для программ на языке FORTRAN77
mpicc -O -o program program.c - для программ на языке C,
которые представляют собой командные файлы, выполняющие все необходимые настройки для поиска требуемых include-файлов и библиотеки MPI.

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

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 -lmpich -lsocket -lnsl
LIB_ALPHA       = -laztec -lmpi
LIB_NCUBE       = -laztec -lmpi -lblasn -lf -lm
LIB_LINUX      	= -laztec -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. По аналогии легко составить Makefile для компиляции программ, написанных на языках C и C++.

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

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




Next:5.2. Система пакетной обработки заданий
Up:5. ВЫСОКОПРОИЗВОДИТЕЛЬНЫЙ ВЫЧИСЛИТЕЛЬНЫЙ КЛАСТЕР
Prev:5. ВЫСОКОПРОИЗВОДИТЕЛЬНЫЙ ВЫЧИСЛИТЕЛЬНЫЙ КЛАСТЕР