Курс «Паралельне програмування із використанням С++», осінь 2019

Даний курс розроблено для магістерської програми «Науки про дані». В рамках курсу слухачі зможуть познайомитися та опанувати найбільш сучасні підходи до розробки максимально продуктивних програм мовою програмування С++. Для цього вивчатимуться, окрім засобів С++, подробиці ієрархічної організації комп’ютерних систем, різноманітні аспекти роботи операційних систем (потоки, процеси, віртуальна пам’ять), управління компілятором та лінкером, програмування мультипроцесорів та створення паралельних (конкурентних) програм.

Курс розрахований на тих, хто вже володіє базовими знаннями мови C++ та хоче поглибити свої знання у розробці високопродуктивних програм.

Навчання передбачається у змішаній формі лекційних та практичних занять з елементами контролю знань шляхом оцінювання домашніх завдань.

Загальна тривалість курсу – 24 заняття.

Кількість ECTS – 6 кредитів.

Детальна структура курсу

Теоретичні теми

  1. Абстракції комп’ютерної системи: центральний процесор; ієрархія пам’яті: RAM, Storage, інше; сопроцесори; засоби вводу-виводу. Характерні латентності різних операцій, роль буферизації та кешування. Ідея ISA та мікроархітектури. Розвиток ідей комп’ютерної техніки по спіралі.
  2. Представлення елементарних даних в пам’яті: цілі числа та числа із рухомою комою, текстові стрічки: кодові сторінки, Unicode, UTF-8/16/32, UCS. Відповідні типи даних С++ та інших мов програмування. Особливості роботи із числами з рухомою комою.
  3. Абстракції операційної системи: процеси та потоки; віртуальна пам’ять. Завантаження програм, динамічні бібліотеки. Зворотна сумісність. Види інтерфейсів користувача, командний рядок.
  4. Ієрархічна організація комп’ютерних систем. Компіляція та інтерпретація, JIT. Роздільна компіляція, зв’язування. Особливості С/С++, оптимізація та невизначена поведінка. Керування роботою компілятора та лінкера. Динамічні та статичні бібліотеки, раннє та пізнє зв’язування.
  5. Модель машини та модель пам’яті С, адресний простір процесу в сучасних операційних системах. Поняття про ABI, угоди про виклики. Особливості ABI C++. Огляд системи команд (ISA) x86.
  6. Види паралелізму: на рівні бітів, команд, задач. Класифікація Флінна. Оцінка ефекту від застосування паралелізації, закон Амдала та закон Густафсона.
  7. Підсистема пам’яті: принципи та функціонування кешу, віртуальна пам’ять та TLB.
  8. Мультипроцесори: SMP, SMT. Модель PRAM-машини. Когерентність кешів, моделі узгодженості пам’яті. UMA та NUMA-системи.
  9. Програмування мультипроцесорів. Паралельне та конкурентне програмування. Стан гонитви, гонитва даних. Засоби синхронізації. Потокобезпечні та lock-free структури даних. Deadlock i Livelock. Executor-и та пули потоків. Асинхронні засоби, співпрограми, модель N:M.
  10. API C++, Python, Java. Важливі сторонні реалізації: TBB, Folly, Boost, Qt.
  11. Створення паралельних програм. Методологія PCAM. Засоби перевірки: valgrind, concurrency visualizer, Intel parallel studio, clang sanitizers.

Практичні теми

  1. Робота із компілятором із командного рядка. Використання систем автоматичної побудови програм.
  2. Низькорівневе маніпулювання пам’яттю.
  3. Сучасне С++: шаблони, STL, лямбда-функції та інші елементи функціонального програмування. Узагальнене програмування.
  4. Написання найпростіших паралельних програм для SMT-систем. Заміри продуктивності.
  5. Реалізація конвеєрної обробки та Map-Reduce.
  6. Побудова потокобезпечних структур даних. Максимізація паралельності.
  7. Побудова розподілених систем із використанням MPI, Boost::MPI, Boost::asio.

Вимоги до попередніх знань учасників курсу

Знання синтаксису С++. Знання об’єктно-орієнтованого програмування.

Дати проведення курсу

Навчання проводяться щодватижні за наступним розкладом:

  • Четвер, 18:30 – 20:30
  • Субота, 13:30 – 17:30

Навчання на курсі розпочинається 26 вересня 2019. Заняття будуть проводитися в Українському Католицькому Університеті за адресою вул. Козельницька, 2а.

Зарахування на курс

Зарахування на курс відбувається на конкурсній основі. Апліканти заповнюють реєстраційну форму: https://forms.gle/PKcX8U2yAY5Bvejd7

При відборі учасників береться до уваги персональна мотивація та попередній досвід в програмуванні. Кінцевий термін прийому заявок на курс — 25 вересня (включно). Оголошення результатів відбору — 26 вересня.

Увага! Організатори залишають за собою право закрити реєстрацію на курс раніше в разі наявності достатньої кількості заявок для заповнення вакантних місць в класі. У разі необхідності організатори також можуть попросити провести онлайн співбесіду з кандидатами на участь задля уточнення питань реєстраційної форми, а також перевірки рівня необхідних знань.

Вартість навчання

Загальна вартість курсу «Паралельне програмування із використанням С++» становить 10 000 грн. Оплата виконується двома частинами:

  • до 30 вересня — 6 000 грн;
  • до 1 листопада — 4 000 грн.

Реквізити для оплати учасникам будуть надані через електронну пошту. В разі не проведення першого траншу оплати, організатори лишають за собою право скасувати реєстрацію учасника та звільнити місце для іншого кандидата. В разі виникнення фінансових питань, просимо звертатися якомога швидше (контактна інформація наведена нижче).

Фінансова допомога

За потреби організатори готові надати знижку у вартості курсу. Запити на отримання знижки з обґрунтуванням, чому аплікант її потребує, разом з особистим CV просимо надсилати на електронну адресу [email protected].

Сертифікати

По завершенню курсу учасники в разі отримання позитивної оцінки (виконання мінімум 60% завдань) отримають сертифікат учасника курсу. Сертифікат учасника може бути використаний для зарахування навчальний кредитів за аналогічний курс в університетах в разі наявності такої можливості.

Про викладача

Олег Фаренюк, Український Католицький Університет

Фізик-теоретик. Програмує із 1995 (асемблер х86, Паскаль), на С++ – з 2002. Вже протягом семи років викладає С++, мав досвід викладання Python та С. Проводив тренінги в компаніях EricPole і CyPress. Викладає курси “Принципи організації комп’ютера”, “Архітектура комп’ютерних системи” та “Операційні системи” в УКУ. Веде блог, присвячений космосу, науці, програмуванню взагалі та вбудовуваним системам зокрема: indrekis2.blogspot.com.

Контактна інформація

E-mail: [email protected]
Facebook: www.facebook.com/ucucsds/