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

Материал из Wiki - Факультет компьютерных наук
Перейти к навигации Перейти к поиску
Нет описания правки
м OlegSukhoroslov переименовал страницу Параллельные и распределенные вычисления 2017 в PDC 2017
 
(не показано 25 промежуточных версий 2 участников)
Строка 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
== Лекции ==
{| 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 Слайды]
|}
== Семинары ==
{| 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 Код]
|}
== Домашние задания ==
[https://docs.google.com/document/d/1uNsJYgBrhckpvFmoygQtD0oSaUIalWb2EPYEI0JfdNs/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
|}
== 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