Вы находитесь на странице: 1из 4

Зайцев Д.А.

Грид-технологии и облачные вычисления

Лабораторная работа № 3

Создание и программирование кластеров с использованием технологий MPI-OpenMP

Краткая информация

Связка технологий MPI-OpenMP являются стандартом де-факто параллельного и


распределенного программирования в настоящее время. В реальных крупномасштабных
приложениях они, как правило, дополняются технологией программирования графических карт,
например, CUDA. OpenMP позволяет использовать системы с общей памятью, которые
представлены вычислительными узлами с многоядерными процессорами; поддержка OpenMP
включена в большинство современных систем программирования, например в gcc. MPI
представляет собой средство программирования распределенных вычислительных узлов,
каждый из которых имеет собственную оперативную память. Кроме того, современные
реализации MPI, например MPICH имеют встроенные средства запуска процессов на
распределенных узлах, например Hydra системы MPICH, которые, по существу, представляют
собой простой инструментарий для организации кластеров.

Задание

1. Разработать параллельные программы с использованием средств OpenMP и выполнить


тестирование их производительности.

2. Загрузить исходные тексты и установить систему MPICH.

3. Разработать параллельные программы с использованием средств MPI и выполнить


тестирование их производительности на одном компьютере.

4. Организовать кластер в локальной сети лаборатории с использованием средств MPICH, NFS,


SSH.

5. Выполнить тестирование производительности MPI программ на кластере.

Содержание отчёта

1. Протокол (листинг) команд и результатов их выполнения (сокращённо) .


2. Файлы параллельных программ с использованием OpenMP и MPI в соответствии с вариантом
задания.
3. Проверка результатов работы программ.
4. Таблицы тестирования производительности при использовании различных средств
параллельного и распределенного программирования на отдельном компьютере и на кластере.
5. Выводы

Порядок выполнения работы


I. Разработать параллельные программы с использованием средств OpenMP и выполнить
тестирование их производительности

Реализовать программу в соответствии с вариантом задания.

Представить несколько версий программы: а) для полностью независимых проходов цикла; б)


для синхронизации нитей с использованием критической секции; в) для интеграции результатов
нитей с использованием средств редукции.

В качестве дополнительного задания предлагается сравнить производительность для различного


числа нитей, совместного распараллеливания вложенных циклов, организации конвейеров
данных, динамической и статической диспетчеризации нитей.

Проверить правильность выполнения всех версий программы, выполнить тестирование


производительности для различных размеров исходных данных.

Для использования средств OpenMP включить в программу следующий файл заголовка

#include <omp.h>

Для компиляции программы использовать командную строку вида

gcc -o prog prog.c -fopenmp

II. Загрузить исходные тексты и установить систему MPICH

1. Загрузить архив MPICH2 с

https://www.mpich.org/

2. Раскрыть архив MPICH2 в домашнем каталоге

3. Перейти в каталог MPICH2 и выполнить конфигурирование, построение и установку системы

./configure
make
sudo make install
mpiexec --version

III. Разработать параллельные программы с использованием средств MPI и выполнить


тестирование их производительности на одном компьютере

Реализовать программу в соответствии с вариантом задания.

Представить несколько версий программы: а) для использования базовых средств обмена


сообщениями Send-Recv; б) для использования средств коллективного обмена данными (Bcast,
Scatter, Gather, Reduce).
В качестве дополнительного задания предлагается сравнить производительность для
неблокирующего обмена сообщениями и прямого доступа к памяти RMA.

Проверить правильность выполнения всех версий программы, выполнить тестирование


производительности для различных размеров исходных данных.

Для использования средств MPI включить в программу следующий файл заголовка

#include <mpi.h>

Для компиляции программы использовать командную строку вида

mpicc -o prog prog.c

Для запуска программы использовать командную строку вида

mpirun -n 5 ./prog

IV. Организовать кластер в локальной сети лаборатории с использованием средств


MPICH, NFS, SSH

1. Создать согласованную систему имен хостов лаборатории, с помощью файла /etc/hosts

2. Создать нового пользователя mpi

3. Установить SSH на компьютерах лаборатории, сгенерировать и распространить общий ключ


для входа на узлы без ввода пароля

4. Установить NFS сервер, создать и экспортировать общий каталог, импортировать общий


каталог на узлах предполагаемого кластера.

5. Создать файл описания кластера, например cluster329.

6. Запустить программы на кластере и проверить правильность их выполнения

mpirun -n 5 --hostfile cluster329 ./prog

IV. Выполнить тестирование производительности MPI программ на кластере

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


данных и различного числа компьютеров в кластере, заполнить соответствующие таблицы.

Для измерения времени использовать: а) стандартную команду time; б) функцию magma_wtime:

#include <time.h>
#include <bits/time.h>
#include <sys/time.h>
double magma_wtime( void )
{
struct timeval t;
gettimeofday( &t, NULL );
return t.tv_sec + t.tv_usec*1e-6;
}

Варианты задания

max(2 x 3 y 1) mod10


1. A
min(3 x  2 y 1) mod11
2. A
( x  2 y 3)1 mod12
3. A
max(5 x 7 y  2) mod10
4. A
max(7 x 5 y  2) mod11
5. A
(2 x 5 y 7)1 mod12
6. A
max(4 x  2 y 3) mod10
7. A
min(2 x  4 y 3) mod11
8. A
(3 x  4 y 2)1 mod12
9. A
max(5 x  4 y 3) mod10
10. A
max(4 x 5 y 3) mod11
11. A
(3 x 4 y 5)1 mod12
12. A

где x и y - целочисленные векторы длиной n , A - вещественная матрица размером n  n ;


заполнить векторы и матрицу случайными числами.

---