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

Санкт-Петербург, весна 2022

Описание

Курс рассматривает принципы и возможности многопоточного программирования в теории и на практике:

  • многопоточное рограммирование (принципы, ошибки, технологии)
  • элементы теории || программирования (алгоритмы)
  • иные методы повышения производительности систем

Полная программа курса

Из полной программы выбираются избранные темы в зависимости от скорости освоения материала

Преподаватели

Список лекций

Введение. Многопоточность или IPC
  • Примеры вычислительно ёмких задач из разных областей науки
  • Процессы и потоки
  • Деревья процессов
  • План курса
  • Многопоточность или IPC
Создание/завершение потоков
  • Ожидание через join
  • POSIX:
    • Прерывание через pthread_cancel
    • Cancellation points
    • Защита от прерывания
  • Java:
    • InterruptedException
    • Обход отсутствия запрета на прерывание
Примитивы синхронизации
  • Обоснование необходимости

  • Kernel / user space

  • Связь ресурса и примитива синхронизации

  • Виды mutex:

    • mutex (рекурсивные / не рекурсивные)

    • read / write mutex

Примитивы синхронизации - 2 (spin, conditional). Обработка сигналов
  • CAS-операции
  • Spin lock
  • AtomicInteger
  • Condition variables
  • Обработка сигналов
Ошибки || программирования
  • Взаимная блокировка (Deadlock)
    • Перекрёстный Deadlock
    • Deadlock на нерекурсивном примитиве
    • Deadlock при fork многопоточных приложениях
  • Инверсия приоритетов
Алгоритмы синхронизации
  • Грубая
  • Тонкая
  • Оптимистичная
  • Ленивая
  • Неблокирующая
Атомарные снимки регистров
  • Классификация алгоритмов:
    • lock-free
    • wait-free
  • Lock-free snapshot
  • Wait-free snapshot
Модель памяти: поиск ошибки, базовая модель процессора
  • gdb
  • strace
  • VFS
  • Модель процессора
  • Устройство процессора и MESI
Модель памяти: барьеры памяти, модели памяти
  • Барьеры памяти (store/load)
  • Acquire/release семантика
  • Модели памяти: Sequential consistency...
  • volatile для Java
Профилирование
  • Средства анализа производительности:
    • Утилита time
    • Valgrind (модуль callgrind)
    • Intel OneAPI
  • Поиск узких мест по утилизации процессора
  • Анализ ожиданий и блокировок
  • Профилирование промашек по кэшу
Проблема ABA. TLS. Линеаризуемость
  • Проблема ABA
  • TLS и его применение
  • Понятие линеаризуемости
  • Lock-free стек Trieber
Асинхронный ввод/вывод. Coroutines
  • Блокирующий/неблокирующий
  • Синхронный (реактор)/асинхронный (проактор)
  • Преимущества асинхронной работы и реализация со стороны операционной системы
  • Преимущества по отношению к callback-программированию
  • Примеры co_await и сравнение с синхронным кодом
Шаблоны || программирования
  • Структурные шаблоны:
    • Декомпозиция по задачам
    • Геометрическая декомпозиция
    • Recursive Data
    • Pipeline
  • Некоторые программные структуры:

    • Parallel loops

    • Boss/Worker

  • Принцип работы OpenMP

  • Принцип работы Intel TBB

    • Единый планировщик
    • pipline
    • flow graph
Транзакционная память
  • Идея transactional memory:
    • Software transactional memory
    • Hardware transactional memory
  • Преимущества и круг задач
  • Способ реализации HTM на линейках кэша
  • Техника Lock teleportation для тонкой синхронизации
  • Текущее состояние реализации HTM