«Современные технологии параллельного программирования»
Раньше быстродействие компьютеров определялось тактовой частотой. Она повышалась — и программы работали быстрее, не требуя для этого модификации. Но когда дальнейшее увеличение тактовой частоты стало невозможным, вычислительные системы начали расти «вширь», и использование всех их ресурсов потребовало дополнительных знаний и усилий со стороны программистов.
Кроме того, всегда существуют «большие» задачи, которые не по силам одному компьютеру. Такие задачи приходится решать на параллельных вычислительных системах, а написание параллельных программ невозможно без знания основ параллельного программирования.
На этой странице я буду публиковать лекции по параллельному программированию, которые я веду в Московском Физико-Техническом Институте (МФТИ) в рамках курса «Современные технологии параллельного программирования».
Если гиперссылка на названии лекции отсутствует, значит, эта лекция ещё не написана:
Первый семестр
- Введение
- Лекция № 1: Развитие параллельных технологий в персональных компьютерах
- Лекция № 2: Классификация вычислительных систем
- Лекция № 3: Свойства параллельных алгоритмов
- Лекция № 4: Приведение матрицы к треугольному виду
- Лекция № 5: Пирамидальная сортировка
- Лекция № 6: Сортировка слиянием
- Кэш процессора
- Лекция № 7: Кэш процессора
- Лекция № 8: Многоуровневая архитектура кэш-памяти в современных компьютерах
- Лекция № 9: Оптимизация программ с учётом наличия кэш-памяти
- Архитектура многопроцессорных/многоядерных систем
- Лекция № 10: Механизмы синхронизации кэшей в многопроцессорных и многоядерных системах
- Лекция № 11: Реальный и защищённый режимы процессора
- Лекция № 12: Виртуальная память
- Лекция № 13: Процесс и поток. Диспетчер процессов
- Многопоточность с использованием Windows API
- Лекция № 14: Создание процессов и потоков в операционной системе Windows
- Лекция № 15: Функции синхронизации потоков и процессов в операционной системе Windows
- Лекция № 16: Параллельная реализация сортировки слиянием при помощи Windows Threads
- Многопоточность с использованием PThreads
- Лекция № 17: Введение в PThreads
- Лекция № 18: Создание потоков и управление ими
- Лекция № 19: Mutex Variables в PThreads
- Лекция № 20: Объект синхронизации Condition Variable в PThreads
- Лекция № 21: Решение задачи «обедающие философы» при помощи PThreads
Второй семестр
- OpenMP 2.5 (спецификация: http://www.openmp.org/mp-documents/spec25.pdf)
- Лекция № 22: Введение в OpenMP 2.5
- Понятие об OpenMP. «Инкрементальное распараллеливание». Пул потоков. Модель параллельного выполнения fork-join (стр. 9–10, конспект)
- Лекция № 23: Модель памяти OpenMP
- Модель памяти. Управляющие переменные. Локальные и общие данные. Директива flush (стр. 10–13, 24–25, 58–62)
- Лекция № 24: Директива parallel и параллельный доступ к данным
- Директива parallel. Атрибуты доступа к данным default, shared, private, firstprivate, lastprivate, reduction (стр. 18–19, 26–28, 63–65, 70–83)
- Лекция № 25: Директива разделения работы for
- (стр. 32–38, 47)
- Лекция № 26: Директивы разделения работы sections, single, master
- (стр. 32, 39–43, 48–49, 51–52)
- Лекция № 27: Директивы синхронизации critical, barrier, atomic, ordered
- (стр. 52–57)
- Лекция № 28: Примеры реализации алгоритмов с использованием OpenMP
- Метод Гаусса решения СЛАУ, сортировка слиянием (конспект, сортировка на самостоятельное изучение)
- Лекция № 29: Библиотека времени выполнения
- Функции omp_set_num_threads, omp_get_num_threads, omp_get_max_threads, omp_get_thread_num, omp_get_num_procs, omp_set_nested, omp_get_wtime (стр. 89–96, 100, 109–110)
- Лекция № 30: Программа, соответствующая спецификации OpenMP. Частые ошибки в OpenMP-программах
- Вход и выход в/из параллельных секций, одновременное выполнение директив всеми потоками, частые ошибки (стр. 87, конспект)
- Лекция № 22: Введение в OpenMP 2.5
- MPI 1.3 (спецификация: http://www.mpi-forum.org/docs/mpi-1.3/mpi-report-1.3-2008-05-30.pdf)
- Лекция № 31: Вычислительные системы с распределённой памятью
- (конспект)
- Лекция № 32: Введение в MPI 1.3
- Понятие об MPI. «Непрозрачные объекты» MPI (стр. 8–9, 12, конспект)
- Лекция № 33: Семантика обмена сообщениями в MPI
- Контексты (коммуникаторы), теги, порядок сообщений (стр. 19–20, 31–34, 45–46)
- Лекция № 34: Блокирующие операции «точка-точка»
- Понятие о блокирующих и неблокирующих операциях. Функции MPI_Send, MPI_Recv, MPI_Get_count, MPI_Bsend, MPI_Ssend, MPI_Rsend (16–18, 20–23, 27–30)
- Лекция № 35: Неблокирующие операции «точка-точка»
- Понятие о блокирующих и неблокирующих операциях. Функции MPI_Isend, MPI_Ibsend, MPI_Issend, MPI_Irsend, MPI_Irecv (16–17, 37–41)
- Лекция № 36: Ожидание завершения неблокирующих операций
- MPI_Request и его освобождение с помощью MPI_Request_free. Функции MPI_Wait, MPI_Test, MPI_Waitany, MPI_Testany, MPI_Waitall, MPI_Testall (41–50)
- Лекция № 37: Типы данных. Пользовательские типы данных
- Понятие о типах данных MPI. Функции MPI_Type_contiguous, MPI_Type_vector, MPI_Type_struct, MPI_Address, MPI_Type_extent, MPI_Type_commit, MPI_Type_free. Константы MPI_LB, MPI_UB (18, 23–27, 62–66, 69–75)
- Лекция № 38: Групповые операции обмена
- MPI_Barrier, MPI_Bcast, MPI_Gather, MPI_Scatter, MPI_Allgather, MPI_Alltoall (стр. 93–98, 106–107, 111, 113–114)
- Лекция № 39: Операции редукции
- Функции MPI_Reduce и MPI_Reduce_scatter. Операции MPI_MAXLOC и MPI_MINLOC (115–120, 127–128)
- Лекция № 40: Группы процессов. Создание коммуникаторов
- Функции MPI_Group_size, MPI_Group_rank, MPI_Comm_group, MPI_Group_incl, MPI_Group_excl, MPI_Group_free, MPI_Comm_size, MPI_Comm_rank, MPI_Comm_dup, MPI_Comm_create, MPI_Comm_free (стр. 135–150)
- Лекция № 31: Вычислительные системы с распределённой памятью
- CUDA 2.2
- Лекция № 41: Графический конвейер. Архитектура графического процессора NVidia
- Лекция № 42: Введение в технологию CUDA