Презентация "Учебный курс Параллельное программирование с OpenMP" - скачать презентации по Информатике

Содержание

Слайд 2

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

Москва, 2012 г.

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

из

46

Содержание

Тенденции развития современных процессоров
Существующие подходы для создания параллельных программ
Основные возможности OpenMP
SMP и DSM - системы
Литература

Слайд 3

В течение нескольких десятилетий развитие ЭВМ сопровождалось удвоением их быстродействия каждые

В течение нескольких десятилетий развитие ЭВМ сопровождалось удвоением их быстродействия каждые

1.5-2 года. Это обеспечивалось и повышением тактовой частоты и совершенствованием архитектуры (параллельное и конвейерное выполнение команд).
Узким местом стала оперативная память. Знаменитый закон Мура, так хорошо работающий для процессоров, совершенно не применим для памяти, где скорости доступа удваиваются в лучшем случае каждые 6 лет.
Совершенствовались системы кэш-памяти, увеличивался объем, усложнялись алгоритмы ее использования.
Для процессора Intel Itanium:
Latency to L1: 1-2 cycles
Latency to L2: 5 - 7 cycles
Latency to L3: 12 - 21 cycles
Latency to memory: 180 – 225 cycles
Важным параметром становится - GUPS (Giga Updates Per Second)

Тенденции развития современных процессоров

Москва, 2012 г.

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

из 46

Слайд 4

Время Тенденции развития современных процессоров В П В П В П

Время

Тенденции развития современных процессоров

В

П

В

П

В

П

В

П

В

П

В

П


Поток

Поток

Время

В

П

В

П

В

П

Поток 1

В

П

В

П

В

П

В

П

В

П

В

П

В

П

В

П

В

П

Поток 2

Поток 3

Поток 4

В

- вычисления

П

- доступ к

памяти

Chip
MultiThreading

увеличили производительность процессора в 2 раза

Поток или нить (по-английски “thread”) – это легковесный процесс, имеющий с другими потоками общие ресурсы, включая общую оперативную память.

Москва, 2012 г.

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

из 46

Слайд 5

Москва, 2012 г. Параллельное программирование с OpenMP: Введение © Бахтин В.А. из 46 Top 500

Москва, 2012 г.

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

из

46

Top 500

Слайд 6

Современные суперкомпьютерные системы Москва, 2012 г. Параллельное программирование с OpenMP: Введение

Современные суперкомпьютерные системы

Москва, 2012 г.

Параллельное программирование с OpenMP: Введение © Бахтин

В.А.

из 46

Суперкомпьютер K computer, SPARC64 VIIIfx 2.0GHz, Tofu interconnect
Пиковая производительность - 11280 TFlop/s
Число ядер в системе — 705 024
Производительность на Linpack - 10510 TFlop/s (93.17 % от пиковой)
Энергопотребление комплекса - 12659.89 кВт
Важным параметром становится – Power Efficency (Megaflops/watt)

Слайд 7

Современные суперкомпьютерные системы Москва, 2012 г. Параллельное программирование с OpenMP: Введение

Современные суперкомпьютерные системы

Москва, 2012 г.

Параллельное программирование с OpenMP: Введение © Бахтин

В.А.

из 46

Суперкомпьютер Sequoia, IBM BlueGene/Q, Power BQC 16C 1.6GHz, Custom interconnect
Пиковая производительность – 20132.66 TFlop/s
Число ядер в системе — 1 572 864
Производительность на Linpack – 16324.75 TFlop/s (81.08 % от пиковой)
Энергопотребление комплекса - 7890.0 кВт
Важным параметром становится – Power Efficency (Megaflops/watt)
Как добиться максимальной производительности на Ватт => Chip MultiProcessing, многоядерность.

Слайд 8

Тенденции развития современных процессоров Москва, 2012 г. Параллельное программирование с OpenMP:

Тенденции развития современных процессоров

Москва, 2012 г.

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

Бахтин В.А.

из 46

AMD Opteron серии 6200
6284 SE 16 ядер @ 2,7 ГГц, 16 МБ L3 Cache
6220 8 ядер @ 3,0 ГГц, 16 МБ L3 Cache
6204 4 ядра @ 3,3 ГГц, 16 МБ L3 Cache
встроенный контроллер памяти (4 канала памяти DDR3)
4 канала «точка-точка» с использованием HyperTransort 3.0

Слайд 9

Тенденции развития современных процессоров Москва, 2012 г. Параллельное программирование с OpenMP:

Тенденции развития современных процессоров

Москва, 2012 г.

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

Бахтин В.А.

из 46

Intel Xeon серии E5
2690 8 ядер @ 2,9 ГГц, 16 нитей, 20 МБ L3 Cache
2643 4 ядра @ 3,5 ГГц, 8 нитей, 10 МБ L3 Cache
Intel® Turbo Boost Intel® Hyper-Threading
Intel® QuickPath Intel® Intelligent Power

Слайд 10

Тенденции развития современных процессоров Москва, 2012 г. Параллельное программирование с OpenMP:

Тенденции развития современных процессоров

Москва, 2012 г.

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

Бахтин В.А.

из 46

Intel Core i7-3960X Extreme Edition
3,3 ГГц (3,9 ГГц)
6 ядeр
12 потоков с технологией Intel Hyper-Threading
15 МБ кэш-памяти Intel Smart Cache
встроенный контроллер памяти (4 канала памяти DDR3 1066/1333/1600 МГц )
технология Intel QuickPath Interconnect

Слайд 11

Тенденции развития современных процессоров Intel Itanium 9350 (Tukwila) 1,73 ГГц 4

Тенденции развития современных процессоров

Intel Itanium 9350 (Tukwila) 1,73 ГГц
4 ядeр
8 потоков

с технологией Intel Hyper-Threading
24 МБ L3 кэш-памяти
технология Intel QuickPath Interconnect
технология Intel Turbo Boost

Москва, 2012 г.

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

из 46

Слайд 12

Тенденции развития современных процессоров IBM Power7 3,5 - 4,0 ГГц 8

Тенденции развития современных процессоров

IBM Power7
3,5 - 4,0 ГГц
8 ядер x 4

нити Simultaneuos MultiThreading
L1 64КБ
L2 256 КБ
L3 32 МБ
встроенный контроллер памяти

Москва, 2012 г.

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

из 46

Слайд 13

Тенденции развития современных процессоров Темпы уменьшения латентности памяти гораздо ниже темпов

Тенденции развития современных процессоров

Темпы уменьшения латентности памяти гораздо ниже темпов ускорения

процессоров + прогресс в технологии изготовления кристаллов => CMT (Chip MultiThreading)
Опережающий рост потребления энергии при росте тактовой частоты + прогресс в технологии изготовления кристаллов => CMP (Chip MultiProcessing, многоядерность)
И то и другое требует более глубокого распараллеливания для эффективного использования аппаратуры

Москва, 2012 г.

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

из 46

Слайд 14

Существующие подходы для создания параллельных программ Автоматическое / автоматизированное распараллеливание Библиотеки

Существующие подходы для создания параллельных программ

Автоматическое / автоматизированное распараллеливание
Библиотеки нитей
Win32 API
POSIX
Библиотеки

передачи сообщений
MPI
OpenMP

Москва, 2012 г.

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

из 46

Слайд 15

Москва, 2012 г. Параллельное программирование с OpenMP: Введение © Бахтин В.А. из 46 Вычисление числа π

Москва, 2012 г.

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

из

46

Вычисление числа π

Слайд 16

#include int main () { int n =100000, i; double pi,

#include
int main ()
{
int n =100000, i;
double pi, h,

sum, x;
h = 1.0 / (double) n;
sum = 0.0;
for (i = 1; i <= n; i ++)
{
x = h * ((double)i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
pi = h * sum;
printf("pi is approximately %.16f”, pi);
return 0;
}

Вычисление числа π. Последовательная программа.

Москва, 2012 г.

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

из 46

Слайд 17

Автоматическое распараллеливание Polaris, CAPO, WPP, SUIF, VAST/Parallel, OSCAR, Intel/OpenMP, UTL icc

Автоматическое распараллеливание

Polaris, CAPO, WPP, SUIF, VAST/Parallel, OSCAR, Intel/OpenMP, UTL
icc -parallel

pi.c
pi.c(8): (col. 5) remark: LOOP WAS AUTO-PARALLELIZED.
pi.c(8): (col. 5) remark: LOOP WAS VECTORIZED.
pi.c(8): (col. 5) remark: LOOP WAS VECTORIZED.
В общем случае, автоматическое распараллеливание затруднено:
косвенная индексация (A[B[i]]);
указатели (ассоциация по памяти);
сложный межпроцедурный анализ.

Москва, 2012 г.

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

из 46

Слайд 18

Автоматизированное распараллеливание Intel/GAP (Guided Auto-Parallel), CAPTools/ParaWise, BERT77, FORGE Magic/DM, ДВОР (Диалоговый

Автоматизированное распараллеливание

Intel/GAP (Guided Auto-Parallel), CAPTools/ParaWise, BERT77, FORGE Magic/DM, ДВОР (Диалоговый

Высокоуровневый Оптимизирующий Распараллеливатель), САПФОР (Система Автоматизации Параллелизации ФОРтран программ)
for (i=0; i if (A[i] > 0) {b=A[i]; A[i] = 1 / A[i]; }
if (A[i] > 1) {A[i] += b;}
}
icc -guide -parallel test.cpp

Москва, 2012 г.

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

из 46

Слайд 19

Автоматизированное распараллеливание test.cpp(49): remark #30521: (PAR) Loop at line 49 cannot

Автоматизированное распараллеливание

test.cpp(49): remark #30521: (PAR) Loop at line 49 cannot be

parallelized due to conditional assignment(s) into the following variable(s): b. This loop will be parallelized if the variable(s) become unconditionally initialized at the top of every iteration. [VERIFY] Make sure that the value(s) of the variable(s) read in any iteration of the loop must have been written earlier in the same iteration.
test.cpp(49): remark #30525: (PAR) If the trip count of the loop at line 49 is greater than 188, then use "#pragma loop count min(188)" to parallelize this loop. [VERIFY] Make sure that the loop has a minimum of 188 iterations.
#pragma loop count min (188)
for (i=0; i b = A[i];
if (A[i] > 0) {A[i] = 1 / A[i];}
if (A[i] > 1) {A[i] += b;}
}

Москва, 2012 г.

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

из 46

Слайд 20

#include #include #define NUM_THREADS 2 CRITICAL_SECTION hCriticalSection; double pi = 0.0;

#include
#include
#define NUM_THREADS 2
CRITICAL_SECTION hCriticalSection;
double pi = 0.0;
int n =100000;
void

main ()
{
int i, threadArg[NUM_THREADS];
DWORD threadID;
HANDLE threadHandles[NUM_THREADS];
for(i=0; i InitializeCriticalSection(&hCriticalSection);
for (i=0; i CreateThread(0,0,(LPTHREAD_START_ROUTINE) Pi,&threadArg[i], 0, &threadID);
WaitForMultipleObjects(NUM_THREADS, threadHandles, TRUE,INFINITE);
printf("pi is approximately %.16f”, pi);
}

Вычисление числа π с использованием Win32 API

Москва, 2012 г.

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

из 46

Слайд 21

void Pi (void *arg) { int i, start; double h, sum,

void Pi (void *arg)
{
int i, start;
double h, sum, x;

h = 1.0 / (double) n;
sum = 0.0;
start = *(int *) arg;
for (i=start; i<= n; i=i+NUM_THREADS)
{
x = h * ((double)i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
EnterCriticalSection(&hCriticalSection);
pi += h * sum;
LeaveCriticalSection(&hCriticalSection);
}

Вычисление числа π с использованием Win32 API

Москва, 2012 г.

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

из 46

из 46

Слайд 22

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

Москва, 2012 г.

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

из

46

из 46

Конфликт доступа к данным

При взаимодействии через общую память нити должны синхронизовать свое выполнение.
Thread0: pi = pi + val; && Thread1: pi = pi + val;

Результат зависит от порядка выполнения команд. Требуется взаимное исключение критических интервалов.

Слайд 23

#include "mpi.h" #include int main (int argc, char *argv[]) { int

#include "mpi.h"
#include
int main (int argc, char *argv[])
{
int n =100000,

myid, numprocs, i;
double mypi, pi, h, sum, x;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
h = 1.0 / (double) n;
sum = 0.0;

Вычисление числа π с использованием MPI

Москва, 2012 г.

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

из 46

Слайд 24

for (i = myid + 1; i { x = h

for (i = myid + 1; i <= n; i

+= numprocs)
{
x = h * ((double)i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
mypi = h * sum;
MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
if (myid == 0) printf("pi is approximately %.16f”, pi);
MPI_Finalize();
return 0;
}

Вычисление числа π с использованием MPI

Москва, 2012 г.

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

из 46

Слайд 25

#include int main () { int n =100000, i; double pi,

#include
int main ()
{
int n =100000, i;
double pi, h,

sum, x;
h = 1.0 / (double) n;
sum = 0.0;
#pragma omp parallel for reduction(+:sum) private(x)
for (i = 1; i <= n; i ++)
{
x = h * ((double)i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
pi = h * sum;
printf("pi is approximately %.16f”, pi);
return 0;
}

Вычисление числа π c использованием OpenMP

Москва, 2012 г.

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

из 46

Слайд 26

Достоинства использования OpenMP вместо MPI для многоядерных процессоров Возможность инкрементального распараллеливания

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

Возможность инкрементального распараллеливания
Упрощение программирования и

эффективность на нерегулярных вычислениях, проводимых над общими данными
Ликвидация дублирования данных в памяти, свойственного MPI-программам
Объем памяти пропорционален быстродействию процессора. В последние годы увеличение производительности процессора достигается увеличением числа ядер, при этом частота каждого ядра не увеличивается. Наблюдается тенденция к сокращению объема оперативной памяти, приходящейся на одно ядро. Присущая OpenMP экономия памяти становится очень важна.
Наличие локальных и/или разделяемых ядрами КЭШей будут учитываться при оптимизации OpenMP-программ компиляторами, что не могут делать компиляторы с последовательных языков для MPI-процессов.

Москва, 2012 г.

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

из 46

из 46

Слайд 27

Тесты NAS Москва, 2012 г. Параллельное программирование с OpenMP: Введение © Бахтин В.А. из 46

Тесты NAS

Москва, 2012 г.

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

из 46
Слайд 28

Тесты NAS Москва, 2012 г. Параллельное программирование с OpenMP: Введение ©

Тесты NAS

Москва, 2012 г.

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

из 46

Analyzing the Effect of Different Programming Models Upon Performance and Memory Usage on Cray XT5 Platforms
https://www.nersc.gov/assets/NERSC-Staff-Publications/2010/Cug2010Shan.pdf

Слайд 29

Тесты NAS Москва, 2012 г. Параллельное программирование с OpenMP: Введение ©

Тесты NAS

Москва, 2012 г.

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

из 46

Analyzing the Effect of Different Programming Models Upon Performance and Memory Usage on Cray XT5 Platforms
https://www.nersc.gov/assets/NERSC-Staff-Publications/2010/Cug2010Shan.pdf

Слайд 30

Достоинства использования OpenMP вместо MPI для многоядерных процессоров #define Max(a,b) ((a)>(b)?(a):(b))

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

#define Max(a,b) ((a)>(b)?(a):(b))
#define L 8
#define

ITMAX 20
int i,j,it,k;
double eps, MAXEPS = 0.5;
double A[L][L], B[L][L];
int main(int an, char **as)
{
for (it=1; it < ITMAX; it++) {
eps= 0.;
for(i=1; j<=L-2; j++)
for(j=1; j<=L-2; j++) {eps = Max(fabs(B[i][j]-A[i][j]),eps); A[i][j] = B[i][j]; }
for(i=1; j<=L-2; j++)
for(j=1; j<=L-2; j++) B[i][j] = (A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1])/4.;
printf( "it=%4i eps=%f\n", it,eps);
if (eps < MAXEPS) break;
}
}

Москва, 2012 г.

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

из 46

Слайд 31

Достоинства использования OpenMP вместо MPI для многоядерных процессоров Москва, 2012 г.

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

Москва, 2012 г.

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

OpenMP: Введение © Бахтин В.А.

Для получения программы, способной работать на кластере, необходимо распределить данные и вычисления между процессорами.
После распределения данных требуется организовать межпроцессорные взаимодействия. В данном случае - для доступа к удаленным данным используются “теневые” грани, которые являются источником дублирования данных.

из 46

Слайд 32

История OpenMP Москва, 2012 г. Параллельное программирование с OpenMP: Введение ©

История OpenMP

Москва, 2012 г.

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

из 46

OpenMP Fortran 1.1

OpenMP C/C++ 1.0

OpenMP
Fortran 2.0

OpenMP
C/C++ 2.0

1998

2000

1999

2002

OpenMP Fortran 1.0

1997

OpenMP
F/C/C++ 2.5

2005

OpenMP
F/C/C++ 3.0

2008

OpenMP
F/C/C++ 3.1

2011

Слайд 33

OpenMP Architecture Review Board Москва, 2012 г. Параллельное программирование с OpenMP:

OpenMP Architecture Review Board

Москва, 2012 г.

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

Бахтин В.А.

из 46

AMD
Cray
Fujitsu
HP
IBM
Intel
NEC
The Portland Group, Inc.
Oracle Corporation
Microsoft
Texas Instrument
CAPS-Enterprise
NVIDIA
Convey Computer

ANL
ASC/LLNL
cOMPunity
EPCC
LANL
NASA
RWTH Aachen University
Texas Advanced Computing Center

Слайд 34

Компиляторы, поддерживающие OpenMP Москва, 2012 г. Параллельное программирование с OpenMP: Введение

Компиляторы, поддерживающие OpenMP

Москва, 2012 г.

Параллельное программирование с OpenMP: Введение © Бахтин

В.А.

из 46

OpenMP 3.1:
Intel 12.0: Linux, Windows and MacOS
Oracle Solaris Studio12.3: Linux and Solaris
GNU gcc (4.7.0)
OpenMP 3.0:
PGI 8.0: Linux and Windows
IBM 10.1: Linux and AIX
Cray: Cray XT series Linux environment
Absoft Pro FortranMP: 11.1
NAG Fortran Complier 5.3
Предыдущие версии OpenMP:
Lahey/Fujitsu Fortran 95
PathScale
HP
Microsoft Visual Studio 2008 C++

Слайд 35

Обзор основных возможностей OpenMP omp_set_lock(lck) #pragma omp parallel for private(a, b)

Обзор основных возможностей OpenMP

omp_set_lock(lck)

#pragma omp parallel for private(a, b)

#pragma omp critical

C$OMP

PARALLEL DO SHARED(A,B,C)

C$OMP PARALLEL REDUCTION (+: A, B)

CALL OMP_INIT_LOCK (LCK)

CALL OMP_TEST_LOCK(LCK)

SETENV OMP_SCHEDULE “STATIC,4”

CALL CALL OMP_SET_NUM_THREADS(10)

C$OMP DO LASTPRIVATE(XX)

C$OMP ORDERED

C$OMP SINGLE PRIVATE(X)

C$OMP SECTIONS

C$OMP MASTER

C$OMP ATOMIC

C$OMP FLUSH

C$OMP PARALLEL DO ORDERED PRIVATE (A, B, C)

C$OMP THREADPRIVATE(/ABC/)

C$OMP PARALLEL COPYIN(/blk/)

nthrds = OMP_GET_NUM_PROCS()

C$OMP BARRIER

OpenMP: API для написания многонитевых приложений
Множество директив компилятора, набор функции библиотеки системы поддержки, переменные окружения
Облегчает создание многонитиевых программ на Фортране, C и C++
Обобщение опыта создания параллельных программ для SMP и DSM систем за последние 20 лет

Москва, 2012 г.

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

из 46

Слайд 36

Все процессоры имеют доступ к любой точке памяти с одинаковой скоростью.

Все процессоры имеют доступ к любой точке памяти с одинаковой скоростью.
Процессоры

подключены к памяти либо с помощью общей шины, либо с помощью crossbar-коммутатора.
Аппаратно поддерживается когерентность кэшей.

Москва, 2012 г.

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

Cимметричные мультипроцессорные системы (SMP)

из 46

Слайд 37

Fujitsu SPARC Enterprise M9000 SPARC64 VII 2,88 / 2,52 GHz 64

Fujitsu SPARC Enterprise M9000
SPARC64 VII 2,88 / 2,52 GHz
64 процессоров, 256

ядер, 512 нитей (Simultaneous Multi Threading)
4TB памяти
OS Solaris 10
http://www.fujitsu.com/sparcenterprise/

Москва, 2012 г.

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

Cимметричные мультипроцессорные системы (SMP)

из 46

Слайд 38

Системы с неоднородным доступом к памяти (NUMA) Система состоит из однородных

Системы с неоднородным доступом к памяти (NUMA)

Система состоит из однородных базовых

модулей (плат), состоящих из небольшого числа процессоров и блока памяти.
Модули объединены с помощью высокоскоростного коммутатора.
Поддерживается единое адресное пространство.
Доступ к локальной памяти в несколько раз быстрее, чем к удаленной.

Москва, 2012 г.

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

из 46

Слайд 39

Системы с неоднородным доступом к памяти (NUMA) SGI Altix UV (UltraVioloet)

Системы с неоднородным доступом к памяти (NUMA)

SGI Altix UV (UltraVioloet) 1000
256

Intel® Xeon® quad-, six- or eight-core 7500 series (2048 cores)
16 TB памяти
Interconnect Speed 15 ГБ/с, 1мкс
http://www.sgi.com/products/servers/altix/uv/

Москва, 2012 г.

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

из 46

Слайд 40

Intel Many Integrated Core (MIC) !dir$ offload target(mic) !$omp parallel do

Intel Many Integrated Core (MIC)
!dir$ offload target(mic)
!$omp parallel do
do i=1,10

A(i) = B(i) * C(i)
enddo
!$omp end parallel

Москва, 2012 г.

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

из 46

Слайд 41

Литературa http://www.openmp.org http://www.compunity.org http://www.parallel.ru/tech/tech_dev/openmp.html Москва, 2012 г. Параллельное программирование с OpenMP:

Литературa

http://www.openmp.org
http://www.compunity.org
http://www.parallel.ru/tech/tech_dev/openmp.html

Москва, 2012 г.

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

из

46
Слайд 42

Литература Антонов А.С. Параллельное программирование с использованием технологии OpenMP: Учебное пособие.-М.:

Литература

Антонов А.С. Параллельное программирование с использованием технологии OpenMP: Учебное пособие.-М.:

Изд-во МГУ, 2009. http://parallel.ru/info/parallel/openmp/OpenMP.pdf
Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.
Гергель В.П. Теория и практика параллельных вычислений. - М.: Интернет-Университет, БИНОМ. Лаборатория знаний, 2007.

Москва, 2012 г.

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

из 46

Слайд 43

Литература Учебные курсы Интернет Университета Информационных технологий Гергель В.П. Теория и

Литература

Учебные курсы Интернет Университета Информационных технологий
Гергель В.П. Теория и практика

параллельных вычислений. — http://www.intuit.ru/department/calculate/paralltp/
Левин М.П. Параллельное программирование с OpenMP
http://www.intuit.ru/department/se/openmp/
Дополнительные учебные курсы:
Богданов А.В. и др. Архитектуры и топологии многопроцессорных вычислительных систем. — http://www.intuit.ru/department/hardware/atmcs/
Барский А.Б. Архитектура параллельных вычислительных систем. — http://www.intuit.ru/department/hardware/paralltech/
Барский А.Б. Параллельное программирование. — http://www.intuit.ru/department/se/parallprog/

Москва, 2012 г.

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

из 46

Слайд 44

Вопросы? Вопросы? Москва, 2012 г. Параллельное программирование с OpenMP: Введение © Бахтин В.А. из 46

Вопросы?
Вопросы?

Москва, 2012 г.

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

из

46
Слайд 45

OpenMP – модель параллелизма по управлению Следующая тема Москва, 2012 г.

OpenMP – модель параллелизма по управлению

Следующая тема

Москва, 2012 г.

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

с OpenMP: Введение © Бахтин В.А.

из 46