OpenMPLab2015_4
Описание файла
Документ из архива "OpenMPLab2015_4", который расположен в категории "". Всё это находится в предмете "параллельное программирование с openmp" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "OpenMPLab2015_4"
Текст из документа "OpenMPLab2015_4"
Задание 4. Метод последовательной верхней релаксации(SOR).
Разработка параллельной программы и исследование ее эффективности.
Постановка задачи.
Дана последовательная программа, реализующая алгоритм последовательной верхней релаксации.
Требуется разработать параллельную программу с использованием технологии OpenMP и провести исследование ее эффективности.
Цель.
Получить навыки распараллеливания существующих программ на языке Си с использованием технологии OpenMP.
Распараллеливание осуществляется с помощью анализа последовательной программы, аналогично анализу распараллеливающего компилятора. Поэтому не предполагается знания указанного алгоритма.
Требуется.
-
Разработать параллельную версию программы с использованием технологии OpenMP
-
Исследовать время выполнения разработанной программы в зависимости от размера сетки и количества используемых потоков на суперкомпьютере “Ломоносов”.
-
Построить таблицу:
-
Для комплятора GCC:
Размер сетки
Последовательный алгоритм
Параллельный алгоритм
1 процессор
2 процессора
4 процессора
8 процессоров
Время
Ускорение
Время
Ускорение
Время
Ускорение
Время
Ускорение
256x256x256
512x512x512
-
Для комплятора Intel:
Размер сетки
Последовательный алгоритм
Параллельный алгоритм
1 процессор
2 процессора
4 процессора
8 процессоров
Время
Ускорение
Время
Ускорение
Время
Ускорение
Время
Ускорение
256x256x256
512x512x512
1024x1024x1024
-
[Для комплятора Portland Group:
Размер сетки | Последовательный алгоритм | Параллельный алгоритм | |||||||
1 процессор | 2 процессора | 4 процессора | 8 процессоров | ||||||
Время | Ускорение | Время | Ускорение | Время | Ускорение | Время | Ускорение | ||
256x256x256 | |||||||||
512x512x512 | |||||||||
1024x1024x1024 |
]
Ускорение (speedup), получаемое при использовании параллельного алгоритма для p процессоров, определяется величиной:
Speedup(n) = T1(n)/Tp(n),
где T1(n)- время последовательного выполнения задачи,
Tp(n)- время параллельного выполнения задачи при использовании p процессоров.
-
Построить графики - зависимость ускорения от количества процессоров для разных размеров систем линейных уравнений.
-
Сделать выводы по полученным результатам (объяснить убывание или возрастание производительности параллельной программы при увеличении числа используемых процессоров, сравнить поведение параллельной программы в зависимости от размера
-
сетки, в зависимости от используемого компилятора).
-
Отчет о выполнении задания, включающий таблицу c временами, графики, текст программы и выводы отправить на omplab@gmail.com
[7. В качестве дополнительного задания. Сравнить 2 алгоритма распараллеливания циклов с зависимостью по данным, рассматривавшихся на лекции, с точки зрения эффективности].
Методические указания.
-
Трансляция OpenMP программ.
-
Запуск программы на счет.
-
Последовательная программа.
-
Литература.
-
Трансляция OpenMP-программ.
-
Для входа в среду компиляции на суперкомпьютере «Ломоносов» введите команду
-
ssh compiler
-
Для компиляции OpenMP-программы c использованием компилятора GCС:
/usr/bin/gcc -fopenmp [-mcmodel=medium] -o <имя_программы> <имя_программы>.c
-
Для компиляции OpenMP-программы c использованием компилятора Intel:
/opt/intel/composerxe/bin/icc [-mcmodel=medium] -openmp -o <имя_программы> <имя_программы>.c
-
Для компиляции OpenMP-программы c использованием компилятора Portland Group:
/opt/pgi/linux86-64/2012/bin/pgcc –mp [-m64] [-mcmodel=medium]-o <имя_программы> <имя_программы>.c
Для компиляции
-
Запуск OpenMP-программы на счет.
-
Для запуска OpenMP-программы на счет на суперкомпьютере “Ломоносов”:
-
установите количество нитей, которые требуются для выполнения программы:
export OMP_NUM_THREADS=<количество нитей>
и используйте команду:
sbatch –p <раздел системы очередей> run ./<имя_программы>
Например,
export OMP_NUM_THREADS=4
sbatch –p test run ./sor_omp
Текущая конфигурация суперкомпьютера "Ломоносов" доступна:
http://parallel.ru/cluster/actual-T500.html
-
Последовательная программа.
#include <math.h> #include <stdlib.h> #include <stdio.h> #define Max(a,b) ((a)>(b)?(a):(b)) #define N (2*2*2*2*2*2+2) double maxeps = 0.1e-7; int itmax = 100; int i,j,k; double eps; double A [N][N][N]; void relax(); void init(); void verify(); int main(int an, char **as) {int it; init(); for(it=1; it<=itmax; it++) { eps = 0.; relax(); printf( "it=%4i eps=%f\n", it,eps); if (eps < maxeps) break; } verify(); return 0; } void init() { for(i=0; i<=N-1; i++) for(j=0; j<=N-1; j++) for(k=0; k<=N-1; k++) {if(i==0 || i==N-1 || j==0 || j==N-1 || k==0 || k==N-1) A[i][j][k]= 0.; else A[i][j][k]= ( 4. + i + j + k) ;} } void relax() { for(i=1; i<=N-2; i++) for(j=1; j<=N-2; j++) for(k=1; k<=N-2; k++) { double e; e=A[i][j][k]; A[i][j][k]=(A[i-1][j][k]+A[i+1][j][k]+A[i][j-1][k]+A[i][j+1][k]+A[i][j][k-1]+A[i][j][k+1])/6.; eps=Max(eps, fabs(e-A[i][j][k])); } } void verify() { double s; s=0.; for(i=0; i<=N-1; i++) for(j=0; j<=N-1; j++) for(k=0; k<=N-1; k++) { s=s+A[i][j][k]*(i+1)*(j+1)*(k+1)/(N*N*N); } printf(" S = %f\n",s); } |
-
Литература.
-
Антонов А.С. "Параллельное программирование с использованием технологии OpenMP: Учебное пособие".-М.: Изд-во МГУ, 2009. - 77 с. http://parallel.ru/info/parallel/openmp/
-
OpenMP Application Program Interface. Version 3.1 July 2011
http://www.openmp.org/mp-documents/OpenMP3.1.pdf
-
Презентация «Технология параллельного программирования OpenMP»:
ftp://ftp.keldysh.ru/K_student/Academy2015/OpenMP.ppt
-
Инструкция по использованию вычислительного комплекса «Ломоносов»
http://parallel.ru/sites/default/files/cluster/T500_user_guide-3.pdf