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

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
м (OlegSukhoroslov переименовал страницу Параллельные и распределенные вычисления 2017 в PDC 2017)
 
(не показано 10 промежуточных версии этого же участника)
Строка 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 Слайды]
 
|}
 
 
== Семинары ==
 
 
{| 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 Код]
 
|}
 
 
== Домашние задания ==
 
 
[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
 
|}
 
 
== 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.
 

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