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 [2023/06/26 13:07] – odoronin | courses:high_performance_computing:lectures [2026/01/22 00: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 67: | Line 79: | ||
| - Средства анализа производительности | - Средства анализа производительности | ||
| * Утилита time | * Утилита time | ||
| - | * Intel Parallel Studio | + | * Intel VTune |
| - | * Valgrind (модули callgrind, cachegrind) | + | * Valgrind (модули callgrind) |
| - Пример поиска узких мест | - Пример поиска узких мест | ||
| - Профилирование промашек по кэшу и метрика CPI | - Профилирование промашек по кэшу и метрика CPI | ||
| Line 103: | Line 115: | ||
| - Блокирующий/ | - Блокирующий/ | ||
| - Синхронный (реактор)/ | - Синхронный (реактор)/ | ||
| + | - Архитектура framework на примере boost::asio | ||
| + | - Особенности реализации callback | ||
| + | - Причины разницы производительности асинхронного i/o на примере простого сервера в классическом и coroutines-режиме | ||
| - Преимущества асинхронной работы и реализация со стороны операционной системы | - Преимущества асинхронной работы и реализация со стороны операционной системы | ||
| - | - Библиотеки асинхронного ввода/вывода | + | - Мотивация к переходу на coroutines |
| + | - Преимущества по отношению к callback-программированию | ||
| + | - Примеры co_await и сравнение с синхронным кодом | ||
| ===== 15. Линеаризуемость ===== | ===== 15. Линеаризуемость ===== | ||
| Line 112: | Line 129: | ||
| - Lock-free очередь Michael & Scott | - Lock-free очередь Michael & Scott | ||
| - Точки линеаризации | - Точки линеаризации | ||
| + | - Relaxed SkipList | ||
| ===== 16. Оптимизации в компиляторах ===== | ===== 16. Оптимизации в компиляторах ===== | ||
| Line 126: | Line 144: | ||
| ===== 17. Шаблоны || программирования ===== | ===== 17. Шаблоны || программирования ===== | ||
| + | - Общий взгляд на виды организации вычислений | ||
| - Структурные шаблоны: | - Структурные шаблоны: | ||
| * Декомпозиция по задачам | * Декомпозиция по задачам | ||
| Line 131: | Line 150: | ||
| * Recursive Data | * Recursive Data | ||
| * Pipeline | * Pipeline | ||
| - | - Некоторые программные структуры: | ||
| - | * Parallel loops | ||
| - | * Boss/Worker | ||
| - Разное: | - Разное: | ||
| * Double check | * Double check | ||
| Line 147: | Line 163: | ||
| ===== 19. Intel TBB ===== | ===== 19. Intel TBB ===== | ||
| - Алгоритмы | - Алгоритмы | ||
| - | - Аллокаторы | + | - Аллокаторы: |
| + | * scalable | ||
| + | * cache_aligned (false sharing) | ||
| - Деревья задач | - Деревья задач | ||
| - Особенности планирования (work stealing...) | - Особенности планирования (work stealing...) | ||
| Line 172: | Line 190: | ||
| ===== 21. Сопрограммы / Coroutines ===== | ===== 21. Сопрограммы / Coroutines ===== | ||
| - | - Преимущества по отношению к callback-программированию | + | - Архитектурные особенности: |
| - | - Примеры co_await и сравнение с синхронным кодом | + | - stackless |
| + | - stackfull | ||
| + | - fibers | ||
| + | | ||
| + | - Способы | ||
| + | - C++ | ||
| + | - Go | ||
| + | - Kotlin | ||
| + | - ... | ||
| - Проблемы реализации примитивов и TLS | - Проблемы реализации примитивов и TLS | ||
| - Архитектурная аналогия с асинхронными framework | - Архитектурная аналогия с асинхронными framework | ||
| Line 204: | Line 230: | ||
| * Hazard pointer | * Hazard pointer | ||
| - | ===== 26. Оптимизации в реализации контейнеров ===== | + | ===== 26. Системы потоковой обработки данных ===== |
| - | - Relaxed SkipList | + | |
| - | + | ||
| - | ===== 27. Системы потоковой обработки данных ===== | + | |
| - Analytics vs Streaming | - Analytics vs Streaming | ||
| - Гарантии обработкии данных: | - Гарантии обработкии данных: | ||
courses/high_performance_computing/lectures.1687774029.txt.gz · Last modified: 2023/06/26 13:07 by odoronin