|
|
Строка 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]
| |