courses:high_performance_computing:lectures
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
courses:high_performance_computing:lectures [2019/11/09 20:18] – kel | courses:high_performance_computing:lectures [2025/01/13 01:12] (current) – kel | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Программа ====== | ====== Программа ====== | ||
- | ===== 1. Введение ===== | + | ===== 0. Введение ===== |
- Тенденции развития вычислительных систем, | - Тенденции развития вычислительных систем, | ||
- Классификация параллельных систем (SIMD, MISD..., SMP, MPP) | - Классификация параллельных систем (SIMD, MISD..., SMP, MPP) | ||
- | - Современные высокопроизводительные системы: | + | - Расширения процессоров |
- Понятия ускорения, | - Понятия ускорения, | ||
- | - Многопоточность или IPC | ||
- План курса | - План курса | ||
+ | - Старт потока (Java): реализация Runnable vs наследование от Thread | ||
+ | - Напоминание о процессах и потоках: | ||
- | ===== 2. Создание/завершение потоков ===== | + | ===== 1. Многопоточность или IPC ===== |
- | - Механизм запуска потока | + | - Виды IPC |
+ | - Преимущества многопоточности: | ||
+ | * Простота | ||
+ | * Скорость (TLB) | ||
+ | - Преимущества IPC: | ||
+ | * Безопасность | ||
+ | * Надёжность | ||
+ | - Сложности реализации shmem | ||
+ | |||
+ | ===== 2. Завершение потоков ===== | ||
- Корректное завершение потоков: | - Корректное завершение потоков: | ||
* cancellation points | * cancellation points | ||
* interrupted exception | * interrupted exception | ||
* примеры кода в glibc | * примеры кода в glibc | ||
- | - Сравнение различных потоков (POSIX, | + | - Сравнение различных потоков (POSIX, |
+ | - Разница pthread / kthread | ||
- Проброс исключений между потоками | - Проброс исключений между потоками | ||
+ | - Напоминание о user space / kernel space и соответствующей стоимости syscall | ||
===== 3. Примитивы синхронизации ===== | ===== 3. Примитивы синхронизации ===== | ||
Line 30: | Line 42: | ||
* использование wait/notify | * использование wait/notify | ||
* Spurious wakeups | * Spurious wakeups | ||
+ | - Thread Local Storage (TLS) | ||
===== 4. Алгоритмы синхронизации ===== | ===== 4. Алгоритмы синхронизации ===== | ||
Line 42: | Line 55: | ||
* lock-free | * lock-free | ||
* wait-free | * wait-free | ||
- | - SWMR-регистры | ||
- Lock-free snapshot | - Lock-free snapshot | ||
- Wait-free snapshot | - Wait-free snapshot | ||
Line 56: | Line 68: | ||
* Инверсия приоритетов | * Инверсия приоритетов | ||
- | ===== 7. Профилирование многопоточных приложений ===== | + | ===== 7. Модель памяти ===== |
+ | - Пример ошибки в ядре ОС | ||
+ | - Устройство кэшей процессора | ||
+ | - Пример на протоколе MESI | ||
+ | - Барьеры памяти (store/ | ||
+ | - Модели памяти: | ||
+ | - Acquire/ | ||
+ | |||
+ | ===== 8. Профилирование многопоточных приложений ===== | ||
- Средства анализа производительности | - Средства анализа производительности | ||
* Утилита time | * Утилита time | ||
- | * Intel Parallel Studio | + | * Intel VTune |
- | * Valgrind (модули callgrind, cachegrind) | + | * Valgrind (модули callgrind) |
- Пример поиска узких мест | - Пример поиска узких мест | ||
- Профилирование промашек по кэшу и метрика CPI | - Профилирование промашек по кэшу и метрика CPI | ||
- | ===== 8. Java.util.concurrent и Fork-Join Framework | + | ===== 9. Flat-Combining |
- | - Пулы потоков, корректное завершение пула | + | - Схема Flat-Combining |
- | - Контроль задач через Future | + | - Возможные оптимизации за счёт интерференции операций |
- | - CompletionStage | + | - Сравнение производительности с lock-free очередью Michael & Scott |
- | - Потокобезопасные контейнеры | + | |
- | ===== 9. OpenMP и Intel TBB ===== | + | ===== 10. RCU ===== |
- | - Обзор OpenMP: | + | - Суть RCU и синхронизация на эпохах |
- | * параллельные секции | + | - Kernel-space RCU |
- | * области видимости переменных | + | - User-space RCU |
- | * ограничения | + | |
- | - Обзор Intel TBB: | + | |
- | * алгоритмы | + | |
- | * аллокаторы | + | |
- | * деревья задач | + | |
- | * особенности | + | |
- | * flow graphs // | + | |
- | ===== 10. Шаблоны || программирования ===== | + | ===== 11. Транзакционная память ===== |
+ | - Идея transactional memory | ||
+ | * Software transactional memory | ||
+ | * Hardware transactional memory | ||
+ | - Преимущества и круг задач | ||
+ | - Реализация HTM на линейках кэша | ||
+ | - Lock teleportation | ||
+ | |||
+ | ===== 12. Сети Петри ===== | ||
+ | - Суть модели сетей Петри | ||
+ | - Пример с обедающими философами | ||
+ | - Верификация || программ | ||
+ | |||
+ | ===== 13. Консенсус ===== | ||
+ | - Консенсус: | ||
+ | * Консенсусное число RMW-регистров | ||
+ | * Универсальность CAS-операций | ||
+ | |||
+ | ===== 14. Асинхронный ввод/ | ||
+ | - Блокирующий/ | ||
+ | - Синхронный (реактор)/ | ||
+ | - Преимущества асинхронной работы и реализация со стороны операционной системы | ||
+ | - Библиотеки асинхронного ввода/ | ||
+ | |||
+ | ===== 15. Линеаризуемость ===== | ||
+ | - Понятие линеаризуемости | ||
+ | - Lock-free стек Trieber | ||
+ | - Пример на очередях | ||
+ | - Lock-free очередь Michael & Scott | ||
+ | - Точки линеаризации | ||
+ | - Relaxed SkipList | ||
+ | |||
+ | ===== 16. Оптимизации в компиляторах ===== | ||
+ | - Статические оптимизации | ||
+ | - Оптимизации циклов: | ||
+ | * Развёртывание | ||
+ | * Повторение | ||
+ | * Вынесение инварианта | ||
+ | - JIT-оптимизации | ||
+ | * Объединение захвата примитивов | ||
+ | * Оптимистичный захват | ||
+ | * Адаптивные блокировки | ||
+ | * Замена виртуального вызова | ||
+ | |||
+ | ===== 17. Шаблоны || программирования ===== | ||
+ | - Общий взгляд на виды организации вычислений | ||
- Структурные шаблоны: | - Структурные шаблоны: | ||
* Декомпозиция по задачам | * Декомпозиция по задачам | ||
Line 88: | Line 145: | ||
* Recursive Data | * Recursive Data | ||
* Pipeline | * Pipeline | ||
- | - Некоторые программные структуры: | ||
- | * Parallel loops | ||
- | * Boss/Worker | ||
- Разное: | - Разное: | ||
* Double check | * Double check | ||
* Local Serializer | * Local Serializer | ||
- | ===== 11. Кластерные вычисления ===== | + | ===== 18. OpenMP ===== |
+ | - Архитектура работы через директивы препроцессора | ||
+ | - Параллельные секции | ||
+ | - Области видимости переменных | ||
+ | - Ограничения | ||
+ | - Миграция вычислений | ||
+ | |||
+ | ===== 19. Intel TBB ===== | ||
+ | - Алгоритмы | ||
+ | - Аллокаторы | ||
+ | - Деревья задач | ||
+ | - Особенности планирования (work stealing...) | ||
+ | - flow graphs // | ||
+ | |||
+ | ===== 20. Кластерные вычисления | ||
- Виды кластерных систем: | - Виды кластерных систем: | ||
* Балансировки нагрузки | * Балансировки нагрузки | ||
Line 114: | Line 182: | ||
* Intel® Trace Analyzer и Intel® Trace Collector | * Intel® Trace Analyzer и Intel® Trace Collector | ||
- | ===== 12. Консенсус. Сети Петри ===== | + | ===== 21. Сопрограммы / Coroutines |
- | - Консенсус: | + | - Преимущества по отношению к callback-программированию |
- | * Консенсусное | + | - Примеры co_await и сравнение |
- | * Универсальность CAS-операций | + | |
- | - Верификация || программ (сети Петри) | + | - Архитектурная аналогия с асинхронными framework |
- | ===== 13. Оптимизации в компиляторах ===== | + | ===== 22. Акторная модель |
- | - Статические оптимизации | + | - Суть модели: |
- | - Оптимизации циклов: | + | * Передача сообщений |
- | * Развёртывание | + | * Легковесные процессы |
- | * Повторение | + | * BEAM |
- | * Вынесение инварианта | + | - Применение в современных языках: |
- | - JIT-оптимизации | + | * Erlang |
- | * Объединение | + | * Elixir |
- | * Оптимистичный захват | + | |
- | * Адаптивные блокировки | + | |
- | * Замена виртуального вызова | + | |
- | ===== 14. Транзакционная память | + | ===== 23. Java.util.concurrent |
- | - Идея transactional memory | + | - Пулы потоков, корректное завершение пула |
- | * Software transactional memory | + | - Контроль |
- | * Hardware transactional memory | + | - CompletionStage |
- | - Преимущества и круг задач | + | - Потокобезопасные контейнеры |
- | - Реализация HTM на линейках кэша | + | |
- | - Lock teleportation | + | |
- | ===== 15. Асинхронный ввод/ | + | ===== 24. Средства поиска ошибок ===== |
- | - Блокирующий/ | + | |
- | - Синхронный (реактор)/ | + | |
- | - Преимущества асинхронной работы и реализация со стороны операционной системы | + | |
- | - Библиотеки асинхронного ввода/ | + | |
- | + | ||
- | ===== 16. Wait-free MRMW снимок регистров ===== | + | |
- | - Напоминание о MRSW алгоритме | + | |
- | - Переход к //bounded// версии на битовых // | + | |
- | - Расширание до MRMW | + | |
- | + | ||
- | ===== 17. Средства поиска ошибок ===== | + | |
- Google Thread Sanitizer | - Google Thread Sanitizer | ||
- Intel Parallel Studio | - Intel Parallel Studio | ||
- Valgrind (модуль helgrind) | - Valgrind (модуль helgrind) | ||
- Пример использования | - Пример использования | ||
- | + | ||
- | ===== 18. Модель памяти ===== | + | ===== 25. Lock-free изнутри ===== |
- | - Устройство кэшей процессора | + | |
- | - Пример на протоколе MESI | + | |
- | - Барьеры памяти (store/ | + | |
- | - Модели памяти: | + | |
- | - Acquire/ | + | |
- | + | ||
- | ===== 19. Lock-free изнутри ===== | + | |
- Feldman Multi Array | - Feldman Multi Array | ||
- Схемы управления памятью: | - Схемы управления памятью: | ||
Line 170: | Line 215: | ||
* Hazard pointer | * Hazard pointer | ||
- | ===== 20. Линеаризуемость ===== | + | ===== 26. Системы потоковой обработки данных |
- | - Понятие линеаризуемости | + | - Analytics vs Streaming |
- | - Lock-free стек Trieber | + | - Гарантии обработкии данных: |
- | - Пример на очередях | + | * Exactly once |
- | - Lock-free | + | * At least once |
- | - Точки линеаризации | + | * At most once |
- | + | - Windows | |
- | ===== 21. Flat-Combining | + | * Session |
- | - Схема Flat-Combining | + | * Sliding |
- | - Возможные оптимизации за счёт интерференции операций | + | * Tumbling |
- | - Сравнение производительности с lock-free очередью Michael & Scott | + | * Hopping |
- | + | - Linear scalability | |
- | ===== 22. Оптимизации в реализации контейнеров ===== | + | - Fault tolerance |
- | - Relaxed SkipList | + | - Back pressure |
- | + | - Isolation | |
- | ===== 23. Модель акторов ===== | + | - Qutoing |
- | - Суть модели | + | - MillWheel/ |
- | - Применение в современных языках | + | - Yandex Query |
- | - Шаблоны применения | + | |
- | + | ||
- | ===== 24. RCU ===== | + | |
- | - Суть RCU и синхронизация на эпохах | + | |
- | - Kernel-space RCU | + | |
- | - User-space RCU | + | |
courses/high_performance_computing/lectures.1573319911.txt.gz · Last modified: 2019/11/09 20:18 by kel