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

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

Описание

Подробная аннотация лекций курса

Рекомендуемая литература: - Камерон Хьюз, Трейси Хьюз. Параллельное и распределенное программирование с использованием C++. 2004 г. - Richard Gerber, Aart J.C. Bik... The Software Optimization Cookbook. 2005 г. - Brian Goetz, Tim Peierls, Joshua Bloch... Java Concurrency in Practice. 2006 г. - Timothy G. Mattson, Beverly A. Sanders, Berna L. Massingill. Patterns for Parallel Programming. 2004 г.

Видео лекций данного курса можно найти по ссылке.

Также можно смотреть лекции 2014 года.

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

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

Введение
  1. Мотивация к применению параллельных вычислений
  2. Закон Амдала
  3. Обзор технологий || программирования: posix threads, Java threads, boost threads, OpenMP, Intel TBB, Java.util.concurrent
  4. Общий взгляд на высокопроизводительные системы начиная от расширений SSE, через многоядерность к узлам кластеров
Параллелизм
  1. Отличия процессов и потоков
  2. Необходимость синхронизации: гонки данных
  3. Приоритеты потоков
  4. Примитивы синхронизации POSIX: мьютексы, условные переменные
Основы программирования потоков
  1. Boost-потоки
  2. Корректное завершение потоков: cancellation points, InterruptedException
  3. Сравнение синтаксиса: POSIX, Boost, Java
  4. Реализация примитивов синхронизации: алгоритмы Петерсона и Лампорта
Синхронизация
  1. Корректный захват и освобождение примитивов через замки (locks)
  2. Атомики, Read/Write мьютексы: когда нужно использовать, а когда излишне
  3. Ограничения на реализацию потокобезопасных контейнеров
  4. Альтернативный подход: Software transactional memory
Виды синхронизации
  1. Виды мьютексов
  2. CAS-операции: реализация AtomicInteger, futex
  3. Виды алгоритмов реализации потокобезопасных контейнеров
Поиск ошибок и анализ производительности. OpenMP
  1. Средства профилирования и поиска ошибок: valgrind
  2. Сложные ошибки синхронизации: fork в || приложениях, публикация стековых данных, ABA
  3. Стандарт OpenMP
Intel TBB и java.util.concurrent
  1. Обзор Intel TBB: алгоритмы, аллокаторы, деревья задач, планирование
  2. TLS (Thread Local Storage)
  3. Обзор Java.util.concurrent: пулы потоков
Кластеры и стандарт MPI
  1. Виды архитектур: монолитные, клиент-сервер, трёхзвенные
  2. Классификация кластеров
  3. Обзор стандарта MPI: средства запуска приложений, обмена сообщения, редукции по данным
Параллельные реализации алгоритмов
  1. Принципы || программирования в задачах
  2. Сети Петри
  3. Библиотеки || реализаций: Parallel boost graph, parallel STL
  4. Основные ошибки 1 домашнего задания
Оптимизация в компиляторах
  1. Простые оптимизации: подстановка констант, inline, удаление проверок, объединение смежных доступов к памяти, регистровая аллокация
  2. Оптимизации циклов: расщепление, развёртывание, вынос инварианта, размыкание
  3. Многопоточные оптимизации: адаптивные блокировки, исключение блокировок, слияние блокировок
  4. Другие: частотный анализ, анализ внешних эффектов, SSA
Вычисление на GPU
  1. Вычислительные устройства: CPU, MIC, GPU
  2. Стандарты: Brook+, CUDA, OpenCL
  3. Миграция вычислений