Использование OpenMP на кластере презентация

Содержание

Москва, 2009 г. Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А. из 26 Содержание Технология Intel Cluster OpenMP Гибридная модель параллельного программирования MPI/OpenMP Гибридная модель параллельного

Слайд 1Использование OpenMP на кластере
Учебный курс
Параллельное программирование с OpenMP
Бахтин В.А.,

кандидат физ.-мат. наук,
заведующий сектором,
Институт прикладной математики им. М.В.Келдыша РАН

Слайд 2Москва, 2009 г.
Параллельное программирование с OpenMP: Использование OpenMP на кластере ©

Бахтин В.А.

из 26

Содержание

Технология Intel Cluster OpenMP
Гибридная модель параллельного программирования MPI/OpenMP
Гибридная модель параллельного программирования DVM/OpenMP


Слайд 3Москва, 2009 г.
из 26
Технология Intel Cluster OpenMP
В 2006 году в

Intel® компиляторах версии 9.1 появилась поддержка Cluster OpenMP.
Технология Cluster OpenMP поддерживает выполнение OpenMP программ на нескольких вычислительных узлах, объединенных сетью.
Базируется на программной реализации DSM (Thread Marks software by Rice University).
Для компилятора Intel® C++:
icc -cluster-openmp options source-file
icc -cluster-openmp-profile options source-file
Для компилятора Intel® Fortran:
ifort -cluster-openmp options source-file
ifort -cluster-openmp-profile options source-file

kmp_cluster.ini
--hostlist=home,remote --process_threads=2

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 4Москва, 2009 г.
из 26
Преимущества Intel Cluster OpenMP
Упрощает распределение последовательного или

OpenMP кода по узлам.
Позволяет использовать одну и ту же программу для последовательных, многоядерных и кластерных систем.
Требует совсем незначительного изменения кода программы, что упрощает отладку.
Позволяет слегка измененной OpenMP-программе выполняться на большем числе процессоров без вложений в аппаратную составляющую SMP.
Представляет собой альтернативу MPI, которая может быть быстрее освоена и применена.

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 5Москва, 2009 г.
из 26
Преимущества Intel Cluster OpenMP
Переносимость и гибкость упрощает

и снижает стоимость разработки приложений.

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 6
001
Модель памяти в OpenMP
Москва, 2009 г.
из 26




Нить

Кэш общих переменных
Общая память
Private-переменные

Threadprivate-переменные

001
Нить
Кэш

общих переменных

Private-переменные


Threadprivate-переменные


001

Нить

Кэш общих переменных

Private-переменные


Threadprivate-переменные

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 7001
Модель памяти в OpenMP
Москва, 2009 г.
из 26




Нить 0

Общая память

001
Нить 1


static

int i = 0;

… = i + 1;

i = i + 1;

i = 0

i = 1

… = i + 2; // ?

#pragma omp flush (i)

#pragma omp flush (i)

i = 1

i = 1

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 8Консистентность памяти в OpenMP
Москва, 2009 г.
из 26


Корректная последовательность работы нитей

с переменной:
Нить0 записывает значение переменной - write(var)
Нить0 выполняет операцию синхронизации – flush (var)
Нить1 выполняет операцию синхронизации – flush (var)
Нить1 читает значение переменной – read (var)

1: A = 1
. . .
2: flush(A)

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 9Директива SHARABLE
Москва, 2009 г.
из 26


#pragma intel omp sharable ( variable

[, variable …] ) – для Си и Си++
!dir$ omp sharable ( variable [, variable …] ) - для Фортрана
определяют переменные, которые должны быть помещены в Distributed Virtual Shared Memory

В компиляторе существуют опции, которые позволяют изменить класс переменных, не изменяя текст программы:
[-no]-clomp-sharable-argexprs
[-no]-clomp-sharable-commons
[-no]-clomp-sharable-localsaves
[-no]-clomp-sharable-modvars


Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 10Москва, 2009 г.
из 26
Использование Intel Cluster OpenMP
malloc (…) -> kmp_sharable_malloc

(…)

#include

foo * fp = new foo (10);
foo * fp = new kmp_sharable foo (10);

std::vector * vp = new std::vector;
std::vector > * vp = new kmp_sharable std::vector>;


Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 11Работа с SHARABLE- переменными
Москва, 2009 г.
из 26



Параллельное программирование с OpenMP:

Использование OpenMP на кластере © Бахтин В.А.

Слайд 12Москва, 2009 г.
из 26
Использование Intel Cluster OpenMP
Целесообразно:
если программа дает хорошее

ускорение при использовании технологии OpenMP:
Speedup = Time(1thread)/Time (n threads) = ~n
еcли программа требует малой синхронизации
данные в программе хорошо локализованы
Наиболее целесообразно для задач (RMS - recognition, mining, and synthesis):
Обработка больших массивов данных
Рендеринг в графике
Поиск
Распознавание образов
Выделение последовательностей в генетике

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 13Москва, 2009 г.
из 26
Использование Intel Cluster OpenMP
Параллельное программирование с OpenMP:

Использование OpenMP на кластере © Бахтин В.А.

Слайд 14Москва, 2009 г.
из 26
Гибридная модель параллельного программирования MPI/OpenMP


Данные



Данные

Вычисления

Узел N
OpenMP


Вычисления
MPI
Параллельное программирование

с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Слайд 15Москва, 2009 г.
из 26
Алгоритм Якоби на языке Fortran 77

PROGRAM JAC_F77
PARAMETER (L=8, ITMAX=20)
REAL A(L,L), B(L,L)
 
PRINT *, '********** TEST_JACOBI **********'
 
DO IT = 1, ITMAX
DO J = 2, L-1
DO I = 2, L-1
A(I, J) = B(I, J)
ENDDO
ENDDO
DO J = 2, L-1
DO I = 2, L-1
B(I, J) = (A(I-1, J) + A(I, J-1) +
* A(I+1, J) + A(I, J+1)) / 4
ENDDO
ENDDO
ENDDO
END

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 16Москва, 2009 г.
из 26
Алгоритм Якоби на языке Fortran OpenMP

PROGRAM JAC_F77
PARAMETER (L=8, ITMAX=20)
REAL A(L,L), B(L,L)
PRINT *, '********** TEST_JACOBI **********'
!$OMP PARALLEL SHARED (A,B) PRIVATE(I,J,IT)
DO IT = 1, ITMAX
!$OMP DO
DO J = 2, L-1
DO I = 2, L-1
A(I, J) = B(I, J)
ENDDO
ENDDO
!$OMP DO
DO J = 2, L-1
DO I = 2, L-1
B(I, J) = (A(I-1, J) + A(I, J-1) +
* A(I+1, J) + A(I, J+1)) / 4
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL
END

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 17Distribution of array A [8][8]




Слайд 18
Алгоритм Якоби в модели MPI/OpenMP
PROGRAM

JAC_MPI_OpenMP
include 'mpif.h'
integer me, nprocs
PARAMETER (L=8, ITMAX=20, LC=2, LR=2)
REAL A(0:L/LR+1,0:L/LC+1), B(L/LR,L/LC)
integer dim(2), coords(2)
logical isper(2)
integer status(MPI_STATUS_SIZE,4), req(8), newcomm
integer srow,lrow,nrow,scol,lcol,ncol,up,pdown,pleft,pright
dim(1) = LR
dim(2) = LC
isper(1) = .false.
isper(2) = .false.
reor = .true.
call MPI_Init( ierr )
call MPI_Comm_rank( mpi_comm_world, me, ierr )
call MPI_Comm_size( mpi_comm_world, nprocs, ierr)
call MPI_Cart_create(mpi_comm_world,2,dim,isper,.true., newcomm, ierr)

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г.

из 26


Слайд 19 call MPI_Cart_shift(newcomm,0,1,pup,pdown, ierr)
call MPI_Cart_shift(newcomm,1,1,pleft,pright, ierr)

call MPI_Comm_rank (newcomm, me, ierr)
call MPI_Cart_coords(newcomm,me,2,coords, ierr)
C rows of matrix I have to process
srow = (coords(1) * L) / dim(1)
lrow = (((coords(1) + 1) * L) / dim(1))-1
nrow = lrow - srow + 1
C colomns of matrix I have to process
scol = (coords(2) * L) / dim(2)
lcol = (((coords(2) + 1) * L) / dim(2))-1
ncol = lcol - scol + 1
call MPI_Type_vector(ncol,1,nrow+2,MPI_DOUBLE_PRECISION,
* vectype, ierr)
call MPI_Type_commit(vectype, ierr)
   IF (me .eq. 0) PRINT *, '***** TEST_JACOBI *******'
C$OMP PARALLEL SHARED (A,B)PRIVATE(I,J,IT)
DO IT = 1, ITMAX
C$OMP DO
DO J = 1, ncol
DO I = 1, nrow
A(I, J) = B(I, J)
ENDDO
ENDDO

Слайд 20C Copying shadow elements of array A from
C neighbouring nodes before loop

execution
C$OMP MASTER
call MPI_Irecv(A(1,0),nrow,MPI_DOUBLE_PRECISION,
* pleft, 1235, MPI_COMM_WORLD, req(1), ierr)
call MPI_Isend(A(1,ncol),nrow,MPI_DOUBLE_PRECISION,
* pright, 1235, MPI_COMM_WORLD,req(2), ierr)
call MPI_Irecv(A(1,ncol+1),nrow,MPI_DOUBLE_PRECISION,
* pright, 1236, MPI_COMM_WORLD, req(3), ierr)
call MPI_Isend(A(1,1),nrow,MPI_DOUBLE_PRECISION,
* pleft, 1236, MPI_COMM_WORLD,req(4), ierr)
call MPI_Irecv(A(0,1),1,vectype,
* pup, 1237, MPI_COMM_WORLD, req(5), ierr)
call MPI_Isend(A(nrow,1),1,vectype,
* pdown, 1237, MPI_COMM_WORLD,req(6), ierr)
call MPI_Irecv(A(nrow+1,1),1,vectype,
* pdown, 1238, MPI_COMM_WORLD, req(7), ierr)
call MPI_Isend(A(1,1),1,vectype,
* pup, 1238, MPI_COMM_WORLD,req(8), ierr)
call MPI_Waitall(8,req,status, ierr)
C$OMP END MASTER
C$OMP BARRIER


Слайд 21C$OMP DO
DO J = 2, ncol-1

DO I = 2, nrow-1
B(I, J) = (A( I-1, J ) + A( I, J-1 ) +
* A( I+1, J) + A( I, J+1 )) / 4
ENDDO
ENDDO
ENDDO
C$OMP END PARALLEL
call MPI_Finalize(ierr)
END


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


Слайд 22DVM/OpenMP – гибридная модель программирования высокого уровня


Данные



Данные

Вычисления

Узел N
OpenMP
DVM
DVM


Вычисления
Параллельное программирование с OpenMP:

Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г.

из 26


Слайд 23
Алгоритм Якоби в модели DVM/OpenMP

PROGRAM JAC_OpenMP_DVM
PARAMETER (L=8, ITMAX=20)
REAL A(L,L), B(L,L)
CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A
CDVM$ ALIGN B(I,J) WITH A(I,J)
C$OMP PARALLEL SHARED(A,B) PRIVATE(I,J,IT)
DO IT = 1, ITMAX
CDVM$ PARALLEL (J,I) ON A(I, J)
C$OMP DO
DO J = 2, L-1
DO I = 2, L-1
A(I, J) = B(I, J)
ENDDO
ENDDO
CDVM$ PARALLEL (J,I) ON B(I, J), SHADOW_RENEW (A)
C$OMP DO
DO J = 2, L-1
DO I = 2, L-1
B(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1)) / 4
ENDDO
ENDDO
ENDDO
C$OMP END PARALLEL
END

Слайд 24 из 26
Литература
Cluster OpenMP. User Manual. http://cache-www.intel.com/cd/00/00/32/91/329148_329148.pdf
Jay P. Hoeflinger. Extending OpenMP

to Clusters. http://cache-www.intel.com/cd/00/00/28/58/285865_285865.pdf
Rolf Rabenseifner, Bettina Krammer. OpenMP on MPPs and clusters of SMP nodes using Intel ® Compilers with Cluster OpenMP https://fs.hlrs.de/projects/par/par_prog_ws/2006F/20A_ClusterOpenMP.pdf
DVM-система. http://www.keldysh.ru/dvm

Москва, 2009 г.

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Слайд 25 из 26
Спасибо за внимание!


Вопросы?
Москва, 2009 г.
Параллельное программирование с OpenMP: Использование

OpenMP на кластере © Бахтин В.А.

Слайд 26 из 26
Бахтин В.А., кандидат физ.-мат. наук, заведующий сектором, Институт

прикладной математики им. М.В.Келдыша РАН
bakhtin@keldysh.ru

Контакты

Москва, 2009 г.

Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика