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

Интернет Университет

Суперкомпьютерных технологий

Введение

Учебный курс
Параллельное программирование с
OpenMP

Бахтин В.А., кандидат физ.-мат. наук,


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

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


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

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


Москва, 2016 г. © Бахтин В.А. 2 из 51
Тенденции развития современных процессоров

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


удвоением их быстродействия каждые 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)
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 3 из 51
Тенденции развития современных процессоров
Поток или нить (по-
английски “thread”) – это
Поток легковесный процесс,
В П В П В П
имеющий с другими
увеличили производительность процессора в 2 раза потоками общие
Поток ресурсы, включая
В П В П В П общую оперативную
память.
Время

Поток 4 В П В П В П

Поток 3 В П В П В П
Chip
Поток 2 MultiThreading
В П В П В П
Поток 1
В П В П В П

Время
В - вычисления П - доступ к памяти
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 4 из 51
Top 500

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


Москва, 2016 г. © Бахтин В.А. 5 из 51
Современные суперкомпьютерные системы
№ 5 в Top 500
Суперкомпьютер K computer, SPARC64 VIIIfx 2.0GHz, Tofu
interconnect
 Пиковая производительность - 11280 TFlop/s
 Число ядер в системе — 705 024
 Производительность на Linpack - 10510 TFlop/s (93.17 % от пиковой)
 Энергопотребление комплекса - 12659.89 кВт

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


Москва, 2016 г. © Бахтин В.А. 6 из 51
Современные суперкомпьютерные системы
№ 1 в Top 500

Суперкомпьютер Sunway TaihuLight, Sunway MPP, SW26010 260C


1.45GHz, Custom interconnect
 Пиковая производительность – 125435.9 TFlop/s
 Число ядер в системе — 10 649 600
 Производительность на Linpack – 93014.5 TFlop/s (74.15 % от пиковой)
 Энергопотребление комплекса - 15371.0 кВт

Важным параметром становится – Power Efficency (Megaflops/watt)

Как добиться максимальной производительности на Ватт => Chip


MultiProcessing, многоядерность.

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


Москва, 2016 г. © Бахтин В.А. 7 из 51
Тенденции развития современных процессоров
ShenWei SW26010
64-разрядный RISC-процессор с поддержкой
SIMD-инструкций и внеочередным
исполнением команд

Изготовлен по схеме, предусматривающей


использование четырех кластеров с 64
вычислительными ядрами (CPE) и одним
управляющим ядром (MPE) в каждом.

В каждом кластере также имеется собственный


контроллер памяти, суммарная пропускная
способность на один процессорный разъем
достигает 136,5 ГБ/с.
На каждое ядро выделено 12 КБ кэш-памяти
инструкций и 64 КБ кэш-памяти данных.
Рабочая частота процессора - 1,45 ГГц.

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


Москва, 2016 г. © Бахтин В.А. 8 из 51
Тенденции развития современных процессоров

AMD Opteron серии 6300


6380 SE 16 ядер @ 2,5 ГГц, 16 МБ
L3 Cache
6348 12 ядер @ 2,8 ГГц, 16 МБ L3
Cache
6328 8 ядер @ 3,2 ГГц, 16 МБ L3
Cache
6308 4 ядра @ 3,5 ГГц, 16 МБ L3
Cache
технология AMD Turbo CORE
встроенный контроллер памяти (4
канала памяти DDR3)
4 канала «точка-точка» с
использованием HyperTransort 3.0

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


Москва, 2016 г. © Бахтин В.А. 9 из 51
Тенденции развития современных процессоров
Intel Xeon Processor серии E5
E5-2699 v4 (55M Cache, 2.20 GHz) 22 ядра, 44 нити
E5-2698 v4 (50M Cache, 2.20 GHz) 20 ядер, 40 нитей
E5-2697 v4 (45M Cache, 2.30 GHz) 18 ядер, 36 нитей
E5-2697A v4 (40M Cache, 2.60 GHz) 16 ядер, 32 нити
E5-2667 v4 (25M Cache, 3.20 GHz) 8 ядер, 16 нитей

Intel® Turbo Boost


Intel® Hyper-Threading
Intel® Intelligent Power
Intel® QuickPath

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


Москва, 2016 г. © Бахтин В.А. 10 из 51
Тенденции развития современных процессоров

Intel Core i7 High End Desktop Processors


i7-6950X Extreme Edition (25M Cache, up to 3.50 GHz),
10 ядер, 20 нитей

i7-6900K Processor (20M Cache, up to 3.70 GHz),


8 ядер, 16 нитей

i7-6850K Processor (15M Cache, up to 3.80 GHz),


6 ядер, 12 нитей

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


Москва, 2016 г. © Бахтин В.А. 11 из 51
Тенденции развития современных процессоров

IBM Power8
 2,75 – 4,2 ГГц
 12 ядер x 8 нитей
Simultaneuos
MultiThreading
 64 КБ Data Cache +
32КБ instruction Cache
 L2 512 КБ
 L3 96 МБ

www.idh.ch/IBM_TU_2013/Power8.pdf

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


Москва, 2016 г. © Бахтин В.А. 12 из 51
Отечественный процессор «Эльбрус-8C»
Количество ядер 8
Кэш-память 2го уровня 8 * 512 КБ
Кэш-память 3го уровня 16 МБ
Рабочая частота 1.3 ГГц
Производительность ~250 ГФлопс

Тип контроллеров памяти DDR3-1600

Кол-во контроллеров памяти 4


Поддержка многопроцессорных
До 4 процессоров
систем
Каналы межпроцессорного
3 (16 ГБ/с)
обмена (пропускная способность)

Технологический процесс 28 нм
Площадь кристалла 350 кв. мм
Рассеиваемая мощность на
60 – 90 Вт
уровне
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 13 из 51
Тенденции развития современных процессоров

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


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

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


Москва, 2016 г. © Бахтин В.А. 14 из 51
Существующие подходы для создания параллельных
программ
 Автоматическое / автоматизированное
распараллеливание
 Библиотеки нитей
• Win32 API
• POSIX
 Библиотеки передачи сообщений
• MPI
 OpenMP

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


Москва, 2016 г. © Бахтин В.А. 15 из 51
Вычисление числа 
1


4.0
4.0
(1+x2) dx = 
0

Мы можем
аппроксимировать интеграл
F(x) = 4.0/(1+x2)

как сумму прямоугольников:


2.0
N

 F(x )x  
i
i=0

Где каждый прямоугольник


1.0
имеет ширину x и высоту
0.0
X F(xi) в середине интервала
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 16 из 51
Вычисление числа . Последовательная
программа.
#include <stdio.h>
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;
}

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


Москва, 2016 г. © Бахтин В.А. 17 из 51
Автоматическое распараллеливание
Polaris, CAPO, WPP, SUIF, VAST/Parallel, OSCAR,
Intel/OpenMP, UTL, Parallware

icc -parallel –O3 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]]);
 указатели (ассоциация по памяти);
 сложный межпроцедурный анализ.

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


Москва, 2016 г. © Бахтин В.А. 18 из 51
Автоматизированное распараллеливание
Intel/GAP (Guided Auto-Parallel), CAPTools/ParaWise,
BERT77, FORGE Magic/DM, ДВОР (Диалоговый
Высокоуровневый Оптимизирующий
Распараллеливатель), САПФОР (Система Автоматизации
Параллелизации ФОРтран программ)

for (i=0; i<n; i++) {


if (A[i] > 0) {b=A[i]; A[i] = 1 / A[i]; }
if (A[i] > 1) {A[i] += b;}
}

icc -guide -parallel –O3 test.cpp

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


Москва, 2016 г. © Бахтин В.А. 19 из 51
Автоматизированное распараллеливание
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<n; i++) {
b = A[i];
if (A[i] > 0) {A[i] = 1 / A[i];}
if (A[i] > 1) {A[i] += b;}
}

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


Москва, 2016 г. © Бахтин В.А. 20 из 51
Вычисление числа  с использованием
Win32 API
#include <stdio.h>
#include <windows.h>
#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<NUM_THREADS; i++) threadArg[i] = i+1;
InitializeCriticalSection(&hCriticalSection);
for (i=0; i<NUM_THREADS; i++) threadHandles[i] =
CreateThread(0,0,(LPTHREAD_START_ROUTINE) Pi,&threadArg[i], 0, &threadID);
WaitForMultipleObjects(NUM_THREADS, threadHandles, TRUE,INFINITE);
printf("pi is approximately %.16f”, pi);
}
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 21 из 51
Вычисление числа  с использованием
Win32 API
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);
}

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


Москва, 2016 г. © Бахтин В.А. 22 из 51
Конфликт доступа к данным
При взаимодействии через общую память нити должны синхронизовать
свое выполнение.

Thread0: pi = pi + val; && Thread1: pi = pi + val;

Время Thread 0 Thread 1


1 LOAD R1,pi
2 LOAD R2,val
3 ADD R1,R2 LOAD R3,pi
4 STORE R1,pi LOAD R4,val
5 ADD R3,R4
6 STORE R3,pi

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


исключение критических интервалов.

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


Москва, 2016 г. © Бахтин В.А. 23 из 51
Вычисление числа  с использованием
POSIX Threads
#include <pthread.h>
#define NUM_THREADS 2
pthread_mutex_t mutexReduction;
double pi = 0.0;
int n =100000;
void main ()
{
int i, threadArg[NUM_THREADS];
pthread_t threadHandles[NUM_THREADS];
pthread_mutex_init (&mutexReduction, NULL);
for (i=0; i<NUM_THREADS; i++) {
threadArg[i] = i+1;
if (pthread_create(&threadHandles [i], NULL, Pi, &threadArg[i]) != 0) return EXIT_FAILURE;
}
for (i=0; i<NUM_THREADS; i++) {
if (pthread_join(&threadHandles [i], NULL) != 0) return EXIT_FAILURE;
}
pthread_mutex_destroy(&mutexReduction );
printf("pi is approximately %.16f”, pi);
}
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 24 из 51
Вычисление числа  с использованием
POSIX Threads
static 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));
}
pthread_mutex_lock(&mutexReduction);
pi += h * sum;
pthread_mutex_unlock(&mutexReduction);
return NULL;
}

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


Москва, 2016 г. © Бахтин В.А. 25 из 51
Вычисление числа  с использованием
MPI
#include "mpi.h"
#include <stdio.h>
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);
h = 1.0 / (double) n;
sum = 0.0;

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


Москва, 2016 г. © Бахтин В.А. 26 из 51
Вычисление числа  с использованием
MPI
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;
}

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


Москва, 2016 г. © Бахтин В.А. 27 из 51
Вычисление числа  c использованием
OpenMP
#include <stdio.h>
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;
}

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


Москва, 2016 г. © Бахтин В.А. 28 из 51
Достоинства использования 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;
}
}
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 29 из 51
Достоинства использования OpenMP вместо MPI
для многоядерных процессоров

Для получения программы,


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

После распределения данных


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

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


Москва, 2016 г. © Бахтин В.А. 30 из 51
Тесты NAS

BT 3D Навье-Стокс,  метод переменных направлений

CG Оценка наибольшего собственного значения


симметричной разреженной матрицы

EP Генерация пар случайных чисел Гаусса


FT Быстрое преобразование Фурье, 3D спектральный
метод
IS Параллельная сортировка
LU 3D Навье-Стокс, метод верхней релаксации
MG 3D уравнение Пуассона, метод Multigrid
SP 3D Навье-Стокс, Beam-Warning approximate
factorization

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


Москва, 2016 г. © Бахтин В.А. 31 из 51
Тесты NAS

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
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 32 из 51
Тесты NAS

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
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 33 из 51
Достоинства использования OpenMP вместо MPI
для многоядерных процессоров(на 1ом узле кластера)
 Возможность инкрементального распараллеливания
 Упрощение программирования и эффективность на нерегулярных
вычислениях, проводимых над общими данными
 Ликвидация дублирования данных в памяти, свойственного MPI-
программам
 Объем памяти пропорционален быстродействию процессора. В
последние годы увеличение производительности процессора
достигается увеличением числа ядер, при этом частота каждого
ядра не увеличивается. Наблюдается тенденция к сокращению
объема оперативной памяти, приходящейся на одно ядро.
Присущая OpenMP экономия памяти становится очень важна.
 Наличие локальных и/или разделяемых ядрами КЭШей будут
учитываться при оптимизации OpenMP-программ компиляторами,
что не могут делать компиляторы с последовательных языков для
MPI-процессов.

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


Москва, 2016 г. © Бахтин В.А. 34 из 51
История OpenMP
1998 2002 2005 2008 2011 2013 2015

OpenMP OpenMP
C/C++ 2.0 OpenMP
C/C++ 1.0
F/C/C++ 4.5

OpenMP OpenMP OpenMP


F/C/C++ 2.5 F/C/C++ 3.0 F/C/C++ 3.1
OpenMP OpenMP
Fortran 1.0 Fortran 1.1
OpenMP
F/C/C++ 4.0
1997 1999 OpenMP
Fortran 2.0

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


Москва, 2016 г. © Бахтин В.А. 35 из 51
OpenMP Architecture Review Board
 AMD  ANL
 ARM  ASC/LLNL
 Cray  cOMPunity
 Fujitsu  EPCC
 HP  LANL
 IBM  LBNL
 Intel  NASA
 Micron  ORNL
 NEC  RWTH Aachen University
 NVIDIA  Texas Advanced Computing
 Oracle Corporation Center
 Red Hat  SNL- Sandia National Lab
 Texas Instrument  BSC - Barcelona
Supercomputing Center
 University of Houston

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


Москва, 2016 г. © Бахтин В.А. 36 из 51
Компиляторы, поддерживающие OpenMP
OpenMP 4.5:
 GNU GCC 6.1: Linux, Solaris, AIX, MacOSX, Windows, FreeBSD, NetBSD,
OpenBSD, DragonFly BSD, HPUX, RTEMS
OpenMP 4.0:
 Intel 16.0: Linux, Windows and MacOS
 Oracle Solaris Studio12.4: Linux and Solaris

OpenMP 3.1:
 Oracle Solaris Studio12.3: Linux and Solaris
 Cray: Cray XT series Linux environment
 LLVM: clang Linux and MacOS
 IBM 12.1: Linux and AIX
Предыдущие версии OpenMP:
 PGI 8.0: Linux and Windows  PathScale
 Lahey/Fujitsu Fortran 95  Microsoft Visual Studio 2008 C++
 NAG Fortran Complier 6.0  OpenUH
OpenMP 3.0:
 Absoft Pro FortranMP: 11.1
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 37 из 51
Обзор основных возможностей OpenMP
C$OMP FLUSH OpenMP:
omp API
OpenMP:
#pragma APIдля
длянаписания
criticalнаписания
многонитевых
многонитевыхприложений
приложений
C$OMP THREADPRIVATE(/ABC/) CALL OMP_SET_NUM_THREADS(10)
••Множество
Множество директив
директив компилятора,
компилятора,
C$OMP PARALLEL DO SHARED(A,B,C) CALL OMP_TEST_LOCK(LCK)
набор
наборфункции
функциибиблиотеки
библиотекисистемы
системы
CALL OMP_INIT_LOCK (LCK)
поддержки,
поддержки, переменные
переменные
C$OMP окружения
окружения
MASTER
C$OMP ATOMIC
••Облегчает
Облегчаетсоздание
созданиемногонитиевых
многонитиевых
C$OMP SINGLE PRIVATE(X)
SETENVпрограмм
программ на
наФортране,
OMP_SCHEDULE Фортране, CCииC++
“STATIC,4” C++
••Обобщение
Обобщение опыта
опытасоздания
создания
C$OMP PARALLEL DO ORDERED PRIVATE (A, B,
параллельныхC)
параллельныхпрограммC$OMP для
программ дляSMP
SMPии
ORDERED
C$OMP PARALLEL REDUCTION (+: A,DSMB) систем
DSM систем за
за последние
последние 20
20лет
лет
C$OMP SECTIONS
#pragma omp parallel for private(a, b)
C$OMP BARRIER
C$OMP PARALLEL COPYIN(/blk/) C$OMP DO LASTPRIVATE(XX)

nthrds = OMP_GET_NUM_PROCS() omp_set_lock(lck)


Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 38 из 51
Cимметричные мультипроцессорные системы
(SMP)

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


скоростью.
 Процессоры подключены к памяти либо с помощью общей шины,
либо с помощью crossbar-коммутатора.
 Аппаратно поддерживается когерентность кэшей.
Например, серверы HP 9000 V-Class, Convex SPP-1200,…
Параллельное программирование с OpenMP: Введение
Москва, 2016 г. © Бахтин В.А. 39 из 51
Системы с неоднородным доступом к памяти
(NUMA)
 Система состоит из
однородных базовых модулей
(плат), состоящих из
небольшого числа процессоров
и блока памяти.
 Модули объединены с
помощью высокоскоростного
коммутатора.
 Поддерживается единое
адресное пространство.
 Доступ к локальной памяти в
несколько раз быстрее, чем к
удаленной.

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


Москва, 2016 г. © Бахтин В.А. 40 из 51
Системы с неоднородным доступом к памяти
(NUMA)

SGI Altix UV (UltraVioloet) 2000


 256 Intel® Xeon® processor E5-4600
product family 2.4GHz-3.3GHz - 2048 Cores
(4096 Threads)
 64 TB памяти
 NUMAlink6 (NL6; 6.7GB/s bidirectional)

http://www.sgi.com/products/servers/uv/

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


Москва, 2016 г. © Бахтин В.А. 41 из 51
Top 500

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


Москва, 2016 г. © Бахтин В.А. 42 из 51
Top 500

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


Москва, 2016 г. © Бахтин В.А. 43 из 51
Intel Xeon Phi (Many Integrated Core - MIC)

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


Москва, 2016 г. © Бахтин В.А. 44 из 51
Pezy-SC Many Core Processor
Logic
1,024
Cores(PE)
Core
733MHz
Frequency
Peak Floating Point Single 3.0TFlops /
Performance Double 1.5TFlops
PCI Express GEN3.0 x 8Lane x
4Port (x16 bifurcation available)
Host Interface
JESD204B Protocol support

DDR4, DDR3 combo 64bit x 8Port


DRAM Max B/W 1533.6GB/s
Interface +Ultra WIDE IO SDRAM (2,048bit)
x 2Port Max B/W 102.4GB/s
Control CPU ARM926 2core

Process Node 28nm


FCBGA 47.5mm x 47.5mm, Ball
Package
Pitch 1mm, 2,112pin

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


Москва, 2016 г. © Бахтин В.А. 45 из 51
Литературa

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

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


Москва, 2016 г. © Бахтин В.А. 46 из 51
Литература

 Антонов А.С. Параллельное программирование с


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

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


Москва, 2016 г. © Бахтин В.А. 47 из 51
Литература
Учебные курсы Интернет Университета Информационных
технологий
 Гергель В.П. Теория и практика параллельных вычислений. —
http://www.intuit.ru/department/calculate/paralltp/
 Левин М.П. Параллельное программирование с OpenMP
http://www.intuit.ru/department/se/openmp/

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


Москва, 2016 г. © Бахтин В.А. 48 из 51
Вопросы?

Вопросы?

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


Москва, 2016 г. © Бахтин В.А. 49 из 51
Следующая тема

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

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


Москва, 2016 г. © Бахтин В.А. 50 из 51
Контакты

 Бахтин В.А., кандидат физ.-мат. наук, заведующий


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

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


Москва, 2016 г. © Бахтин В.А. 51 из 51

Вам также может понравиться