- Сегодня высокопроизводительные вычислительные
кластеры высоко востребованы для отраслей машиностроения,
судостроения, авиапрома, энергетической отрасли, инжениринговыми
фирмами, научно-исследовательскими центрами, киностудиями,
мультипликационными студиями и во многих других отраслях науки и
техники.
- Зачастую вычислительные кластеры работают под управлением операционной системы 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 будет сам определять язык по расширению файлов:
- Зачастую вычислительные кластеры работают под управлением операционной системы Linux. Так сложилось, что у многих жителей России установлена операционная система семейства Windows. Поэтому при работе на вычислительном кластере возникают большие трудности, что сказывается на научном прогрессе и скорости вычислений. В данной статье рассмотрим основы использования вычислительного кластера.
- .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:
- Для компиляции программ, использующих технологию OpenMP, необходимо указать опцию соответствующего компилятора:
Таблица 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:
- Для запуска задачи MPI задачи можно написать команду:
Таблица 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/)