OpenMPLab2015_2 (811089)
Текст из файла
Задание 2. Алгоритм релаксации Якоби.
Разработка параллельной программы и исследование ее эффективности.
Постановка задачи.
Дана последовательная программа, реализующая алгоритм релаксации Якоби.
Требуется разработать параллельную программу с использованием технологии OpenMP и провести исследование ее эффективности.
Цель.
Получить навыки распараллеливания существующих программ на языке Си с использованием технологии OpenMP.
Распараллеливание осуществляется с помощью анализа последовательной программы, аналогично анализу распараллеливающего компилятора. Поэтому не предполагается знания указанного алгоритма.
Требуется.
-
Разработать параллельную версию программы с использованием технологии OpenMP
-
Исследовать время выполнения разработанной программы в зависимости от размера сетки и количества используемых ядер на суперкомпьютерном комплексе «Ломоносов».
-
Построить таблицу:
Размер сетки | Последовательный алгоритм | Параллельный алгоритм | |||||||
1 ядро | 2 ядра | 4 ядра | 8 ядер | ||||||
Время | Ускорение | Время | Ускорение | Время | Ускорение | Время | Ускорение | ||
512x512x512 | |||||||||
768x768x768 |
Ускорение (speedup), получаемое при использовании параллельного алгоритма для p процессоров, определяется величиной:
Speedup(n) = T1(n)/Tp(n),
где T1(n)- время последовательного выполнения задачи,
Tp(n)- время параллельного выполнения задачи при использовании p ядер.
-
Построить графики - зависимость ускорения от количества процессоров для разных размеров систем линейных уравнений.
-
Сделать выводы по полученным результатам (объяснить убывание или возрастание производительности параллельной программы при увеличении числа используемых процессоров, сравнить поведение параллельной программы в зависимости от размера сетки).
-
Отчет о выполнении задания, включающий таблицу c временами, графики, текст программы и выводы отправить на omplab@gmail.com
Методические указания.
-
Трансляция 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 ./jac_3d
Текущая конфигурация суперкомпьютера «Ломоносов» доступна:
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 768 double maxeps = 0.1e-7; int itmax = 10; int i,j,k; double eps; double A [N][N][N], B [N][N][N]; void relax(); void resid(); void init(); void verify(); void wtime(double *t); int main(int an, char **as) { int it; double time0, time1; init(); /* time0=omp_get_wtime (); */ wtime(&time0); for(it=1; it<=itmax; it++) { eps = 0.; relax(); resid(); printf( "it=%4i eps=%f\n", it,eps); if (eps < maxeps) break; } wtime(&time1); /* time1=omp_get_wtime (); */ printf("Time in seconds=%gs\t",time1-time0); 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++) { B[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.; } } void resid() { for(i=1; i<=N-2; i++) for(j=1; j<=N-2; j++) for(k=1; k<=N-2; k++) { double e; e = fabs(A[i][j][k] - B[i][j][k]); A[i][j][k] = B[i][j][k]; eps = Max(eps,e); } } 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); } void wtime(double *t) { static int sec = -1; struct timeval tv; gettimeofday(&tv, (void *)0); if (sec < 0) sec = tv.tv_sec; *t = (tv.tv_sec - sec) + 1.0e-6*tv.tv_usec; } |
-
Литература.
-
Презентация «Технология параллельного программирования OpenMP»:
ftp://ftp.keldysh.ru/K_student/Academy2015/OpenMP.ppt
-
Антонов А.С. "Параллельное программирование с использованием технологии 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
-
Инструкция по использованию суперкомпьютерного комплекса «Ломоносов»
http://parallel.ru/sites/default/files/cluster/T500_user_guide-3.pdf
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.