ТПМС — различия между версиями

Материал из Public ATP Wiki
Перейти к: навигация, поиск
(Создание страницы «ТПМС»)
 
(Полностью удалено содержимое страницы)
 
Строка 1: Строка 1:
= Общие сведения =
 
* Семестр: 4 (второй курс)
 
* Форма контроля: дифф. зачет
 
  
'''Материалы прошлых лет'''
 
* [https://gitlab.com/Lipovsky/tpcc-course-2020 Репозиторий 2020 года]
 
* [https://www.youtube.com/playlist?list=PL4_hYwCyhAvalRjpPlvaCYPpPE8TL-fn3 Видео лекций 2020 года]
 
* [https://www.youtube.com/playlist?list=PL4_hYwCyhAvY-mbXKJwKLLdafLrSOIgRN Видео семинаров 2020 года]
 
* [https://www.youtube.com/playlist?list=PL4_hYwCyhAvbW4DHFV3CY5CqupNqPf4jS Видео лекций 2019 года]
 
* [https://www.youtube.com/playlist?list=PL4_hYwCyhAvZgIfxf4nLnjXprGGWBs5VO Видео семинаров 2019 года]
 
 
= Преподаватели =
 
* '''Лектор'''
 
** Липовский Роман
 
 
* '''Семинаристы'''
 
** Александр Гришутин
 
** Дмитрий Инютин
 
** Евгений Госткин
 
** Евгений Шлыков
 
** Камиль Талипов
 
** Мария Феофанова
 
** Никита Михайлов
 
** Роман Санду
 
** Степан Калинин
 
** Вадим Плахтинский
 
** Михаил Анухин
 
 
= Критерии получения оценки =
 
Домашние задания
 
В ходе семестра вам будет предложено X домашних заданий, в каждом задании будет несколько задач.
 
 
'''Стоимости'''
 
 
У каждой задачи будет своя стоимость в баллах.
 
У каждого домашнего задания (и иногда – у отдельных задач) будет дедлайн, после которого стоимость задач снижается.
 
 
'''Лимиты'''
 
 
У каждого домашнего задания будет лимит в баллах. Иногда он будет равен сумме баллов за отдельные задачи, а иногда суммарная стоимость задач будет чуть выше, чтобы можно было добирать баллы после дедлайна.
 
 
'''Дедлайны'''
 
 
Стандартный дедлайн на домашнее задание – 2 недели. После дедлайна в течение недели стоимость задач линейно падает в два раза. После этого стоимость задачи не меняется.
 
Домашние задания будут наслаиваться друг на друга, будьте к этому готовы и планируйте свое время.
 
Не оставляйте решение домашнего задания на последние выходные перед дедлайном!
 
 
'''Защита'''
 
 
Чтобы задача была зачтена, мало написать код и пройти тесты, нужно защитить задачу.
 
Формат защиты остается на усмотрение семинариста, но в самом общем виде процедуру можно описать так: семинарист атакует вас каверзными вопросами на понимание тонкостей задачи и решает, достаточно ли вашего понимания или нет.
 
На защиту тоже устанавливается дедлайн. Сделано это для того, чтобы:
 
* Нагрузка на семинаристов и ассистентов распределялась равномерно в течение семестра
 
* Вы не успевали забывать решения собственных задач
 
 
'''Базовая оценка'''
 
 
В конце семестра баллы за все домашние задания суммируются, после чего результат нормируется в базовую оценку от 0 до 8 баллов.
 
Точные правила округления будут известны во второй половине семестра, но можно сказать сразу, что выбить 8 баллов на этом этапе будет крайне сложно, для этого придется прорешивать почти все домашние задания.
 
 
'''Обязательные задачи'''
 
 
Некоторые домашние работы и отдельные задачи будут обязательными для получения зачета.
 
Дедлайна на защиту для них не будет. Но помните, что если вы решите сдавать их в самом конце семестра, то семинарист может физически не успеть проверить их. В этот момент приоритет будет отдаваться студентам, которые претендуют на более высокие оценки.
 
 
= План курса =
 
Темы лекций и семинаров:
 
# Introduction
 
# Взаимное исключение
 
# Механика потоков
 
# Мелкогранулярные блокировки
 
# Когерентность кэшей
 
# Модели памяти - I
 
# Moдели памяти - II
 
# Futures / Promises
 
# Лок-фри
 
# Планировщик / Work stealing
 
# Coroutines [в С++] - I
 
# Coroutines [в С++] - II
 
# ?
 
# Final
 
 
= Список рекомендуемых материалов =
 
* Intro
 
** [https://deadlockempire.github.io/ Игра-тренировка Deadlock Empire]
 
** [https://github.com/chriskohlhoff/asio/ Asio]
 
** [http://think-async.com/Asio/asio-1.12.2/doc/asio/overview/core/basics.html Basic Asio Anatomy]
 
** [https://www.youtube.com/watch?v=D-lTwGJRx0o Thinking Asynchronously: Designing Applications with Boost.Asio], [http://cpp.mimuw.edu.pl/files/boost_vs_qt/asio/thinking_asynchronously.pdf слайды]
 
** [https://web.archive.org/web/20160714182232/https://www3.nd.edu/~dthain/courses/cse40243/fall2015/intel-intro.html Introduction to X86-64 Assembly for Compiler Writers]
 
** [https://manybutfinite.com/post/journey-to-the-stack/ Journey to the Stack]
 
** [https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64/ Stack frame layout on x86-64]
 
 
* Mutex
 
** [https://eli.thegreenplace.net/2018/basics-of-futexes/ Basics of Futexes]
 
** [https://www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf A fork() in the road]
 
 
* Condvar
 
** [https://preshing.com/20150316/semaphores-are-surprisingly-versatile/ Semaphores are Surprisingly Versatile]
 
** [http://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf Little book of semaphores]
 
 
* Fibers
 
** [https://www.boost.org/doc/libs/1_60_0/libs/coroutine/doc/html/coroutine/intro.html Корутина]
 
** [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4024.pdf Distinguishing coroutines and fibers.]
 
** [https://www.youtube.com/watch?v=Ts-1mWBmTNE Гор Нишанов, C++ Coroutines – a negative overhead abstraction]
 
** [https://github.com/lewissbaker/cppcoro A library of C++ coroutine abstractions for the coroutines TS]
 
** [https://www.youtube.com/watch?v=J31o0ZMQEnI Project Loom with Ron Pressler and Alan Bateman]
 
** [http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html Project Loom: Fibers and Continuations for the Java Virtual Machine]
 
** [https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html ForkJoinPool – планировщик (Java)]
 
** [https://github.com/Kotlin/KEEP/blob/master/proposals/coroutines.md Kotlin Coroutines Proposal]
 
** [https://www.youtube.com/watch?v=_hfBv0a09Jc KotlinConf 2017 - Introduction to Coroutines by Roman Elizarov]
 
** [https://jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/ Генераторы]
 
** [https://journal.stuffwithstuff.com/2013/01/13/iteration-inside-and-out/ Iteration Inside and Out]
 
** [https://twitter.github.io/finagle/guide/Futures.html Concurrent Programming with Futures]
 
** [https://github.com/facebook/folly/blob/master/folly/docs/Futures.md Folly Futures]
 
** [https://lewissbaker.github.io/2017/11/17/understanding-operator-co-await C++ Coroutines: Understanding operator co_await]
 
** [http://think-async.com/Asio/asio-1.12.2/doc/asio/tutorial/tuttimer2.html Using a timer asynchronously.]
 
** [https://blog.acolyer.org/2015/11/23/hashed-and-hierarchical-timing-wheels/ Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility]
 
 
* Futures
 
** [http://think-async.com/Asio/asio-1.16.0/doc/asio/overview/core/strands.html Strands: Use Threads Without Explicit Locking]
 
** [https://monkey.org/~marius/funsrv.pdf Marius Eriksen – Your Server as a Function]
 
** [https://www.youtube.com/watch?v=UL3TtTgt3oU CppCon 2017: Gor Nishanov “Naked coroutines live (with networking)”]
 
** [https://engineering.fb.com/developer-tools/futures-for-c-11-at-facebook/ Futures for C++11 at Facebook]
 
** [http://aturon.github.io/blog/2016/08/11/futures/ Zero-cost futures in Rust]
 
** [http://aturon.github.io/blog/2016/09/07/futures-design/ Designing futures for Rust]
 

Текущая версия на 14:47, 28 июня 2020