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