Библиографическое описание:

Романов А. М., Попов Д. С., Стрельников О. И. Запуск задач на вычислительном кластере ВолгГТУ // Молодой ученый. — 2011. — №6. Т.1. — С. 130-133.

Сегодня высокопроизводительные вычислительные кластеры высоко востребованы для отраслей машиностроения, судостроения, авиапрома, энергетической отрасли, инжениринговыми фирмами, научно-исследовательскими центрами, киностудиями, мультипликационными студиями и во многих других отраслях науки и техники.
Зачастую вычислительные кластеры работают под управлением операционной системы Linux. Так сложилось, что у многих жителей России установлена операционная система семейства Windows. Поэтому при работе на вычислительном кластере возникают большие трудности, что сказывается на научном прогрессе и скорости вычислений. В данной статье рассмотрим основы использования вычислительного кластера.
В Волгоградском государственном техническом университете вычислительный кластер функционирует под управлением операционной системы CentOS x86-64 (kernel 2.6.23.1-42.x86-64).
Прежде чем начать работу с кластером необходимо пройти авторизацию. Для удаленной работы необходим ssh клиент. Для Windows лучше использовать PuTTY, а для обмена файлами WinSCP. Для Linux имеется встроенный ssh-клиент и sftp.
Компиляция последовательных программ
На кластере установлены компиляторы GNU 4.1.2, Intel C++ Compiler 10. 1.008, Intel Fortran Compiler 10. 1.011. Для компиляции С/C++ программ нужно вызвать соответствующий компилятор, передав ему необязательные опции и имена файлов с исходными кодами:
[username@serv ~]$ gcc [<опции>] <имена_файлов>
[username@serv ~]$ icc [<опции>] <имена_файлов>
[username@serv ~]$ gfortran [<опции>] <имена_файлов>
При этом компилятор GNU будет сам определять язык по расширению файлов:
  • .f, .ftn и .for — исходные тексты на языке Фотран
  • .fpp и .F дополнительно пропускаются через препроцессор языка Фортран
  • .f90 считаются исходными текстами Фортран 90/95 со свободной формой записи
  • .s — код на языке ассемблера для IA-32
  • .o — объектные файлы
  • .a — runtime библиотеки
  • .so — динамически библиотеки
Для принудительного указания в качестве языка C++ можно использовать комманды g++ и icpc. Программы на языке Fortran компилируются командами gfortran и ifort.
Часто используемые опции компиляции для gcc:

Таблица 1

Опции компилятора gcc

Ключ

Описание

-o <имя_файла>

Имя исполняемого файла. Если опция не задана, создаётся файл a.out в текущей папке

Компиляция и ассемблирование без компановки

--help

Вывод справки

-combine

Передать вместе несколько исходных файлов

-B <каталог>

Добавить каталог к списку поиска программ компилятора

Компиляция программ, использующих OpenMP
Для компиляции программ, использующих технологию OpenMP, необходимо указать опцию соответствующего компилятора:
[username@serv ~]$ gcc -fopenmp <имена_файлов>
[username@serv ~]$ icc -openmp <имена_файлов>
Если программа использует какие-то OpenMP функции, то также необходимо с коде программы включать файл omp.h.
Вы также можете воспользоваться ключём -parallel компилятора Intel для автоматического распараллеливания очевидно независимых участков программы..
Компиляция программ, использующих MPI
Для компилиции MPI-программ можно использовать компиляторы напрямую, каждый раз указывая все библиотеки, которые необходимо подключить. Но лучше пользоваться командами mpicc/mpicxx (для программ на С и С++) и mpif77/mpif90 (для программ на Фортране 77/90). Эти команды автоматически подключают заголовочные файлы и библиотеки MPI. При компиляции с использованием mpicc/mpicxx можно использовать обычные опции компилятора.
На данный момент на кластере установлены следующие реализации MPI:

Таблица 2

Реализации MPI

Реализация MPI

расположение

Доступные компиляторы

MPICH2 1.0.7

/opt/mpich2-1.3.2p1-gcc/

mpicc, mpicxx, mpif77, mpif90

OpenMPI 1.4.3

/opt/openmpi-1.4.3/

mpicc, mpicxx, mpif77, mpif90

Intel MPI 3.1.037

/opt/intel/

-

Приведем пример компиляции простой программы на C, в которой каждый из процессов пишет «Hello, there» и свой номер из числа процессов:

#include "mpi.h"

#include <string.h>

#include <stdio.h>

int main (int argc, char **argv){

char message[20];

int myrank, size;

MPI_Status status;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COMM_WORLD, &myrank);

MPI_Comm_size(MPI_COMM_WORLD, &size);

strcpy (message, "Hello, there");

MPI_Bcast(message, sizeof(message), MPI_CHAR, 0, MPI_COMM_WORLD);

printf ("received: %s:; I am %d from %d\n", message, myrank,size);

MPI_Finalize();
}
Теперь сохраним листинг программы как test.c и скомпилируем с OpenMPI:
gcc43 -I /opt/openmpi-1.4.3/include/ -c -o ./test.o t./test.c
gcc43 /opt/openmpi-1.4.3/lib/libmpi.so -o ./test.out ./test.o
В итоге будет создан исполняемый файл «test.out».
Запуск параллельных программ на кластере
Для управления заданиями на кластере используется Torque Resource Manager, основанный на OpenPBS.
Доступные очереди
Для запуска параллельных программ в рамках PBS создана 2 очереди со следующими характеристиками:

Таблица 3

Очереди

Имя очереди

Количество узлов

Количество процессоров

Максимальное время выполнения

qwork

6

8

12 часов

maxwork

6

8

1 день

Эти ограничения связаны в первую очередь с тем, что кластер используется для обучения, соответственно физические задачи, рассчитываемые на нём, не должны надолго загружать кластер. Если ваша задача может исполняться на 4х узлах, но нужно больше 48 часов, вы можете обратиться к администратору кластера с просьбой увеличить этот лимит.
Для запуска задачи MPI задачи можно написать команду:
[username@serv ~]$ qsub -l -n 1000 ./test.out
Или составить скрипт, содержимое которого зависит от выбранной реализации MPI и передать его команде qsub:

Таблица 4

Скрипт для запуска задач

#!/bin/bash


#PBS -q workq@master

Задаем наименование очереди workq

#PBS -N myjob

Называем свою задачу для удобного поиска myjob

#PBS -d /home/username/test/

Меняем рабочую директорию по умолчанию

#PBS -o ./out1.log

Задаем название выходного файла

#PBS -e ./err1.log

Задаем название файла ошибок

#PBS –M admin@vstu.ru,mi6a@yandex.ru

Список почтовых адресов для отправки уведомлений

#PBS –m abe

Определяет условия, при которых Сервер будет отправлять сообщения по почте о задании,

a - сообщение отправляется, если задание прерывается системой;

b, если задание начинает выполнение;

e, если задание заканчивает выполнение;

n не посылает почту.

#PBS -l nodes=2:ppn=1

Указываем количество узлов и процессоров

#PBS -l walltime=01:30:00

Ограничим по времени выполнение задачи чч:мм:сс

#PBS -l mem=100mb

Ограничим размер потребляемой памяти

echo 'Start date:`; date

Выведем в выходной файл время начала выполнения задачи

cd /home/username/test/

Переходим в директорию

cat $PBS_NODEFILE

Получаем список узлов

/opt/openmpi-1.4.3/bin/mpirun -np 1000 test.out

Указываем путь к mpirun, указываем количество процессов (у нас 1000) и название исполняемого файла

echo 'End date:`; date

Выведем в выходной файл время окончания выполнения задачи

Разницы между запуском задачи в командной строке или с помощью скрипта нет.
Теперь проверим состояние нашей задачи:
[username@serv ~]$ qstat

Job id Name User Time Use S Queue

------------------- ------------ --------------- -------- - ----- ----------

552.master myjob username 1 R workq

Статус R означает что задача выполняется. Возможные ключи команды qstat описаны в таблице 5.

Таблица 5

Описание команды qstat

Команда

Пояснение

qstat

Выводится следующая информация о задании:

- идентификатор задания от Сервера;

- имя задания, выданное пользователем;

- хозяин задания;

- исользуемое процессорное время;

- состояние задания;

- очередь, в которой находится задание.

qstat -a

Выводится в дополнение к предыдущему следующая информация:

- идентификатор сессии;

- требуемое число узлов;

- число параллельных заданий;

- требуемый объем памяти;

- требуемое количество времени;

- время, на протяжении которого задание находится в текущем состоянии.

qstat -B

Вывод информации о сервере.

qstat -Bf

Более полная информация о сервере.

qstat -Q(f)

Информация об очередях (более полная).

qstat -f [ID]

Атрибуты задания с идентификатором [ID].

Для удаления задачи используется команда qdel <id_задачи>, например:
[username@serv ~]$ qdel 552

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


Литература:

1. Сайт для сравнения производительности компиляторов (http://parallel.ru/cluster/spo/all_poisson.html)

2. Русскоязычная страница MPI (http://parallel.ru/tech/tech_dev/mpi.html)

3. OpenMPI homepage (http://www.open-mpi.org/)

4. Андреев А.Е., Попов Д.С., Жариков Д.Н. Building of high-performance cluster system based on existing pool of computers using GNU/ Linux operating system. Известия ВолгГТУ, №6(54), 2009. С. 48-51.
5.Страница MPICH2 (http://www.mcs.anl.gov/research/projects/mpich2/)

Обсуждение

Социальные комментарии Cackle