PDC 2017: различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к навигации Перейти к поиску
Нет описания правки
м OlegSukhoroslov переименовал страницу Параллельные и распределенные вычисления 2017 в PDC 2017
 
(не показано 6 промежуточных версий этого же участника)
Строка 1: Строка 1:
== О курсе ==


Курс читается для студентов 3-го курса [https://cs.hse.ru/ami ПМИ ФКН ВШЭ] специализации [https://www.hse.ru/ba/ami/ds "Распределенные системы"] в 1-2 модулях 2017-2018 учебного года.
'''Лектор:''' [https://www.hse.ru/org/persons/161432784 Сухорослов Олег Викторович]
'''Семинаристы:''' [http://www.hse.ru/staff/aparinov Паринов Андрей Андреевич], [https://www.hse.ru/org/persons/161432784 Сухорослов Олег Викторович], Чичварин Михаил Николаевич
[https://drive.google.com/file/d/0B9tomE-ABmedWXprV3FiS1c5ZHM/view?usp=sharing Актуальная программа курса]
=== Система оценок ===
Итоговая оценка вычисляется на основе средней оценки за домашние задания и оценки за экзамен:
O<sub>итог</sub> = 0.7 * O<sub>д/з</sub> + 0.3 * О<sub>экз</sub>
=== Материалы к занятиям ===
Все материалы размещаются в git-репозитории: https://gitlab.com/pdc-hse/2017
=== Дистанционная поддержка ===
Для ответов на вопросы студентов, обсуждения курса и сдачи домашних заданий используется сервис [https://piazza.com/ Piazza]:
* Страница курса: https://piazza.com/cs_hse/fall2017/pdc
* Для регистрации надо ввести Class Access Code: (будет разослан на почту)
* При регистрации обязательно укажите в Full Name свои имя и фамилию
* После регистрации через систему можно задавать вопросы и обсуждать курс (в том числе анонимно)
* Все объявления по курсу также будут рассылаться через Piazza
* Telegram Group [https://t.me/joinchat/AfPyqA8UomIPG7p4a0Oujg]
== Лекции ==
{| class="wikitable"
|-
! Неделя !! Дата !! Темы !! Материалы
|-
| 1
| 05.09.2017
| Введение в параллельные вычисления. Параллельные вычислительные системы.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/01-parallel-intro.pdf Слайды]
|-
| 2
| 12.09.2017
| Многопоточное программирование.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/02-threads.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/lectures/src/02 Код]
|-
| 3
| 19.09.2017
| Многопоточное программирование (часть 2). Альтернативные модели программирования.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/03-threads.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/lectures/src/03 Код]
|-
| 4
| 26.09.2017
| Теоретические основы параллельных вычислений. Технологии и модели параллельного программирования.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/04-parallel.pdf Слайды]
|-
| 5
| 03.10.2017
| Типовые структуры параллельных алгоритмов. Методология PCAM.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/05-parallel.pdf Слайды]
|-
| 6
| 10.10.2017
| Введение в вычисления на GPU.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/06-gpu.pdf Слайды]
|-
| 7
| 17.10.2017
| Шаблоны вычислений на GPU.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/07-gpu.pdf Слайды]
|-
| 8
| 31.10.2017
| Знакомство с MPI.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/08-mpi.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/lectures/src/08 Код]
|-
| 9
| 07.11.2017
| Знакомство с MPI (часть 2).
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/09-mpi.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/lectures/src/09 Код]
|-
| 10
| 14.11.2017
| Введение в распределенные вычисления.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/10-distributed.pdf Слайды]
|-
| 11
| 21.11.2017
| Введение в распределенные вычисления (часть 2).
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/11-distributed.pdf Слайды]
|-
| 12
| 28.11.2017
| Распределенная обработка больших данных.
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/12-bigdata.pdf Слайды]
|-
| 13
| 05.12.2017
| Распределенная обработка больших данных (часть 2).
| [https://gitlab.com/pdc-hse/2017/raw/master/lectures/13-bigdata.pdf Слайды]
|}
== Семинары ==
{| class="wikitable" style="width: 60%;"
|-
! style="width: 20px;" | Неделя
! Темы
! style="width: 140px;" | Материалы
|-
| 1
| Первые шаги. Использование виртуальной машины. Получение информации о процессоре. Измерение времени выполнения программы. Профилирование программ с помощью perf.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/01.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/01 Код]
|-
| 2
| Компиляция многопоточных программ на C++. Подробности про thread support library. Устранение взаимной блокировки в примере с банком. Отладка многопоточных программ.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/02.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/02 Код]
|-
| 3
| Разбор реализаций потокобезопасных очередей. Параллельный поиск текста в файле. Пул потоков. Атомарные типы. Атомарные инструкции процессора. Низкоуровневые эффекты.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/03.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/03 Код]
|-
| 4
| Знакомство с OpenMP. Синтаксис прагм. Компиляция программ. Директива parallel. Основные функции из omp.h. Опции видимости данных. Настройка числа потоков. Директивы parallel for, critical и atomic. Опции nowait и reduction. Ложное разделение данных (false sharing).
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/04.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/04 Код]
|-
| 5
| Продолжение знакомства с технологией OpenMP. Распределение итераций цикла между потоками. Привязка потоков к ядрам. Рекурсивный параллелизм (OpenMP 3.0 tasks). Новые возможности OpenMP 4.0.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/05.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/05 Код]
|-
| 6
| Знакомство с CUDA C. Разбор ДЗ 1.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/06.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/06 Код]
|-
| 7
| Знакомство с CUDA C (часть 2).
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/07.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/07 Код]
|-
| 8
| Запуск MPI-программ на учебном кластере. Знакомство с Boost.MPI. Задачи на парные взаимодействия. Работа с MPI на локальной машине. Разбор ДЗ 2.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/08.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/08 Код]
|-
| 9
| Коллективные операции в Boost.MPI. Примеры и упражнения. Обработка ошибок MPI.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/09.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/09 Код]
|-
| 10
| Протоколы UDP и TCP. Реализация клиентов и серверов на основе сокетов. Обработка ошибок при взаимодействии по сети.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/10.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/10 Код]
|-
| 11
| Асинхронная обработка запросов. Обнаружение сервера. Реализация схемы "Управляющий-рабочие" на ППО Pyro.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/11.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/11 Код]
|-
| 12
| Знакомство с платформой Apache Hadoop. Реализация MapReduce-программ на Hadoop Streaming. Работа с Hadoop на учебном кластере.
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/12.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/12 Код]
|-
| 13
| Реализация MapReduce-программ на Hadoop Streaming (продолжение).
| [https://gitlab.com/pdc-hse/2017/raw/master/seminars/13.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/13 Код]
|}
== Домашние задания ==
[https://docs.google.com/document/d/1uNsJYgBrhckpvFmoygQtD0oSaUIalWb2EPYEI0JfdNs/edit?usp=sharing Порядок сдачи домашних заданий]
[https://docs.google.com/spreadsheets/d/1YWdgqBGtjDLuarlplThdAY8layAQyFVCSCN-U0riwMo/edit?usp=sharing Оценки]
{| class="wikitable"
|-
! Задание !! Задачи !! Срок сдачи
|-
| 1
| На выбор: [https://everest.distcomp.org/apps/sol/dining-phils Обедающие философы] или [https://everest.distcomp.org/apps/sol/readers-writers Читатели-писатели]
| 4 октября 12:00 MSK
|-
| 2
| [https://everest.distcomp.org/apps/sol/kmeans Метод k-средних]
| 18 октября 23:59 MSK
|-
| 3
| [https://gitlab.com/pdc-hse/2017/raw/master/homework/hw3.pdf Транспонирование и умножение матриц на GPU]
| 8 ноября 23:59 MSK
|-
| 4
| [https://everest.distcomp.org/apps/sol/mpi_life Игра "Жизнь"]
| 26 ноября 23:59 MSK
|-
| 5
| [https://everest.distcomp.org/apps/sol/pdc-dispatcher-workers Диспетчер-рабочие]
| 9 декабря 23:59 MSK
|}
== Everest ==
Для запуска программ на учебном кластере и тестирования решений домашних заданий используются сервисы, размещенные на платформе [https://everest.distcomp.org/ Everest].
Для получения доступа к сервисам надо выполнить следующие действия:
* Зайдите на [https://everest.distcomp.org/ Everest] и зарегистрируйте нового пользователя (ccылка Sign Up в правом верхнем углу)
* Зайдите под своим пользователем
* Вступите в группу ''pdc-hse2017''
** Откройте https://everest.distcomp.org/groups/pdc-hse2017/join
** Введите Access code: (будет разослан на почту)
При работе с Everest рекомендуется использовать свежие версии браузеров Chrome или Firfeox. Обязательно следует включить выполнение JavaScript.
== Рекомендуемая литература и полезные ссылки ==
=== Архитектура компьютера ===
* John L. Hennessy, David A. Patterson. Computer Architecture: A Quantitative Approach. Morgan Kaufmann, 2011 (5th edition).
* Ulrich Drepper. [https://people.freebsd.org/~lstewart/articles/cpumemory.pdf What Every Programmer Should Know About Memory], 2007.
* Igor Ostrovsky. [http://igoro.com/archive/gallery-of-processor-cache-effects/ Gallery of Processor Cache Effects].
=== Многопоточное программирование и concurrency ===
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. Manning, 2012. (Перевод на русский: Энтони Уильямс. Параллельное программирование на C++ в действии: Практика разработки многопоточных программ. ДМК Пресс, 2012.)
* Paul Butcher. Seven Concurrency Models in Seven Weeks: When Threads Unravel. Pragmatic Bookshelf, 2014.
* Maurice Herlihy, Nir Shavit. The Art of Multiprocessor Programming. Morgan Kaufmann, 2012 (Revised Reprint).
=== Параллельные вычисления ===
* Peter Pacheco. An Introduction to Parallel Programming. Morgan Kaufmann, 2011.
* G. Barlas. Multicore and GPU Programming: An Integrated Approach. Morgan Kaufmann, 2014.
* Foster I. Designing and Building Parallel Programs: Concepts and Tools for Software Engineering. Reading, MA: Addison-Wesley, 1995. http://bit.ly/2vfOkO6
* Timothy G. Mattson, Beverly A. Sanders, Berna L. Massingill. Patterns for Parallel Programming. Addison-Wesley Professional, 2004.

Текущая версия от 09:45, 22 сентября 2018