SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
Курносов Михаил Георгиевич
E-mail: mkurnosov@gmail.com
WWW: www.mkurnosov.net
Курс «Высокопроизводительные вычислительные системы»
Сибирский государственный университет телекоммуникаций и информатики (Новосибирск)
Осенний семестр, 2015
Лекция 5
Основы параллельного программирования
(Parallel programming introduction)
Параллельные вычисления (Parallel Computing)
 Цели использования многопроцессорных вычислительных систем (ВС):
 решение задачи за меньшее время на нескольких процессорах
 решение задачи с большим объёмом входных данных –
использование распределенной памяти нескольких вычислительных узлов
 решение задачи с большей вероятностью получения корректного решения
(дублирование вычислений – параллельный пересчет)
5 октября 2015 г. 2
Архитектура
вычислительных систем
с распределенной памятью
5 октября 2015 г. 3
Вычислительные системы с распределенной памятью
5 октября 2015 г. 4
CPU0
Коммуникационная сеть (Interconnect, Communication network)
Cache
Разделяемая память
(Shared memory)
CPU1
Cache
CPU2
Cache
CPU3
Cache
CPU0
Cache
Разделяемая память
(Shared memory)
CPU1
Cache
CPU2
Cache
CPU3
Cache
 Вычислительная система с распределенной памятью (Distributed memory computer system) –
совокупность вычислительных узлов, взаимодействие между которыми осуществляется через
коммуникационную сеть (InfiniBand, Gigabit Ethernet, Cray Gemeni, Fujitsu Tofu, …)
 Каждый узел имеет множество процессоров/ядер, взаимодействующих через
разделяемую память (Shared memory)
 Процессоры могут быть многоядерными,
ядра могут поддерживать одновременную многопоточность (SMT)
 http://www.top500.org
 http://www.green500.org
 http://www.graph500.org
 http://top50.supercomputers.ru
Вычислительные системы с распределенной памятью
5 октября 2015 г. 5
CPU0
Коммуникационная сеть (Interconnect, Communication network)
Cache
Разделяемая память
(Shared memory)
CPU1
Cache
CPU2
Cache
CPU3
Cache
CPU0
Cache
Разделяемая память
(Shared memory)
CPU1
Cache
CPU2
Cache
CPU3
Cache
 Вычислительная система с распределенной памятью (Distributed memory computer system) –
совокупность вычислительных узлов, взаимодействие между которыми осуществляется через
коммуникационную сеть (InfiniBand, Gigabit Ethernet, Cray Gemeni, Fujitsu Tofu, …)
 Каждый узел имеет множество процессоров/ядер, взаимодействующих через
разделяемую память (Shared memory)
 Процессоры могут быть многоядерными,
ядра могут поддерживать одновременную многопоточность (SMT)
 http://www.top500.org
 http://www.green500.org
 http://www.graph500.org
 http://top50.supercomputers.ru
ILP ILP ILP ILP ILP ILP ILP ILP
TLP/PLP (Message Passing)
TLP/PLP TLP/PLP
Вычислительные кластеры (Computer cluster)
 Вычислительные кластеры строятся на базе свободно доступных компонентов
 Вычислительные узлы: 2/4-процессорные узлы, 1 – 8 GiB оперативной памяти на ядро (поток)
 Коммуникационная сеть (сервисная и для обмена сообщениями)
 Подсистема хранения данных (дисковый массивы, параллельные и сетевые файловые системы)
 Система бесперебойного электропитания
 Система охлаждения
 Программное обеспечение: GNU/Linux (NFS, NIS, DNS, …), MPI (MPICH2, Open MPI), TORQUE/SLURM
5 октября 2015 г. 6
Сеть InfiniBand (вычислительная сеть)
Общая память
Ядро
Процессор
Ядро Ядро
Процессор
Ядро
Общая память
Ядро
Процессор
Ядро Ядро
Процессор
Ядро
Общая память
Ядро
Процессор
Ядро Ядро
Процессор
Ядро
Общая память
Ядро
Процессор
Ядро Ядро
Процессор
Ядро
Compute node 1 Compute node 2 Compute node 3 Compute node 4
Общая память
Ядро
Процессор
Ядро Ядро
Процессор
Ядро
Frontend (login node)
Сеть Gigabit Ethernet (сервисная сеть: NFS, DNS, DHCP, ssh, …)
Гибридные вычислительные узлы
5 октября 2015 г. 7
CPU1
Core1 Core2 Core3 Core4
GPU1
Cores
GPU Memory
Memory (DDR3)
CPU2
Core1 Core2 Core3 Core4
Memory (DDR3)
QPI
I/O Hub
QPI QPI
PCI Express
GPU2
Cores
GPU Memory
Коммуникационные сети (Interconnect)
 С фиксированной структурой (статической топологией) –
графом связей вычислительных узлов
 Каждый вычислительный узел имеет сетевой интерфейс
(маршрутизатор) с несколькими портами, через который
он напрямую соединён с другими узлами
 С динамической структурой – на базе коммутаторов
 Каждый вычислительный узел имеет сетевой интерфейс
с несколькими портами
 Порты интерфейсов подключены к коммутаторам,
через которые происходит взаимодействие узлов
5 октября 2015 г. 8
Сети с фиксированной структурой
 Структура сети (топология) – это граф
узлы – машины (вычислительные узлы, computer nodes)
ребра – линии связи (links)
 Показатели эффективности структур:
диаметр (максимальное из кратчайших расстояний)
средний диаметр сети
бисекционная пропускная способность (bisectional bandwidth)
 Примеры структур
kD-тор (3D, 4D, 5D): Cray Titan (#2) 3D torus,
IBM Sequoia 5D torus (#3), Fujitsu 6D torus (#4)
Гиперкуб
Решетка, кольцо, графы Кауца, циркулянтные структуры, …
5 октября 2015 г. 9
3D-тор
Сети с динамической структурой
 Вычислительные узлы связаны через активные устройства –
сетевые коммутаторы (network switches)
 Коммутатор имеет фиксированное число портов (24, 48, 96, 324)
 Как объединить в сеть тысячи узлов?
 Топология “толстого дерева” (fat tree)
Charles E. Leiserson. Fat-trees: universal networks for hardware-efficient supercomputing //
IEEE Transactions on Computers, Vol. 34, No. 10, 1985
 Сетевые технологии
 Gigabit Ethernet
 10 Gigabit Ethernet
 InfiniBand DDR/QDR/FDR
5 октября 2015 г. 10
Fat tree
Показатели эффективности коммуникационных сетей
 Пропускная способность (Bandwidth) – бит/сек. (10 – 54 Gbps – Giga bit per second)
 Латентность (Latency) – сек. (10 us – 100 ns)
 Бисекционная пропускная способность (Bisectional bandwidth)
5 октября 2015 г. 11
Классификация архитектур ВС
 Классификация Флинна (M. J. Flynn, 1966)
 По организации памяти: с общей памятью (SMP/NUMA), с распределенной памятью
 По типу поддерживаемых операндов: скалярные и векторные системы
 По доступности компонентов, из которых строится система:
проприетарные (заказные), на основе общедоступного аппаратного обеспечения
(commodity computing, проект Beowulf)
 …
5 октября 2015 г. 12
Flynn's taxonomy
Single instruction Multiple instruction
Single data SISD MISD
Multiple data SIMD MIMD
Классификация Флинна
5 октября 2015 г. 13
 Современные ВС нельзя однозначно
классифицировать по Флинну – современные
системы мультиархитектурны (SIMD + MIMD)
 Процессор – скалярные + векторные
инструкции (SIMD)
 Вычислительный узел –
SMP/NUMA-система на базе многоядерных
процессоров (MIMD) + графические процессоры
(SIMD)
 Совокупность нескольких вычислительных
узлов – MIMD
Рейтинги мощнейших ВС
1. www.top500.org – решение системы линейных алгебраических уравнений
методом LU-факторизации (High-Performance Linpack, FLOPS – Floating-point
Operations Per Seconds)
2. www.graph500.org – алгоритмы на графах (построение графа, обход в ширину,
TEPS – Traversed Edges Per Second)
3. www.green500.org – главный критерий – энергоэффективност (объем потребляемой
эленктроэнергии, kW)
4. http://top50.supercomputers.ru – рейтинг мощнейших вычислительных систем СНГ
(тест High-Performance Linpack)
5. Как создать свой тест производительности?
5 октября 2015 г. 14
www.top500.org (Июнь 2015)
5 октября 2015 г. 15
 Среднее количество вычислительных ядер в системе: 50 464
 Среднее количество ядер на сокет (процессор): 10 (4, 6, 8, 10, 12, 14, 16)
 Среднее энергопотребление: 866 kW
 Коммуникационная сеть: Infiniband (52%), 10G (16%), Custom (14%), Gigabit Ethernet (13%), Cray (3%), …
 Процессоры: Intel (~ 86%), IBM Power, AMD Opteron, SPARC64, ShenWei, NEC
 Ускорители (~ 17% систем): NVIDIA Kepler (6.6%), Intel Xeon Phi (6.2%), NVIDIA Fermi (3%), ATI Radeon (0.8%),
PEZY-SC (0.6%)
 Операционная система: GNU/Linux & Unix (~97%), IBM AIX (9 шт.), Cray Microsoft (1 шт.)
www.top500.org (Июнь 2015)
5 октября 2015 г. 16
 Среднее количество вычислительных ядер в системе: 50 464
 Среднее количество ядер на сокет (процессор): 10 (4, 6, 8, 10, 12, 14, 16)
 Среднее энергопотребление: 866 kW
 Коммуникационная сеть: Infiniband (52%), 10G (16%), Custom (14%), Gigabit Ethernet (13%), Cray (3%), …
 Процессоры: Intel (~ 86%), IBM Power, AMD Opteron, SPARC64, ShenWei, NEC
 Ускорители (~ 17% систем): NVIDIA Kepler (6.6%), Intel Xeon Phi (6.2%), NVIDIA Fermi (3%), ATI Radeon (0.8%),
PEZY-SC (0.6%)
 Операционная система: GNU/Linux & Unix (~97%), IBM AIX (9 шт.), Cray Microsoft (1 шт.)
 Новосибирская ГЭС – 460 МВт
 Новосибирская ТЭЦ-5 – 1200 МВт
Мультиархитектура современных ВС
17
 Разработка эффективных параллельных программ
для мультиархитектурных ВС требует владения стеком технологий
 Internode communications:
MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays
 Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads
 GPU: NVIDA CUDA, OpenCL,
OpenACC, OpenMP 4.0
 Vectorization (SIMD):
SSE/AVX, AltiVec
2 nodes Cray XK7
AMD Opteron
Interlagos (16 cores)
Мультиархитектура современных ВС
18
 Разработка эффективных параллельных программ
для мультиархитектурных ВС требует владения стеком технологий
 Internode communications:
MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays
 Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads
 GPU: NVIDA CUDA, OpenCL,
OpenACC, OpenMP 4.0
 Vectorization (SIMD):
SSE/AVX, AltiVec
2 nodes Cray XK7
AMD Opteron
Interlagos (16 cores)
SSE/AVX
Мультиархитектура современных ВС
19
 Разработка эффективных параллельных программ
для мультиархитектурных ВС требует владения стеком технологий
 Internode communications:
MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays
 Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads
 GPU: NVIDA CUDA, OpenCL,
OpenACC, OpenMP 4.0
 Vectorization (SIMD):
SSE/AVX, AltiVec
2 nodes Cray XK7
AMD Opteron
Interlagos (16 cores)
SSE/AVXOpenMP, Intel TBB,
Cilk, POSIX Threads
Мультиархитектура современных ВС
20
 Разработка эффективных параллельных программ
для мультиархитектурных ВС требует владения стеком технологий
 Internode communications:
MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays
 Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads
 GPU: NVIDA CUDA, OpenCL,
OpenACC, OpenMP 4.0
 Vectorization (SIMD):
SSE/AVX, AltiVec
2 nodes Cray XK7
AMD Opteron
Interlagos (16 cores)
SSE/AVXOpenMP, Intel TBB,
Cilk, POSIX Threads
NVIDIA CUDA,
OpenCL, OpenACC
Мультиархитектура современных ВС
21
 Разработка эффективных параллельных программ
для мультиархитектурных ВС требует владения стеком технологий
 Internode communications:
MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays
 Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads
 GPU: NVIDA CUDA, OpenCL,
OpenACC, OpenMP 4.0
 Vectorization (SIMD):
SSE/AVX, AltiVec
2 nodes Cray XK7
AMD Opteron
Interlagos (16 cores)
SSE/AVXOpenMP, Intel TBB,
Cilk, POSIX Threads
NVIDIA CUDA,
OpenCL, OpenACC
MPI, Cray Chapel, Shmem,
Coarray Fortran, Unified Parallel C
Многопроцессорные ВС с общей памятью (SMP, NUMA)
 Плюсы
 Привычная модель программирования (потоки, процессы)
 Высокая скорость обмена данными между потоками/процессами
 Минусы
 Синхронизация при доступе к общим данным (критические секции)
 Когерентность кэшей, ложное разделение данных
 Относительно низкая масштабируемость
(как правило, 4 – 16 процессоров на узле)
 Трудоемкая организация эффективного использование памяти в NUMA-системах
5 октября 2015 г. 22
Многопроцессорные ВС с распределенной памятью
 Плюсы
 Высокая масштабируемость (сотни, тысячи и миллионы процессорных ядер)
 Меньше проблем с синхронизацией (у каждого узла/сервера своя память)
 Декомпозиция на крупные подзадачи
 Минусы
 Необходимость использования передачи сообщений (message passing)
 Высокие временные задержки и низкая пропускная способность
(все взаимодействия по сети – Gigabit Ethernet, Infiniband)
 Неоднородность, отказы узлов
5 октября 2015 г. 23
Теоретические основы
параллельных вычислений
5 октября 2015 г. 24
Параллельные вычисления (Parallel Computing)
 Разработка параллельного алгоритма
 Поиск параллелизма в известном последовательном алгоритме,
его модификация или создание нового алгоритма
 Декомпозиция задачи на подзадачи, которые могут выполняться параллельно
 Анализ зависимостей между подзадачами
 Параллельная версия самого эффективного последовательного алгоритма решения
задачи необязательно будет самой эффективной параллельной реализацией
5 октября 2015 г. 25
Параллельные вычисления (Parallel Computing)
 Реализация параллельного алгоритма в виде параллельной программы
 Распределение подзадач между процессорами (task mapping, load balancing)
 Организация взаимодействия подзадач (message passing, shared data structures)
 Учет архитектуры целевой вычислительной системы
 Запуск, измерение и анализ показателей эффективности параллельной
программы
 Оптимизация программы
5 октября 2015 г. 26
Показатели эффективности параллельных алгоритмов
5 октября 2015 г. 27
 Коэффициент ускорения (Speedup)
 Коэффициент эффективности (Efficiency)
 Коэффициент накладных расходов
 Показатель равномерности загруженности параллельных ветвей
(процессов, потоков)
Коэффициент ускорения (Speedup)
5 октября 2015 г. 28
 Введем обозначения:
 𝑻(𝒏) – время выполнения последовательной программы (sequential program)
 𝑻 𝒑(𝒏) – время выполнения параллельной программы (parallel program)
на p процессорах
 Коэффициент Sp(n) ускорения параллельной программ (Speedup):
𝑺 𝒑 𝒏 =
𝑻(𝒏)
𝑻 𝒑(𝒏)
 Коэффициент ускорения 𝑆 𝑝 𝑛 показывает во сколько раз параллельная программа
выполняется на p процессорах быстрее последовательной программы при обработке
одних и тех же входных данных размера n
 Как правило
𝑆 𝑝 𝑛 ≤ 𝑝
Коэффициент ускорения (Speedup)
5 октября 2015 г. 29
 Введем обозначения:
 𝑻(𝒏) – время выполнения последовательной программы (sequential program)
 𝑻 𝒑(𝒏) – время выполнения параллельной программы (parallel program)
на p процессорах
 Коэффициент Sp(n) ускорения параллельной программ (Speedup):
𝑺 𝒑 𝒏 =
𝑻(𝒏)
𝑻 𝒑(𝒏)
 Цель распараллеливания – достичь линейного ускорения на максимально большом
числе процессоров
𝑺 𝒑 𝒏 ≈ 𝒑 или 𝑺 𝒑 𝒏 = 𝛀(𝒑) при 𝒑 → ∞
Коэффициент ускорения (Speedup)
5 октября 2015 г. 30
 Какое время брать за время выполнения последовательной программы?
o Время лучшего известного алгоритма (в смысле вычислительной сложности)?
o Время лучшего теоретически возможного алгоритма?
 Что считать временем выполнения 𝑻 𝒑 𝒏 параллельной программы?
o Среднее время выполнения потоков программы?
o Время выполнения потока, завершившего работу первым?
o Время выполнения потока, завершившего работу последним?
Коэффициент ускорения (Speedup)
5 октября 2015 г. 31
 Какое время брать за время выполнения последовательной программы?
o Время лучшего известного алгоритма или время алгоритма, который
подвергается распараллеливанию
 Что считать временем выполнения 𝑻 𝒑 𝒏 параллельной программы?
o Время выполнения потока, завершившего работу последним
Коэффициент ускорения (Speedup)
5 октября 2015 г. 32
 Коэффициент относительного ускорения (Relative speedup) – отношения времени выполнения
параллельной программы на k процессорах к времени её выполнения на p процессорах (k < p)
𝑺 𝑹𝒆𝒍𝒂𝒕𝒊𝒗𝒆 𝒌, 𝒑, 𝒏 =
𝑻 𝒌(𝒏)
𝑻 𝒑(𝒏)
 Коэффициент эффективности (Efficiency) параллельной программы
𝑬 𝒑 𝒏 =
𝑺 𝒑(𝒏)
𝒑
=
𝑻(𝒏)
𝒑𝑻 𝒑(𝒏)
∈ [𝟎, 𝟏]
 Коэффициент накладных расходов (Overhead)
𝜺 𝒑, 𝒏 =
𝑻 𝑺𝒚𝒏𝒄(𝒑, 𝒏)
𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏)
=
𝑻 𝑻𝒐𝒕𝒂𝒍 𝒑, 𝒏 − 𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏)
𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏)
 𝑻 𝑺𝒚𝒏𝒄(𝒑, 𝒏) – время создания, синхронизации и взаимодействия p потоков
 𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏) – время вычислений в каждом из p потоков
Коэффициент ускорения (Speedup)
5 октября 2015 г. 33
0
5
10
15
20
25
30
35
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
S
p
Linear (ideal)
N = 60 * 2^20
N = 40 * 2^20
N = 20 * 2^20
 Ускорение программы может расти с увеличением размера входных данных
 Время вычислений превосходит накладные расходы на взаимодействия потоков
(управление потоками, синхронизацию, обмен сообщениями, …)
Зависимость коэффициента ускорения S
параллельного алгоритма X от количества p процессоров
Коэффициент ускорения (Speedup)
5 октября 2015 г. 34
0
5
10
15
20
25
30
35
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
S
p
Linear (ideal)
N = 60 * 2^20
N = 40 * 2^20
N = 20 * 2^20
 Ускорение программы может расти с увеличением размера входных данных
 Время вычислений превосходит накладные расходы на взаимодействия потоков
(управление потоками, синхронизацию, обмен сообщениями, …)
Зависимость коэффициента ускорения S
параллельного алгоритма X от количества p процессоров
Линейное ускорение
Sp(n) = 4/5 * p = Ω(p)
Линейное ускорение
Sp(n) = 1/5 * p = Ω(p)
Коэффициент ускорения (Speedup)
5 октября 2015 г. 35
 Параллельная программа (алгоритм) коэффициент ускорения, которой
линейной растет с увеличением p называется линейно масштабируемой
или просто масштабируемой (scalable)
 Масштабируемая параллельная программа допускает эффективную реализацию
на различном числе процессоров
Коэффициент ускорения (Speedup)
5 октября 2015 г. 36
0
5
10
15
20
25
30
35
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
S
p
Speedup
Processors
Linear (ideal)
Зависимость коэффициента ускорения S
параллельных алгоритмов Y и Z от количества p процессоров
Логарифмическое ускорение
Sp(n) = log2p = Ω(logp)
𝑺 𝒑 𝒏 = 𝒑 = Ω( 𝒑)
Суперлинейное ускорение (Superlinear speedup)
5 октября 2015 г. 37
 Параллельная программа может характеризоваться суперлинейным ускорением
(Superlinear speedup) – коэффициент ускорения Sp(n) принимает значение больше p
𝑺 𝒑 𝒏 > 𝒑
 Причина: иерархическая организация памяти:
Cache – RAM – Local disk (HDD/SSD) – Network storage
 Последовательная программ выполняется на одном процессоре
и обрабатывает данные размера n
 Параллельная программа имеет p потоков на p процессорах, каждый поток работает со
своей частью данных, большая часть которых может попасть в кеш-память,
в результате в каждом потоке сокращается время доступа к данным
 Тот же самый эффект можно наблюдать имя два уровня иерархической памяти:
диск – память
Суперлинейное ускорение (Superlinear speedup)
5 октября 2015 г. 38
http://phycomp.technion.ac.il/~pavelba/Comp_Phys/Project/Project.html
Parallel Molecular Dynamic Simulation
MPI, Spatial decomposition; Cluster nodes: 2 x AMD Opteron Dual Core; InfiniBand network
Superlinear speedup
(relative)
𝑺 𝟖 =
𝑻 𝟒
𝑻 𝟖
= 𝟐. 𝟑𝟐
Равномерность распределения вычислений
5 октября 2015 г. 39
 По какому показателю оценивать равномерность времени выполнения
потоков/процессов параллельной программы?
 Известно время выполнения потоков t0, t1, …, tp-1
 Коэффициент V вариации
𝑽 =
𝝈[𝒕 𝒊]
𝝁[𝒕 𝒊]
 Отношение min/max
𝑴 =
𝐦𝐢𝐧{𝒕 𝒊}
𝐦𝐚𝐱{𝒕 𝒊}
 Jain’s fairness index
𝒇 =
σ 𝒊=𝟎
𝒑−𝟏
𝒕 𝒊
𝟐
𝒏 σ𝒊=𝟎
𝒑−𝟏
𝒕 𝒊
𝟐
∈ [𝟎, 𝟏]
“Последовательные” части в программах
5 октября 2015 г. 40
 Инициализация и завершение работы
 Чтение входных данных и запись
 Инициализация данных
 Синхронизация, критические секции
 Пул потоков обрабатывает независимые задания
 Извлечение заданий из очереди
 Обработка результатов
 Запись результатов в общую структуру данных
 Слияние результатов из локальных структур данных
Закон Дж. Амдала (Amdahl’s law)
5 октября 2015 г. 41
 Пусть имеется последовательная программа c временем выполнения T(n)
 Обозначим:
 𝒓 ∈ [𝟎, 𝟏] – часть программы, которая может быть распараллелена (perfectly parallelized)
 𝒔 = 𝟏 − 𝒓 – часть программы, которая не может быть распараллелена (purely sequential)
 Время выполнения параллельной программы на p процессорах
(время каждого потока) складывается из последовательной части s и параллельной r:
𝑻 𝒑 𝒏 = 𝑻 𝒏 𝒔 +
𝑻(𝒏)
𝒑
𝒓
 Вычислим значение коэффициент ускорения (по определению)
𝑺 𝒑 𝒏 =
𝑻(𝒏)
𝑻 𝒑 𝒏
=
𝑻(𝒏)
𝑻 𝒏 𝒔 +
𝑻(𝒏)
𝒑
𝒓
=
𝟏
𝒔 +
𝒓
𝒑
=
𝟏
(𝟏 − 𝒓) +
𝒓
𝒑
 Полученная формула по значениям r и s позволяет оценить максимальное ускорение
s
r
Закон Дж. Амдала (Amdahl’s law)
5 октября 2015 г. 42
 Пусть имеется последовательная программа c временем выполнения T(n)
 Обозначим:
 𝒓 ∈ [𝟎, 𝟏] – часть программы, которая может быть распараллелена (perfectly parallelized)
 𝒔 = 𝟏 − 𝒓 – часть программы, которая не может быть распараллелена (purely sequential)
 Закон Дж. Амдала (Gene Amdahl, 1967) [1]:
Максимальное ускорение Sp программы на p процессорах равняется
𝑺 𝒑 =
𝟏
𝟏 − 𝒓 +
𝒓
𝒑
𝑺∞ = lim
𝑝→∞
𝑆 𝑝 = lim
𝑝→∞
1
1 − 𝑟 +
𝑟
𝑝
=
1
1 − 𝑟
=
𝟏
𝒔
 Amdahl Gene. Validity of the Single Processor Approach to Achieving Large-Scale Computing Capabilities //
AFIPS Conference Proceedings, 1967, pp. 483-485, http://www-inst.eecs.berkeley.edu/~n252/paper/Amdahl.pdf
s
r
Закон Дж. Амдала (Amdahl’s law)
5 октября 2015 г. 43
Зависимость коэффициента Sp ускорения
параллельной программы от количества p процессоров
0
2
4
6
8
10
12
14
16
18
20
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
r = 95%
r = 75%
r = 50%
Имеет ли смысл создавать системы с количеством процессоров > 1024?
Sp
p
Пример
5 октября 2015 г. 44
 Пусть для определенности,
цикл do завершается после k итераций
 Цикл for можно эффективно распараллелить
 𝑇𝑠𝑒𝑞 𝑛 = 𝒏 + 𝑘 + 𝑘𝑛
 𝑇𝑝𝑎𝑟 𝑛 = 𝒏 + 𝑘 + 𝑘𝑛/𝑝
 𝑠 =
𝑛+𝑘
𝑛+𝑘+𝑘𝑛
, 𝑟 =
𝑘𝑛
𝑛+𝑘+𝑘𝑛
// Последовательная часть: инициализация
x = (int *)calloc(n, sizeof(int));
// Распараллеливаемая часть
do {
for (i = 0; i < n; i++) {
x[i] = f(i); // O(1)
}
// Проверка сходимости
done = ... ; // O(1)
} while (!done)
 Тогда доля последовательного кода при 𝑛 → ∞:
lim
𝑛→∞
𝑠 = lim
𝑛→∞
𝑛 + 𝑘
𝑛 + 𝑘 + 𝑘𝑛
=
1
1 + 𝑘
 Ускорение 𝑺∞ = 𝟏/𝒔 = 𝟏 + 𝒌
Пример
5 октября 2015 г. 45
 Пусть для определенности,
цикл do завершается после k итераций
 Цикл for можно эффективно распараллелить
 𝑇𝑠𝑒𝑞 𝑛 = 𝟏 + 𝑘 + 𝑘𝑛
 𝑇𝑝𝑎𝑟 𝑛 = 𝟏 + 𝑘 + 𝑘𝑛/𝑝
 𝑠 =
1+𝑘
1+𝑘+𝑘𝑛
, 𝑟 =
𝑘𝑛
1+𝑘+𝑘𝑛
// Последовательная часть: инициализация
x = (int *)malloc(n * sizeof(int));
// Распараллеливаемая часть
do {
for (i = 0; i < n; i++) {
x[i] = f(i); // O(1)
}
// Проверка сходимости
done = ... ; // O(1)
} while (!done)
Ускорение 𝑺 → 𝒑, при 𝒏 → ∞
Допущения закона Дж. Амдала (Amdahl’s law)
5 октября 2015 г. 46
 Последовательный алгоритм является наиболее оптимальным способом решения задачи
 Возможны ситуации когда параллельная программа (алгоритм) эффективнее решает задачу
(может эффективнее использовать кеш-память, конвейер, SIMD-инструкции, …)
 Время выполнения параллельной программы оценивается через время выполнения
последовательной, однако потоки параллельной программы могут выполнятся
эффективнее
𝑻 𝒑 𝒏 = 𝑻 𝒏 𝒔 +
𝑻(𝒏)
𝒑
𝒓, на практике возможна ситуация
𝑻(𝒏)
𝒑
> 𝑻 𝒑 𝒏
 Ускорение Sp(n) оценивается для фиксированного размера n данных
при любых значениях p
 В реальности при увеличении числа используемых процессоров размер n входных данных
также увеличивают, так как может быть доступно больше памяти
Закон Дж. Амдала (Amdahl’s law)
5 октября 2015 г. 47
 На что потратить ресурсы – на увеличение доли r параллельной части в программе
или увеличение числа процессоров, на которых запускается программа?
0
10
20
30
40
50
60
70
80
90
2 4 8 16 32
r = 30%
r = 60%
r = 90%
p
Зависимость времени Tp(n) выполнения параллельной программы от количества p процессоров
и доли r распараллеленного кода (время в % от времени T1(n))
Tp(n), %
Закон Дж. Амдала (Amdahl’s law)
5 октября 2015 г. 48
 На что потратить ресурсы – на увеличение доли r параллельной части в программе
или увеличение числа процессоров, на которых запускается программа?
0
10
20
30
40
50
60
70
80
90
2 4 8 16 32
r = 30%
r = 60%
r = 90%
p
Зависимость времени Tp(n) выполнения параллельной программы от количества p процессоров
и доли r распараллеленного кода (время в % от времени T1(n))
Tp(n), %
Увеличили число
процессоров с 2-х до 4-х
(программу не меняли)
Время выполнения
сократилось с 85% до 77,5%
Увеличили число
процессоров с 2-х до 4-х
(программу не меняли)
Время выполнения
сократилось с 85% до 77,5%
Закон Дж. Амдала (Amdahl’s law)
5 октября 2015 г. 49
 На что потратить ресурсы – на увеличение доли r параллельной части в программе
или увеличение числа процессоров, на которых запускается программа?
0
10
20
30
40
50
60
70
80
90
2 4 8 16 32
r = 30%
r = 60%
r = 90%
p
Зависимость времени Tp(n) выполнения параллельной программы от количества p процессоров
и доли r распараллеленного кода (время в % от времени T1(n))
Tp(n), %
Увеличим в 2 раза долю
параллельного кода
Время выполнения
сократилось с 85% до 70%
Закон Густафсона-Барсиса
5 октября 2015 г. 50
 Пусть имеется последовательная программа c временем выполнения T(n)
 Обозначим 𝒔 ∈ [𝟎, 𝟏] – часть параллельной программы, которая выполняется последовательно
(purely sequential)
 Закон Густафсона-Барсиса (Gustafson–Barsis' law) [1]:
Масштабируемое ускорение Sp программы на p процессорах равняется
𝑺 𝒑 = 𝒑 − 𝒔(𝒑 − 𝟏)
 Обоснование: пусть a – время последовательной части, b – время параллельной части
𝑻 𝒑 𝒏 = 𝒂 + 𝒃, 𝑻 𝒏 = 𝒂 + 𝒑𝒃
𝒔 = 𝒂/(𝒂 + 𝒃), 𝑺 𝒑 𝒏 = 𝒔 + 𝒑 𝟏 − 𝒔 = 𝒑 − 𝒔(𝒑 − 𝟏)
 Время выполнения последовательной программы выражается через время выполнения
параллельной
 Reevaluating Amdahl's Law, John L. Gustafson, Communications of the ACM 31(5), 1988. pp. 532-533 //
http://www.scl.ameslab.gov/Publications/Gus/AmdahlsLaw/Amdahls.htmlЯ
Принципы разработки
параллельных алгоритмов
5 октября 2015 г. 51
Методология PCAM
5 октября 2015 г. 52
 Методология PCAM описывает общий подход к процессу разработки параллельного
алгоритма для решения заданной задачи
 PCAM = Partitioning, Communication, Agglomeration, Mapping
 Foster I. Designing and Building Parallel Programs: Concepts and Tools for Software
Engineering. Reading, MA: Addison-Wesley, 1995 // http://www.mcs.anl.gov/~itf/dbpp/
Методология PCAM
5 октября 2015 г. 53
 Декомпозиция (Partition) вычислений
и данных на параллельные подзадачи
(архитектура ВС игнорируется)
 Анализ зависимостей и разработка алгоритма
взаимодействия (Communicate) параллельных
подзадач
 Выбор целевой вычислительной системы (класса)
 Масштабирование подзадач (Agglomerate)
с учетом архитектуры выбранной ВС
 Распределение подзадач (Map) между
процессорами (статическое или динамическое)
Декомпозиция на подзадачи
5 октября 2015 г. 54
 Выявление возможностей для параллельного выполнения
 Разбиение задачи на подзадачи минимального размера –
fine-grained decomposition (мелокзернистая декомпозиция)
 Виды декомпозиции
 По данным (Domain decomposition) – распределение данных по подзадачам
 Функциональная декомпозиция (Functional decomposition) –
распределение вычислений по подзадачам
 Необходимо избегать дублирования вычислений и данных
Функциональная декомпозиция
5 октября 2015 г. 55
function fib(int n)
if n < 2 then
return n
x = fork task fib(n - 1)
y = fork task fib(n - 2)
join threadX
join threadY
return x + y
end function
 Параллельное вычисление n-ого члена
последовательности Фибоначчи
 Функциональная декомпозиция:
каждый рекурсивный вызов – это отдельная подзадача
fib(1) fib(0)
fib(2)
fib(3)
fib(1) fib(1) fib(0)
fib(2)
fib(4)
Вычисления дублируются!
Выбор структуры алгоритма
5 октября 2015 г. 56
 Существуют типовые структуры (паттерны) параллельных алгоритмов
 Mattson T., Sanders B., Massingill B. Patterns for Parallel Programming. –
Addison-Wesley, 2004
 Krste Asanovic, Ras Bodik, Bryan Christopher et. al. The Landscape of Parallel Computing
Research: A View from Berkeley //
http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.pdf
 Dwarf Mine // http://view.eecs.berkeley.edu/wiki/Dwarfs
Функциональная декомпозиция
5 октября 2015 г. 57
Параллелизм задач
(Task parallelism)
Линейная декомпозиция
параллельные задачи
Иерархическая декомпозиция
(рекурсивный параллелизм)
“Разделяй и властвуй”
(Divide and Conquer)
Параллелизм задач (Task parallelism)
5 октября 2015 г. 58
 Многовариантный счет, методы Монте-Карло, рендеринг графических сцен
 Большое количество параллельных подзадач, между задачами
нет зависимостей по данным (embarrassingly parallel)
 Молекулярная динамика (система из n взаимодействующих атомов)
 Параллельное вычисление сил, действующих на атом
 Метод «ветвей и границ» (branch and bound)
 Обход и разбиение множества решений в соответствии с правилами
отсева и ветвления
 Динамическое порождение заданий
Рекурсивный параллелизм (разделяй и властвуй)
5 октября 2015 г. 59
 Parallel Merge Sort
 Parallel Quick Sort
Рекурсивный параллелизм (разделяй и властвуй)
5 октября 2015 г. 60
 Степень параллелизма изменяется в ходе выполнения алгоритма
 Операции Split и Merge могут стать узким местом
(выполняются последовательно, см. закон Амдала)
 Задания порождаются динамически (балансировка загрузки потоков)
 Очень большое количество заданий может привести к значительным
накладным расходам
Геометрическая декомпозиция (Domain decomposition)
5 октября 2015 г. 61
 Данные задачи разбиваются на области (желательно равного размера)
 С каждой областью данных ассоциируются алгоритм её обработки
 Вычисления локализованы внутри области?
 Да: независимые подзадачи
 Нет: требуется разделение данных между областями
Геометрическая декомпозиция (Domain decomposition)
5 октября 2015 г. 62
 Декомпозиция структуры данных на области
 Размер подзадач обычно подбирается эмпирически
 Форма области влияет на накладные расходы (отношение объема к площади
поверхности)
 Дублирование соседних точек
 Реализация обмена данными
 Перед операцией обновления
 Параллельно с операцией обновления
Геометрическая декомпозиция (Domain decomposition)
5 октября 2015 г. 63
 Декомпозиция структуры данных на области
 Размер подзадач обычно подбирается эмпирически
 Форма области влияет на накладные расходы (отношение объема к площади
поверхности)
 Дублирование соседних точек
 Реализация обмена данными
 Перед операцией обновления
 Параллельно с операцией обновления
Рекурсивная декомпозиция
5 октября 2015 г. 64
 Алгоритм работает с рекурсивной структурой данных (список, дерево, граф)
 Часто кажется, что единственный способ решения – последовательный обход
структуры
 Однако иногда возможно перестроить алгоритм так, что операции над отдельными
элементами можно выполнять одновременно
 Vivek Sarkar. Parallel Graph Algorithms // http://www.cs.rice.edu/~vs3/comp422/lecture-notes/comp422-lec24-s08-v2.pdf
Конвейерная обработка (Pipeline)
5 октября 2015 г. 65
 Вычисления производятся над набором элементов данных, каждый из которых
проходит несколько стадий обработки – этапы/блоки конвейера
 Регулярный, односторонний, стабильный поток данных
 Подзадачи – применение операции "стадия N" к каждому элементу данных
 Примеры
 Конвейерная обработка команд процессором
 Обработка сигналов, фильтры, графика
Load Image Scale Image Filter Image Save Image
Конвейерная обработка (Pipeline)
5 октября 2015 г. 66
 Параллелизм ограничен числом стадий
 В идеале времена работы каждой стадии должны быть одинаковыми
 Самая медленная стадия становится узким местом
 Комбинирование и декомпозиция стадий
 Распараллеливание медленной стадии
 Времена заполнения и опустошения конвейера
Load Image Scale Image Filter Image Save Image
Координация на основе событий
5 октября 2015 г. 67
 Декомпозиция на слабосвязанные компоненты, взаимодействующие
нерегулярным образом
 Двусторонние потоки данных
 Нерегулярные, непредсказуемые взаимодействия
 Высокий риск возникновения взаимной блокировки
 Примеры
 Моделирование с дискретными событиями
 Координация между заданиями в других шаблонах
 Распределенные системы
Граф взаимодействий подзадач
может быть недетерминированным
Взаимодействия между подзадачами
5 октября 2015 г. 68
 Локальные и глобальные
 Структурированные и неструктурированные
 Статические и динамические
 Синхронные и асинхронные
Взаимодействия между подзадачами
5 октября 2015 г. 69
Локальные взаимодействия
Коллективные (глобальные) операции
Reduction - сборка
Коллективные операции
All-to-all
Heat 2D (serial code)
5 октября 2015 г. 70
[*] Blaise Barney. Introduction to Parallel Computing (LLNL)
 Уравнение теплопроводности описывает изменение
температуры в заданной области с течением времени
 Приближенное решение можно найти методом конечных
разностей
 Область покрывается сеткой
 Производные аппроксимируются конечными разностями
 Известна температура на границе области в начальный
момент времени
Heat 2D (serial code)
5 октября 2015 г. 71
[*] Blaise Barney. Introduction to Parallel Computing (LLNL)
do iy = 2, ny - 1
do ix = 2, nx - 1
u2(ix, iy) = u1(ix, iy) +
cx * (u1(ix + 1, iy) +
u1(ix - 1, iy) – 2.0 * u1(ix, iy)) +
cy * (u1(ix, iy + 1) +
u1(ix, iy - 1) – 2.0 * u1(ix, iy))
end do
end do
 Температура хранится в двумерном массиве – расчетная область
Heat 2D (serial code)
5 октября 2015 г. 72
[*] Blaise Barney. Introduction to Parallel Computing (LLNL)
for t = 1 to nsteps
1. Update time
2. Send neighbors my border
3. Receive from neighbors
4. Update my cells
end for
 Каждый процесс будет обрабатывать свою часть области – 1D domain decomposition
Расчетная область разбита на
вертикальные полосы –
массив распределен
Heat 2D (serial code)
5 октября 2015 г. 73
[*] Blaise Barney. Introduction to Parallel Computing (LLNL)
for t = 1 to nsteps
1. Update time
2. Send neighbors my border
3. Receive from neighbors
4. Update my cells
end for
 Каждый процесс будет обрабатывать свою часть области – 2D domain decomposition
Расчетная область разбита на
прямоугольные области (2D)
Сколько надо выполнить обменов
на каждом шаге?
Литература
5 октября 2015 г. 74
 Эндрюс Г. Основы многопоточного, параллельного и распределенного
программирования. – М.: Вильямс, 2003.
 Foster I. Designing and Building Parallel Programs: Concepts and Tools for Software
Engineering – http://www.mcs.anl.gov/~itf/dbpp/
 Herb Sutter. Welcome to the Jungle – http://herbsutter.com/welcome-to-the-jungle/

Más contenido relacionado

La actualidad más candente

Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Mikhail Kurnosov
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusMikhail Kurnosov
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Mikhail Kurnosov
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Mikhail Kurnosov
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAMikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Mikhail Kurnosov
 
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)Ontico
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системpianist2317
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятьюПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятьюAlexey Paznikov
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSUlarhat
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)Smolensk Computer Science Club
 

La actualidad más candente (20)

Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk Plus
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
 
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
Ликбез по Эльбрусу, Константин Трушкин (МЦСТ)
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Efficiency vvv
Efficiency vvvEfficiency vvv
Efficiency vvv
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и систем
 
Лекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и системЛекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и систем
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятьюПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
Simd
SimdSimd
Simd
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 

Destacado

Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Mikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Mikhail Kurnosov
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 

Destacado (16)

Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 

Similar a Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Parallel programming patterns)

Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Mikhail Kurnosov
 
Виртуалтрединг
ВиртуалтредингВиртуалтрединг
ВиртуалтредингCEE-SEC(R)
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Boris Kizko
 
Технические средства реализации информационных процессов
Технические средства реализации информационных процессовТехнические средства реализации информационных процессов
Технические средства реализации информационных процессовstudent_SSGA
 
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...Ontico
 
Операционные системы
Операционные системыОперационные системы
Операционные системыyaevents
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...
Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...
Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...VThn18
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
Сервисы Azure для научных исследований
Сервисы Azure для научных исследованийСервисы Azure для научных исследований
Сервисы Azure для научных исследованийMicrosoft
 
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...Ontico
 
Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Andrei Nikolaenko
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияAndrew Babiy
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
Белнетэксперт - СХД
Белнетэксперт - СХДБелнетэксперт - СХД
Белнетэксперт - СХДSergey Polazhenko
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахAlex Tutubalin
 
Технико-коммерческое предложение "База знаний"
Технико-коммерческое предложение "База знаний"Технико-коммерческое предложение "База знаний"
Технико-коммерческое предложение "База знаний"RKVector
 

Similar a Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Parallel programming patterns) (20)

Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
 
Виртуалтрединг
ВиртуалтредингВиртуалтрединг
Виртуалтрединг
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Hpc 2.26.03.2013.
Hpc 2.26.03.2013.
 
Технические средства реализации информационных процессов
Технические средства реализации информационных процессовТехнические средства реализации информационных процессов
Технические средства реализации информационных процессов
 
тема 7
тема 7тема 7
тема 7
 
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...
Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...
Лекция 2 Разработка программно-аппаратного обеспечения информационных и автом...
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
Сервисы Azure для научных исследований
Сервисы Azure для научных исследованийСервисы Azure для научных исследований
Сервисы Azure для научных исследований
 
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
Машины баз данных: таксономия, анатомия, эволюция, ареал, воспроизведение / А...
 
Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обучения
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
Data storage systems
Data storage systemsData storage systems
Data storage systems
 
Белнетэксперт - СХД
Белнетэксперт - СХДБелнетэксперт - СХД
Белнетэксперт - СХД
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартах
 
Технико-коммерческое предложение "База знаний"
Технико-коммерческое предложение "База знаний"Технико-коммерческое предложение "База знаний"
Технико-коммерческое предложение "База знаний"
 

Más de Mikhail Kurnosov

Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Mikhail Kurnosov
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Mikhail Kurnosov
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеMikhail Kurnosov
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовMikhail Kurnosov
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Mikhail Kurnosov
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаMikhail Kurnosov
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Mikhail Kurnosov
 
Лекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыЛекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыMikhail Kurnosov
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаMikhail Kurnosov
 

Más de Mikhail Kurnosov (9)

Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графе
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
Лекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыЛекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицы
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поиска
 

Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Parallel programming patterns)

  • 1. Курносов Михаил Георгиевич E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Курс «Высокопроизводительные вычислительные системы» Сибирский государственный университет телекоммуникаций и информатики (Новосибирск) Осенний семестр, 2015 Лекция 5 Основы параллельного программирования (Parallel programming introduction)
  • 2. Параллельные вычисления (Parallel Computing)  Цели использования многопроцессорных вычислительных систем (ВС):  решение задачи за меньшее время на нескольких процессорах  решение задачи с большим объёмом входных данных – использование распределенной памяти нескольких вычислительных узлов  решение задачи с большей вероятностью получения корректного решения (дублирование вычислений – параллельный пересчет) 5 октября 2015 г. 2
  • 4. Вычислительные системы с распределенной памятью 5 октября 2015 г. 4 CPU0 Коммуникационная сеть (Interconnect, Communication network) Cache Разделяемая память (Shared memory) CPU1 Cache CPU2 Cache CPU3 Cache CPU0 Cache Разделяемая память (Shared memory) CPU1 Cache CPU2 Cache CPU3 Cache  Вычислительная система с распределенной памятью (Distributed memory computer system) – совокупность вычислительных узлов, взаимодействие между которыми осуществляется через коммуникационную сеть (InfiniBand, Gigabit Ethernet, Cray Gemeni, Fujitsu Tofu, …)  Каждый узел имеет множество процессоров/ядер, взаимодействующих через разделяемую память (Shared memory)  Процессоры могут быть многоядерными, ядра могут поддерживать одновременную многопоточность (SMT)  http://www.top500.org  http://www.green500.org  http://www.graph500.org  http://top50.supercomputers.ru
  • 5. Вычислительные системы с распределенной памятью 5 октября 2015 г. 5 CPU0 Коммуникационная сеть (Interconnect, Communication network) Cache Разделяемая память (Shared memory) CPU1 Cache CPU2 Cache CPU3 Cache CPU0 Cache Разделяемая память (Shared memory) CPU1 Cache CPU2 Cache CPU3 Cache  Вычислительная система с распределенной памятью (Distributed memory computer system) – совокупность вычислительных узлов, взаимодействие между которыми осуществляется через коммуникационную сеть (InfiniBand, Gigabit Ethernet, Cray Gemeni, Fujitsu Tofu, …)  Каждый узел имеет множество процессоров/ядер, взаимодействующих через разделяемую память (Shared memory)  Процессоры могут быть многоядерными, ядра могут поддерживать одновременную многопоточность (SMT)  http://www.top500.org  http://www.green500.org  http://www.graph500.org  http://top50.supercomputers.ru ILP ILP ILP ILP ILP ILP ILP ILP TLP/PLP (Message Passing) TLP/PLP TLP/PLP
  • 6. Вычислительные кластеры (Computer cluster)  Вычислительные кластеры строятся на базе свободно доступных компонентов  Вычислительные узлы: 2/4-процессорные узлы, 1 – 8 GiB оперативной памяти на ядро (поток)  Коммуникационная сеть (сервисная и для обмена сообщениями)  Подсистема хранения данных (дисковый массивы, параллельные и сетевые файловые системы)  Система бесперебойного электропитания  Система охлаждения  Программное обеспечение: GNU/Linux (NFS, NIS, DNS, …), MPI (MPICH2, Open MPI), TORQUE/SLURM 5 октября 2015 г. 6 Сеть InfiniBand (вычислительная сеть) Общая память Ядро Процессор Ядро Ядро Процессор Ядро Общая память Ядро Процессор Ядро Ядро Процессор Ядро Общая память Ядро Процессор Ядро Ядро Процессор Ядро Общая память Ядро Процессор Ядро Ядро Процессор Ядро Compute node 1 Compute node 2 Compute node 3 Compute node 4 Общая память Ядро Процессор Ядро Ядро Процессор Ядро Frontend (login node) Сеть Gigabit Ethernet (сервисная сеть: NFS, DNS, DHCP, ssh, …)
  • 7. Гибридные вычислительные узлы 5 октября 2015 г. 7 CPU1 Core1 Core2 Core3 Core4 GPU1 Cores GPU Memory Memory (DDR3) CPU2 Core1 Core2 Core3 Core4 Memory (DDR3) QPI I/O Hub QPI QPI PCI Express GPU2 Cores GPU Memory
  • 8. Коммуникационные сети (Interconnect)  С фиксированной структурой (статической топологией) – графом связей вычислительных узлов  Каждый вычислительный узел имеет сетевой интерфейс (маршрутизатор) с несколькими портами, через который он напрямую соединён с другими узлами  С динамической структурой – на базе коммутаторов  Каждый вычислительный узел имеет сетевой интерфейс с несколькими портами  Порты интерфейсов подключены к коммутаторам, через которые происходит взаимодействие узлов 5 октября 2015 г. 8
  • 9. Сети с фиксированной структурой  Структура сети (топология) – это граф узлы – машины (вычислительные узлы, computer nodes) ребра – линии связи (links)  Показатели эффективности структур: диаметр (максимальное из кратчайших расстояний) средний диаметр сети бисекционная пропускная способность (bisectional bandwidth)  Примеры структур kD-тор (3D, 4D, 5D): Cray Titan (#2) 3D torus, IBM Sequoia 5D torus (#3), Fujitsu 6D torus (#4) Гиперкуб Решетка, кольцо, графы Кауца, циркулянтные структуры, … 5 октября 2015 г. 9 3D-тор
  • 10. Сети с динамической структурой  Вычислительные узлы связаны через активные устройства – сетевые коммутаторы (network switches)  Коммутатор имеет фиксированное число портов (24, 48, 96, 324)  Как объединить в сеть тысячи узлов?  Топология “толстого дерева” (fat tree) Charles E. Leiserson. Fat-trees: universal networks for hardware-efficient supercomputing // IEEE Transactions on Computers, Vol. 34, No. 10, 1985  Сетевые технологии  Gigabit Ethernet  10 Gigabit Ethernet  InfiniBand DDR/QDR/FDR 5 октября 2015 г. 10 Fat tree
  • 11. Показатели эффективности коммуникационных сетей  Пропускная способность (Bandwidth) – бит/сек. (10 – 54 Gbps – Giga bit per second)  Латентность (Latency) – сек. (10 us – 100 ns)  Бисекционная пропускная способность (Bisectional bandwidth) 5 октября 2015 г. 11
  • 12. Классификация архитектур ВС  Классификация Флинна (M. J. Flynn, 1966)  По организации памяти: с общей памятью (SMP/NUMA), с распределенной памятью  По типу поддерживаемых операндов: скалярные и векторные системы  По доступности компонентов, из которых строится система: проприетарные (заказные), на основе общедоступного аппаратного обеспечения (commodity computing, проект Beowulf)  … 5 октября 2015 г. 12 Flynn's taxonomy Single instruction Multiple instruction Single data SISD MISD Multiple data SIMD MIMD
  • 13. Классификация Флинна 5 октября 2015 г. 13  Современные ВС нельзя однозначно классифицировать по Флинну – современные системы мультиархитектурны (SIMD + MIMD)  Процессор – скалярные + векторные инструкции (SIMD)  Вычислительный узел – SMP/NUMA-система на базе многоядерных процессоров (MIMD) + графические процессоры (SIMD)  Совокупность нескольких вычислительных узлов – MIMD
  • 14. Рейтинги мощнейших ВС 1. www.top500.org – решение системы линейных алгебраических уравнений методом LU-факторизации (High-Performance Linpack, FLOPS – Floating-point Operations Per Seconds) 2. www.graph500.org – алгоритмы на графах (построение графа, обход в ширину, TEPS – Traversed Edges Per Second) 3. www.green500.org – главный критерий – энергоэффективност (объем потребляемой эленктроэнергии, kW) 4. http://top50.supercomputers.ru – рейтинг мощнейших вычислительных систем СНГ (тест High-Performance Linpack) 5. Как создать свой тест производительности? 5 октября 2015 г. 14
  • 15. www.top500.org (Июнь 2015) 5 октября 2015 г. 15  Среднее количество вычислительных ядер в системе: 50 464  Среднее количество ядер на сокет (процессор): 10 (4, 6, 8, 10, 12, 14, 16)  Среднее энергопотребление: 866 kW  Коммуникационная сеть: Infiniband (52%), 10G (16%), Custom (14%), Gigabit Ethernet (13%), Cray (3%), …  Процессоры: Intel (~ 86%), IBM Power, AMD Opteron, SPARC64, ShenWei, NEC  Ускорители (~ 17% систем): NVIDIA Kepler (6.6%), Intel Xeon Phi (6.2%), NVIDIA Fermi (3%), ATI Radeon (0.8%), PEZY-SC (0.6%)  Операционная система: GNU/Linux & Unix (~97%), IBM AIX (9 шт.), Cray Microsoft (1 шт.)
  • 16. www.top500.org (Июнь 2015) 5 октября 2015 г. 16  Среднее количество вычислительных ядер в системе: 50 464  Среднее количество ядер на сокет (процессор): 10 (4, 6, 8, 10, 12, 14, 16)  Среднее энергопотребление: 866 kW  Коммуникационная сеть: Infiniband (52%), 10G (16%), Custom (14%), Gigabit Ethernet (13%), Cray (3%), …  Процессоры: Intel (~ 86%), IBM Power, AMD Opteron, SPARC64, ShenWei, NEC  Ускорители (~ 17% систем): NVIDIA Kepler (6.6%), Intel Xeon Phi (6.2%), NVIDIA Fermi (3%), ATI Radeon (0.8%), PEZY-SC (0.6%)  Операционная система: GNU/Linux & Unix (~97%), IBM AIX (9 шт.), Cray Microsoft (1 шт.)  Новосибирская ГЭС – 460 МВт  Новосибирская ТЭЦ-5 – 1200 МВт
  • 17. Мультиархитектура современных ВС 17  Разработка эффективных параллельных программ для мультиархитектурных ВС требует владения стеком технологий  Internode communications: MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays  Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads  GPU: NVIDA CUDA, OpenCL, OpenACC, OpenMP 4.0  Vectorization (SIMD): SSE/AVX, AltiVec 2 nodes Cray XK7 AMD Opteron Interlagos (16 cores)
  • 18. Мультиархитектура современных ВС 18  Разработка эффективных параллельных программ для мультиархитектурных ВС требует владения стеком технологий  Internode communications: MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays  Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads  GPU: NVIDA CUDA, OpenCL, OpenACC, OpenMP 4.0  Vectorization (SIMD): SSE/AVX, AltiVec 2 nodes Cray XK7 AMD Opteron Interlagos (16 cores) SSE/AVX
  • 19. Мультиархитектура современных ВС 19  Разработка эффективных параллельных программ для мультиархитектурных ВС требует владения стеком технологий  Internode communications: MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays  Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads  GPU: NVIDA CUDA, OpenCL, OpenACC, OpenMP 4.0  Vectorization (SIMD): SSE/AVX, AltiVec 2 nodes Cray XK7 AMD Opteron Interlagos (16 cores) SSE/AVXOpenMP, Intel TBB, Cilk, POSIX Threads
  • 20. Мультиархитектура современных ВС 20  Разработка эффективных параллельных программ для мультиархитектурных ВС требует владения стеком технологий  Internode communications: MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays  Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads  GPU: NVIDA CUDA, OpenCL, OpenACC, OpenMP 4.0  Vectorization (SIMD): SSE/AVX, AltiVec 2 nodes Cray XK7 AMD Opteron Interlagos (16 cores) SSE/AVXOpenMP, Intel TBB, Cilk, POSIX Threads NVIDIA CUDA, OpenCL, OpenACC
  • 21. Мультиархитектура современных ВС 21  Разработка эффективных параллельных программ для мультиархитектурных ВС требует владения стеком технологий  Internode communications: MPI, Cray Chapel, IBM X10, Shmem, Unified Parallel C, Coarray Fortran, Global Arrays  Multithreading: OpenMP, Intel TBB/Cilk Plus, C11/C++11 Threads  GPU: NVIDA CUDA, OpenCL, OpenACC, OpenMP 4.0  Vectorization (SIMD): SSE/AVX, AltiVec 2 nodes Cray XK7 AMD Opteron Interlagos (16 cores) SSE/AVXOpenMP, Intel TBB, Cilk, POSIX Threads NVIDIA CUDA, OpenCL, OpenACC MPI, Cray Chapel, Shmem, Coarray Fortran, Unified Parallel C
  • 22. Многопроцессорные ВС с общей памятью (SMP, NUMA)  Плюсы  Привычная модель программирования (потоки, процессы)  Высокая скорость обмена данными между потоками/процессами  Минусы  Синхронизация при доступе к общим данным (критические секции)  Когерентность кэшей, ложное разделение данных  Относительно низкая масштабируемость (как правило, 4 – 16 процессоров на узле)  Трудоемкая организация эффективного использование памяти в NUMA-системах 5 октября 2015 г. 22
  • 23. Многопроцессорные ВС с распределенной памятью  Плюсы  Высокая масштабируемость (сотни, тысячи и миллионы процессорных ядер)  Меньше проблем с синхронизацией (у каждого узла/сервера своя память)  Декомпозиция на крупные подзадачи  Минусы  Необходимость использования передачи сообщений (message passing)  Высокие временные задержки и низкая пропускная способность (все взаимодействия по сети – Gigabit Ethernet, Infiniband)  Неоднородность, отказы узлов 5 октября 2015 г. 23
  • 25. Параллельные вычисления (Parallel Computing)  Разработка параллельного алгоритма  Поиск параллелизма в известном последовательном алгоритме, его модификация или создание нового алгоритма  Декомпозиция задачи на подзадачи, которые могут выполняться параллельно  Анализ зависимостей между подзадачами  Параллельная версия самого эффективного последовательного алгоритма решения задачи необязательно будет самой эффективной параллельной реализацией 5 октября 2015 г. 25
  • 26. Параллельные вычисления (Parallel Computing)  Реализация параллельного алгоритма в виде параллельной программы  Распределение подзадач между процессорами (task mapping, load balancing)  Организация взаимодействия подзадач (message passing, shared data structures)  Учет архитектуры целевой вычислительной системы  Запуск, измерение и анализ показателей эффективности параллельной программы  Оптимизация программы 5 октября 2015 г. 26
  • 27. Показатели эффективности параллельных алгоритмов 5 октября 2015 г. 27  Коэффициент ускорения (Speedup)  Коэффициент эффективности (Efficiency)  Коэффициент накладных расходов  Показатель равномерности загруженности параллельных ветвей (процессов, потоков)
  • 28. Коэффициент ускорения (Speedup) 5 октября 2015 г. 28  Введем обозначения:  𝑻(𝒏) – время выполнения последовательной программы (sequential program)  𝑻 𝒑(𝒏) – время выполнения параллельной программы (parallel program) на p процессорах  Коэффициент Sp(n) ускорения параллельной программ (Speedup): 𝑺 𝒑 𝒏 = 𝑻(𝒏) 𝑻 𝒑(𝒏)  Коэффициент ускорения 𝑆 𝑝 𝑛 показывает во сколько раз параллельная программа выполняется на p процессорах быстрее последовательной программы при обработке одних и тех же входных данных размера n  Как правило 𝑆 𝑝 𝑛 ≤ 𝑝
  • 29. Коэффициент ускорения (Speedup) 5 октября 2015 г. 29  Введем обозначения:  𝑻(𝒏) – время выполнения последовательной программы (sequential program)  𝑻 𝒑(𝒏) – время выполнения параллельной программы (parallel program) на p процессорах  Коэффициент Sp(n) ускорения параллельной программ (Speedup): 𝑺 𝒑 𝒏 = 𝑻(𝒏) 𝑻 𝒑(𝒏)  Цель распараллеливания – достичь линейного ускорения на максимально большом числе процессоров 𝑺 𝒑 𝒏 ≈ 𝒑 или 𝑺 𝒑 𝒏 = 𝛀(𝒑) при 𝒑 → ∞
  • 30. Коэффициент ускорения (Speedup) 5 октября 2015 г. 30  Какое время брать за время выполнения последовательной программы? o Время лучшего известного алгоритма (в смысле вычислительной сложности)? o Время лучшего теоретически возможного алгоритма?  Что считать временем выполнения 𝑻 𝒑 𝒏 параллельной программы? o Среднее время выполнения потоков программы? o Время выполнения потока, завершившего работу первым? o Время выполнения потока, завершившего работу последним?
  • 31. Коэффициент ускорения (Speedup) 5 октября 2015 г. 31  Какое время брать за время выполнения последовательной программы? o Время лучшего известного алгоритма или время алгоритма, который подвергается распараллеливанию  Что считать временем выполнения 𝑻 𝒑 𝒏 параллельной программы? o Время выполнения потока, завершившего работу последним
  • 32. Коэффициент ускорения (Speedup) 5 октября 2015 г. 32  Коэффициент относительного ускорения (Relative speedup) – отношения времени выполнения параллельной программы на k процессорах к времени её выполнения на p процессорах (k < p) 𝑺 𝑹𝒆𝒍𝒂𝒕𝒊𝒗𝒆 𝒌, 𝒑, 𝒏 = 𝑻 𝒌(𝒏) 𝑻 𝒑(𝒏)  Коэффициент эффективности (Efficiency) параллельной программы 𝑬 𝒑 𝒏 = 𝑺 𝒑(𝒏) 𝒑 = 𝑻(𝒏) 𝒑𝑻 𝒑(𝒏) ∈ [𝟎, 𝟏]  Коэффициент накладных расходов (Overhead) 𝜺 𝒑, 𝒏 = 𝑻 𝑺𝒚𝒏𝒄(𝒑, 𝒏) 𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏) = 𝑻 𝑻𝒐𝒕𝒂𝒍 𝒑, 𝒏 − 𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏) 𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏)  𝑻 𝑺𝒚𝒏𝒄(𝒑, 𝒏) – время создания, синхронизации и взаимодействия p потоков  𝑻 𝑪𝒐𝒎𝒑(𝒑, 𝒏) – время вычислений в каждом из p потоков
  • 33. Коэффициент ускорения (Speedup) 5 октября 2015 г. 33 0 5 10 15 20 25 30 35 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 S p Linear (ideal) N = 60 * 2^20 N = 40 * 2^20 N = 20 * 2^20  Ускорение программы может расти с увеличением размера входных данных  Время вычислений превосходит накладные расходы на взаимодействия потоков (управление потоками, синхронизацию, обмен сообщениями, …) Зависимость коэффициента ускорения S параллельного алгоритма X от количества p процессоров
  • 34. Коэффициент ускорения (Speedup) 5 октября 2015 г. 34 0 5 10 15 20 25 30 35 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 S p Linear (ideal) N = 60 * 2^20 N = 40 * 2^20 N = 20 * 2^20  Ускорение программы может расти с увеличением размера входных данных  Время вычислений превосходит накладные расходы на взаимодействия потоков (управление потоками, синхронизацию, обмен сообщениями, …) Зависимость коэффициента ускорения S параллельного алгоритма X от количества p процессоров Линейное ускорение Sp(n) = 4/5 * p = Ω(p) Линейное ускорение Sp(n) = 1/5 * p = Ω(p)
  • 35. Коэффициент ускорения (Speedup) 5 октября 2015 г. 35  Параллельная программа (алгоритм) коэффициент ускорения, которой линейной растет с увеличением p называется линейно масштабируемой или просто масштабируемой (scalable)  Масштабируемая параллельная программа допускает эффективную реализацию на различном числе процессоров
  • 36. Коэффициент ускорения (Speedup) 5 октября 2015 г. 36 0 5 10 15 20 25 30 35 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 S p Speedup Processors Linear (ideal) Зависимость коэффициента ускорения S параллельных алгоритмов Y и Z от количества p процессоров Логарифмическое ускорение Sp(n) = log2p = Ω(logp) 𝑺 𝒑 𝒏 = 𝒑 = Ω( 𝒑)
  • 37. Суперлинейное ускорение (Superlinear speedup) 5 октября 2015 г. 37  Параллельная программа может характеризоваться суперлинейным ускорением (Superlinear speedup) – коэффициент ускорения Sp(n) принимает значение больше p 𝑺 𝒑 𝒏 > 𝒑  Причина: иерархическая организация памяти: Cache – RAM – Local disk (HDD/SSD) – Network storage  Последовательная программ выполняется на одном процессоре и обрабатывает данные размера n  Параллельная программа имеет p потоков на p процессорах, каждый поток работает со своей частью данных, большая часть которых может попасть в кеш-память, в результате в каждом потоке сокращается время доступа к данным  Тот же самый эффект можно наблюдать имя два уровня иерархической памяти: диск – память
  • 38. Суперлинейное ускорение (Superlinear speedup) 5 октября 2015 г. 38 http://phycomp.technion.ac.il/~pavelba/Comp_Phys/Project/Project.html Parallel Molecular Dynamic Simulation MPI, Spatial decomposition; Cluster nodes: 2 x AMD Opteron Dual Core; InfiniBand network Superlinear speedup (relative) 𝑺 𝟖 = 𝑻 𝟒 𝑻 𝟖 = 𝟐. 𝟑𝟐
  • 39. Равномерность распределения вычислений 5 октября 2015 г. 39  По какому показателю оценивать равномерность времени выполнения потоков/процессов параллельной программы?  Известно время выполнения потоков t0, t1, …, tp-1  Коэффициент V вариации 𝑽 = 𝝈[𝒕 𝒊] 𝝁[𝒕 𝒊]  Отношение min/max 𝑴 = 𝐦𝐢𝐧{𝒕 𝒊} 𝐦𝐚𝐱{𝒕 𝒊}  Jain’s fairness index 𝒇 = σ 𝒊=𝟎 𝒑−𝟏 𝒕 𝒊 𝟐 𝒏 σ𝒊=𝟎 𝒑−𝟏 𝒕 𝒊 𝟐 ∈ [𝟎, 𝟏]
  • 40. “Последовательные” части в программах 5 октября 2015 г. 40  Инициализация и завершение работы  Чтение входных данных и запись  Инициализация данных  Синхронизация, критические секции  Пул потоков обрабатывает независимые задания  Извлечение заданий из очереди  Обработка результатов  Запись результатов в общую структуру данных  Слияние результатов из локальных структур данных
  • 41. Закон Дж. Амдала (Amdahl’s law) 5 октября 2015 г. 41  Пусть имеется последовательная программа c временем выполнения T(n)  Обозначим:  𝒓 ∈ [𝟎, 𝟏] – часть программы, которая может быть распараллелена (perfectly parallelized)  𝒔 = 𝟏 − 𝒓 – часть программы, которая не может быть распараллелена (purely sequential)  Время выполнения параллельной программы на p процессорах (время каждого потока) складывается из последовательной части s и параллельной r: 𝑻 𝒑 𝒏 = 𝑻 𝒏 𝒔 + 𝑻(𝒏) 𝒑 𝒓  Вычислим значение коэффициент ускорения (по определению) 𝑺 𝒑 𝒏 = 𝑻(𝒏) 𝑻 𝒑 𝒏 = 𝑻(𝒏) 𝑻 𝒏 𝒔 + 𝑻(𝒏) 𝒑 𝒓 = 𝟏 𝒔 + 𝒓 𝒑 = 𝟏 (𝟏 − 𝒓) + 𝒓 𝒑  Полученная формула по значениям r и s позволяет оценить максимальное ускорение s r
  • 42. Закон Дж. Амдала (Amdahl’s law) 5 октября 2015 г. 42  Пусть имеется последовательная программа c временем выполнения T(n)  Обозначим:  𝒓 ∈ [𝟎, 𝟏] – часть программы, которая может быть распараллелена (perfectly parallelized)  𝒔 = 𝟏 − 𝒓 – часть программы, которая не может быть распараллелена (purely sequential)  Закон Дж. Амдала (Gene Amdahl, 1967) [1]: Максимальное ускорение Sp программы на p процессорах равняется 𝑺 𝒑 = 𝟏 𝟏 − 𝒓 + 𝒓 𝒑 𝑺∞ = lim 𝑝→∞ 𝑆 𝑝 = lim 𝑝→∞ 1 1 − 𝑟 + 𝑟 𝑝 = 1 1 − 𝑟 = 𝟏 𝒔  Amdahl Gene. Validity of the Single Processor Approach to Achieving Large-Scale Computing Capabilities // AFIPS Conference Proceedings, 1967, pp. 483-485, http://www-inst.eecs.berkeley.edu/~n252/paper/Amdahl.pdf s r
  • 43. Закон Дж. Амдала (Amdahl’s law) 5 октября 2015 г. 43 Зависимость коэффициента Sp ускорения параллельной программы от количества p процессоров 0 2 4 6 8 10 12 14 16 18 20 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 r = 95% r = 75% r = 50% Имеет ли смысл создавать системы с количеством процессоров > 1024? Sp p
  • 44. Пример 5 октября 2015 г. 44  Пусть для определенности, цикл do завершается после k итераций  Цикл for можно эффективно распараллелить  𝑇𝑠𝑒𝑞 𝑛 = 𝒏 + 𝑘 + 𝑘𝑛  𝑇𝑝𝑎𝑟 𝑛 = 𝒏 + 𝑘 + 𝑘𝑛/𝑝  𝑠 = 𝑛+𝑘 𝑛+𝑘+𝑘𝑛 , 𝑟 = 𝑘𝑛 𝑛+𝑘+𝑘𝑛 // Последовательная часть: инициализация x = (int *)calloc(n, sizeof(int)); // Распараллеливаемая часть do { for (i = 0; i < n; i++) { x[i] = f(i); // O(1) } // Проверка сходимости done = ... ; // O(1) } while (!done)  Тогда доля последовательного кода при 𝑛 → ∞: lim 𝑛→∞ 𝑠 = lim 𝑛→∞ 𝑛 + 𝑘 𝑛 + 𝑘 + 𝑘𝑛 = 1 1 + 𝑘  Ускорение 𝑺∞ = 𝟏/𝒔 = 𝟏 + 𝒌
  • 45. Пример 5 октября 2015 г. 45  Пусть для определенности, цикл do завершается после k итераций  Цикл for можно эффективно распараллелить  𝑇𝑠𝑒𝑞 𝑛 = 𝟏 + 𝑘 + 𝑘𝑛  𝑇𝑝𝑎𝑟 𝑛 = 𝟏 + 𝑘 + 𝑘𝑛/𝑝  𝑠 = 1+𝑘 1+𝑘+𝑘𝑛 , 𝑟 = 𝑘𝑛 1+𝑘+𝑘𝑛 // Последовательная часть: инициализация x = (int *)malloc(n * sizeof(int)); // Распараллеливаемая часть do { for (i = 0; i < n; i++) { x[i] = f(i); // O(1) } // Проверка сходимости done = ... ; // O(1) } while (!done) Ускорение 𝑺 → 𝒑, при 𝒏 → ∞
  • 46. Допущения закона Дж. Амдала (Amdahl’s law) 5 октября 2015 г. 46  Последовательный алгоритм является наиболее оптимальным способом решения задачи  Возможны ситуации когда параллельная программа (алгоритм) эффективнее решает задачу (может эффективнее использовать кеш-память, конвейер, SIMD-инструкции, …)  Время выполнения параллельной программы оценивается через время выполнения последовательной, однако потоки параллельной программы могут выполнятся эффективнее 𝑻 𝒑 𝒏 = 𝑻 𝒏 𝒔 + 𝑻(𝒏) 𝒑 𝒓, на практике возможна ситуация 𝑻(𝒏) 𝒑 > 𝑻 𝒑 𝒏  Ускорение Sp(n) оценивается для фиксированного размера n данных при любых значениях p  В реальности при увеличении числа используемых процессоров размер n входных данных также увеличивают, так как может быть доступно больше памяти
  • 47. Закон Дж. Амдала (Amdahl’s law) 5 октября 2015 г. 47  На что потратить ресурсы – на увеличение доли r параллельной части в программе или увеличение числа процессоров, на которых запускается программа? 0 10 20 30 40 50 60 70 80 90 2 4 8 16 32 r = 30% r = 60% r = 90% p Зависимость времени Tp(n) выполнения параллельной программы от количества p процессоров и доли r распараллеленного кода (время в % от времени T1(n)) Tp(n), %
  • 48. Закон Дж. Амдала (Amdahl’s law) 5 октября 2015 г. 48  На что потратить ресурсы – на увеличение доли r параллельной части в программе или увеличение числа процессоров, на которых запускается программа? 0 10 20 30 40 50 60 70 80 90 2 4 8 16 32 r = 30% r = 60% r = 90% p Зависимость времени Tp(n) выполнения параллельной программы от количества p процессоров и доли r распараллеленного кода (время в % от времени T1(n)) Tp(n), % Увеличили число процессоров с 2-х до 4-х (программу не меняли) Время выполнения сократилось с 85% до 77,5%
  • 49. Увеличили число процессоров с 2-х до 4-х (программу не меняли) Время выполнения сократилось с 85% до 77,5% Закон Дж. Амдала (Amdahl’s law) 5 октября 2015 г. 49  На что потратить ресурсы – на увеличение доли r параллельной части в программе или увеличение числа процессоров, на которых запускается программа? 0 10 20 30 40 50 60 70 80 90 2 4 8 16 32 r = 30% r = 60% r = 90% p Зависимость времени Tp(n) выполнения параллельной программы от количества p процессоров и доли r распараллеленного кода (время в % от времени T1(n)) Tp(n), % Увеличим в 2 раза долю параллельного кода Время выполнения сократилось с 85% до 70%
  • 50. Закон Густафсона-Барсиса 5 октября 2015 г. 50  Пусть имеется последовательная программа c временем выполнения T(n)  Обозначим 𝒔 ∈ [𝟎, 𝟏] – часть параллельной программы, которая выполняется последовательно (purely sequential)  Закон Густафсона-Барсиса (Gustafson–Barsis' law) [1]: Масштабируемое ускорение Sp программы на p процессорах равняется 𝑺 𝒑 = 𝒑 − 𝒔(𝒑 − 𝟏)  Обоснование: пусть a – время последовательной части, b – время параллельной части 𝑻 𝒑 𝒏 = 𝒂 + 𝒃, 𝑻 𝒏 = 𝒂 + 𝒑𝒃 𝒔 = 𝒂/(𝒂 + 𝒃), 𝑺 𝒑 𝒏 = 𝒔 + 𝒑 𝟏 − 𝒔 = 𝒑 − 𝒔(𝒑 − 𝟏)  Время выполнения последовательной программы выражается через время выполнения параллельной  Reevaluating Amdahl's Law, John L. Gustafson, Communications of the ACM 31(5), 1988. pp. 532-533 // http://www.scl.ameslab.gov/Publications/Gus/AmdahlsLaw/Amdahls.htmlЯ
  • 52. Методология PCAM 5 октября 2015 г. 52  Методология PCAM описывает общий подход к процессу разработки параллельного алгоритма для решения заданной задачи  PCAM = Partitioning, Communication, Agglomeration, Mapping  Foster I. Designing and Building Parallel Programs: Concepts and Tools for Software Engineering. Reading, MA: Addison-Wesley, 1995 // http://www.mcs.anl.gov/~itf/dbpp/
  • 53. Методология PCAM 5 октября 2015 г. 53  Декомпозиция (Partition) вычислений и данных на параллельные подзадачи (архитектура ВС игнорируется)  Анализ зависимостей и разработка алгоритма взаимодействия (Communicate) параллельных подзадач  Выбор целевой вычислительной системы (класса)  Масштабирование подзадач (Agglomerate) с учетом архитектуры выбранной ВС  Распределение подзадач (Map) между процессорами (статическое или динамическое)
  • 54. Декомпозиция на подзадачи 5 октября 2015 г. 54  Выявление возможностей для параллельного выполнения  Разбиение задачи на подзадачи минимального размера – fine-grained decomposition (мелокзернистая декомпозиция)  Виды декомпозиции  По данным (Domain decomposition) – распределение данных по подзадачам  Функциональная декомпозиция (Functional decomposition) – распределение вычислений по подзадачам  Необходимо избегать дублирования вычислений и данных
  • 55. Функциональная декомпозиция 5 октября 2015 г. 55 function fib(int n) if n < 2 then return n x = fork task fib(n - 1) y = fork task fib(n - 2) join threadX join threadY return x + y end function  Параллельное вычисление n-ого члена последовательности Фибоначчи  Функциональная декомпозиция: каждый рекурсивный вызов – это отдельная подзадача fib(1) fib(0) fib(2) fib(3) fib(1) fib(1) fib(0) fib(2) fib(4) Вычисления дублируются!
  • 56. Выбор структуры алгоритма 5 октября 2015 г. 56  Существуют типовые структуры (паттерны) параллельных алгоритмов  Mattson T., Sanders B., Massingill B. Patterns for Parallel Programming. – Addison-Wesley, 2004  Krste Asanovic, Ras Bodik, Bryan Christopher et. al. The Landscape of Parallel Computing Research: A View from Berkeley // http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.pdf  Dwarf Mine // http://view.eecs.berkeley.edu/wiki/Dwarfs
  • 57. Функциональная декомпозиция 5 октября 2015 г. 57 Параллелизм задач (Task parallelism) Линейная декомпозиция параллельные задачи Иерархическая декомпозиция (рекурсивный параллелизм) “Разделяй и властвуй” (Divide and Conquer)
  • 58. Параллелизм задач (Task parallelism) 5 октября 2015 г. 58  Многовариантный счет, методы Монте-Карло, рендеринг графических сцен  Большое количество параллельных подзадач, между задачами нет зависимостей по данным (embarrassingly parallel)  Молекулярная динамика (система из n взаимодействующих атомов)  Параллельное вычисление сил, действующих на атом  Метод «ветвей и границ» (branch and bound)  Обход и разбиение множества решений в соответствии с правилами отсева и ветвления  Динамическое порождение заданий
  • 59. Рекурсивный параллелизм (разделяй и властвуй) 5 октября 2015 г. 59  Parallel Merge Sort  Parallel Quick Sort
  • 60. Рекурсивный параллелизм (разделяй и властвуй) 5 октября 2015 г. 60  Степень параллелизма изменяется в ходе выполнения алгоритма  Операции Split и Merge могут стать узким местом (выполняются последовательно, см. закон Амдала)  Задания порождаются динамически (балансировка загрузки потоков)  Очень большое количество заданий может привести к значительным накладным расходам
  • 61. Геометрическая декомпозиция (Domain decomposition) 5 октября 2015 г. 61  Данные задачи разбиваются на области (желательно равного размера)  С каждой областью данных ассоциируются алгоритм её обработки  Вычисления локализованы внутри области?  Да: независимые подзадачи  Нет: требуется разделение данных между областями
  • 62. Геометрическая декомпозиция (Domain decomposition) 5 октября 2015 г. 62  Декомпозиция структуры данных на области  Размер подзадач обычно подбирается эмпирически  Форма области влияет на накладные расходы (отношение объема к площади поверхности)  Дублирование соседних точек  Реализация обмена данными  Перед операцией обновления  Параллельно с операцией обновления
  • 63. Геометрическая декомпозиция (Domain decomposition) 5 октября 2015 г. 63  Декомпозиция структуры данных на области  Размер подзадач обычно подбирается эмпирически  Форма области влияет на накладные расходы (отношение объема к площади поверхности)  Дублирование соседних точек  Реализация обмена данными  Перед операцией обновления  Параллельно с операцией обновления
  • 64. Рекурсивная декомпозиция 5 октября 2015 г. 64  Алгоритм работает с рекурсивной структурой данных (список, дерево, граф)  Часто кажется, что единственный способ решения – последовательный обход структуры  Однако иногда возможно перестроить алгоритм так, что операции над отдельными элементами можно выполнять одновременно  Vivek Sarkar. Parallel Graph Algorithms // http://www.cs.rice.edu/~vs3/comp422/lecture-notes/comp422-lec24-s08-v2.pdf
  • 65. Конвейерная обработка (Pipeline) 5 октября 2015 г. 65  Вычисления производятся над набором элементов данных, каждый из которых проходит несколько стадий обработки – этапы/блоки конвейера  Регулярный, односторонний, стабильный поток данных  Подзадачи – применение операции "стадия N" к каждому элементу данных  Примеры  Конвейерная обработка команд процессором  Обработка сигналов, фильтры, графика Load Image Scale Image Filter Image Save Image
  • 66. Конвейерная обработка (Pipeline) 5 октября 2015 г. 66  Параллелизм ограничен числом стадий  В идеале времена работы каждой стадии должны быть одинаковыми  Самая медленная стадия становится узким местом  Комбинирование и декомпозиция стадий  Распараллеливание медленной стадии  Времена заполнения и опустошения конвейера Load Image Scale Image Filter Image Save Image
  • 67. Координация на основе событий 5 октября 2015 г. 67  Декомпозиция на слабосвязанные компоненты, взаимодействующие нерегулярным образом  Двусторонние потоки данных  Нерегулярные, непредсказуемые взаимодействия  Высокий риск возникновения взаимной блокировки  Примеры  Моделирование с дискретными событиями  Координация между заданиями в других шаблонах  Распределенные системы Граф взаимодействий подзадач может быть недетерминированным
  • 68. Взаимодействия между подзадачами 5 октября 2015 г. 68  Локальные и глобальные  Структурированные и неструктурированные  Статические и динамические  Синхронные и асинхронные
  • 69. Взаимодействия между подзадачами 5 октября 2015 г. 69 Локальные взаимодействия Коллективные (глобальные) операции Reduction - сборка Коллективные операции All-to-all
  • 70. Heat 2D (serial code) 5 октября 2015 г. 70 [*] Blaise Barney. Introduction to Parallel Computing (LLNL)  Уравнение теплопроводности описывает изменение температуры в заданной области с течением времени  Приближенное решение можно найти методом конечных разностей  Область покрывается сеткой  Производные аппроксимируются конечными разностями  Известна температура на границе области в начальный момент времени
  • 71. Heat 2D (serial code) 5 октября 2015 г. 71 [*] Blaise Barney. Introduction to Parallel Computing (LLNL) do iy = 2, ny - 1 do ix = 2, nx - 1 u2(ix, iy) = u1(ix, iy) + cx * (u1(ix + 1, iy) + u1(ix - 1, iy) – 2.0 * u1(ix, iy)) + cy * (u1(ix, iy + 1) + u1(ix, iy - 1) – 2.0 * u1(ix, iy)) end do end do  Температура хранится в двумерном массиве – расчетная область
  • 72. Heat 2D (serial code) 5 октября 2015 г. 72 [*] Blaise Barney. Introduction to Parallel Computing (LLNL) for t = 1 to nsteps 1. Update time 2. Send neighbors my border 3. Receive from neighbors 4. Update my cells end for  Каждый процесс будет обрабатывать свою часть области – 1D domain decomposition Расчетная область разбита на вертикальные полосы – массив распределен
  • 73. Heat 2D (serial code) 5 октября 2015 г. 73 [*] Blaise Barney. Introduction to Parallel Computing (LLNL) for t = 1 to nsteps 1. Update time 2. Send neighbors my border 3. Receive from neighbors 4. Update my cells end for  Каждый процесс будет обрабатывать свою часть области – 2D domain decomposition Расчетная область разбита на прямоугольные области (2D) Сколько надо выполнить обменов на каждом шаге?
  • 74. Литература 5 октября 2015 г. 74  Эндрюс Г. Основы многопоточного, параллельного и распределенного программирования. – М.: Вильямс, 2003.  Foster I. Designing and Building Parallel Programs: Concepts and Tools for Software Engineering – http://www.mcs.anl.gov/~itf/dbpp/  Herb Sutter. Welcome to the Jungle – http://herbsutter.com/welcome-to-the-jungle/