|
|
(не показано 8 промежуточных версии этого же участника) |
Строка 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 Слайды]
| |
− | |}
| |
− |
| |
− | == Семинары ==
| |
− |
| |
− | {| 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 на учебном кластере. Разбор ДЗ 3.
| |
− | | [https://gitlab.com/pdc-hse/2017/raw/master/seminars/12.pdf Слайды] [https://gitlab.com/pdc-hse/2017/tree/master/seminars/src/12 Код]
| |
− | |}
| |
− |
| |
− | == Домашние задания ==
| |
− |
| |
− | [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 Диспетчер-рабочие]
| |
− | | 8 декабря 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.
| |