Бакалавриат
2023/2024![Цель освоения дисциплины](/f/src/global/i/edu/objectives.svg)
![Планируемые результаты обучения](/f/src/global/i/edu/results.svg)
![Содержание учебной дисциплины](/f/src/global/i/edu/sections.svg)
![Элементы контроля](/f/src/global/i/edu/controls.svg)
![Промежуточная аттестация](/f/src/global/i/edu/intermediate_certification.svg)
![Список литературы](/f/src/global/i/edu/library.svg)
Распределенные вычисления
Статус:
Курс обязательный (Программная инженерия)
Направление:
09.03.04. Программная инженерия
Когда читается:
4-й курс, 1, 2 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Преподаватели:
Пеплин Федор Сергеевич
Язык:
русский
Кредиты:
4
Контактные часы:
56
Программа дисциплины
Аннотация
Курс направлен на формирование у студентов навыков создания параллельных программ, а также умения работы с распределенными вычислительными системами.
Первая часть курса посвящена разработке параллельных программ для систем с общей памятью с использованием Pthreads, OpenMP, а также систем с распределенной памятью (MPI) и гетерогенных систем (CUDA).
Во второй части курса студенты знакомятся с основными понятиями распределенных вычислений, системой Hadoop и парадигмой MapReduce.
Цель освоения дисциплины
- Формирование навыков создания паралелльных программ для систем с общей и распределенной памятью с использованием API pthreads, OpenMP, CUDA и MPI
- Получение практических навыков работы с файловой системов HDFS и создания программ в парадигме MapReduce
Планируемые результаты обучения
- Классифицировать параллельные системы по используемой памяти и по количеству потоков инструкций и команд
- Описывать аппаратную архитектуру параллельных систем
- Оценивать производительность параллельных программ (ускорение, эффективность), характеризовать основные закономерности (закон Амдаля, масштабируемость)
- Разрабатывать параллельные программы для систем с общей памятью с использованием pthreads и OpenMP
- Использовать мьютексы и семафоры
- Синхронизировать работу потоков с помощью семафоров и условных переменных
- Выявлять false sharing, определять его влияние на производительность параллельных программ
- Использовать блокировки чтения-записи
- Писать потокобезопасный код
- Использовать средства индивидуальной и коллективной коммуникации в MPI
- Использовать производные типы данных в MPI-программах
- Разрабатывать программы для графических процессоров с использованиеим CUDA
- Использовать общую память и warp shuffle в CUDA-приложениях
- Описывать модель распределенных вычислений
- Называть основные принципы построения логических часов (время Лэмпорта, векторное время)
- Реализовывать алгоритмы взаимного исключения в распределенных системах
- Описывать устройство файловой системы HDFS
- Разрабатывать приложения с использованием парадигмы MapReduce
- Использовать фреймворк Spark
Содержание учебной дисциплины
- Общие сведения о параллельных и распределенных вычислительных системах
- Средства разработки программ для многоядерных систем с общей памятью
- Средства разработки программ для систем с распределенной памятью
- Средства разработки гетерогенных систем
- Теоретические основы распределенных вычислений
- Распределенная обработка больших данных
Элементы контроля
- Численное решение дифференциальных уравнений
- Умножение векторов и матриц
- Прямые и итерационные методы решения СЛАУ
- Итоговый тест
Промежуточная аттестация
- 2023/2024 учебный год 2 модуль0.3 * Итоговый тест + 0.233 * Прямые и итерационные методы решения СЛАУ + 0.233 * Умножение векторов и матриц + 0.234 * Численное решение дифференциальных уравнений
Список литературы
Рекомендуемая основная литература
- Архитектура компьютера, Таненбаум, Э., 2014
- Параллельное программирование на современном C++ : что каждый профессионал должен знать о параллельном программировании, Гримм, Р., 2022
- Параллельное программирование с использованием OpenMP : учеб. пособие для вузов, Левин, М. П., 2012
- Параллельные вычисления на GPU : архитектура и программная модель CUDA: учеб. пособие для вузов, Боресков, А. В., 2012
- Программирование GPU при помощи Python и CUDA : исследуйте высокопроизводительные параллельные вычисления с помощью CUDA, Тоуманен, Б., 2020
- Распределенные вычислительные системы, Лорин, Г., 1984
- Распределенные данные : алгоритмы работы современных систем хранения информации, Петров, А., 2022
- Распределенные системы : принципы и парадигмы, 877 с., Таненбаум, Э., Стеен, М., 2003
- Современные языки и технологии параллельного программирования : учебник для вузов, Гергель, В. П., 2012
- Современные языки и технологии параллельного программирования : учебник, Гергель В.П., Садовничий В.А., 2012
- Теория и практика параллельных вычислений : учебное пособие, Гергель, В. П., 2007
- Технологии параллельного программирования MPI и OpenMP : учеб. пособие для вузов, Антонов, А. С., 2012
- Технология CUDA в примерах : введение в программирование графических процессоров, Сандерс, Дж., 2011
Рекомендуемая дополнительная литература
- Операционные системы. Т.2: Распределенные системы, сети, безопасность, Дейтел, Х. М., 2007
- Распределенные алгоритмы : интуитивный подход, Фоккинк, У., 2017