Даний курс розроблено для магістерської програми «Науки про дані». В рамках курсу слухачі зможуть познайомитися та опанувати найбільш сучасні підходи до розробки програм на мові програмування С++, різноманітні аспекти роботи операційних систем (потоки, процеси, віртуальна пам’ять), ієрархічну організацію комп’ютерних систем, управління компілятором та лінкером, програмування мультипроцесорів та створення паралельних (конкурентних) програм.
Курс розрахований на тих, хто вже володіє базовими знаннями мови C++ та хоче поглибити свої знання у розробці високопродуктивних програм.
Навчання передбачається у змішаній формі лекційних та практичних занять з елементами контролю знань шляхом оцінювання домашніх завдань.
Загальна тривалість курсу – 24 заняття.
Кількість ECTS – 5 кредитів.
Детальна структура курсу
Теоретичні теми- Абстракції комп’ютерної системи: центральний процесор; ієрархія пам’яті: RAM, Storage, інше; сопроцесори; засоби вводу-виводу. Характерні латентності різних операцій, роль буферизації та кешування. Ідея ISA та мікроархітектури. Розвиток ідей комп’ютерної техніки по спіралі.
- Представлення елементарних даних в пам’яті: цілі числа та числа із рухомою комою, текстові стрічки: кодові сторінки, Unicode, UTF-8/16/32, UCS. Відповідні типи даних С++ та інших мов програмування. Особливості роботи із числами з рухомою комою.
- Абстракції операційної системи: процеси та потоки; віртуальна пам’ять. Завантаження програм, динамічні бібліотеки. Зворотна сумісність. Види інтерфейсів користувача, командний рядок.
- Ієрархічна організація комп’ютерних систем. Компіляція та інтерпретація, JIT. Роздільна компіляція, зв’язування. Особливості С/С++, оптимізація та невизначена поведінка. Керування роботою компілятора та лінкера. Динамічні та статичні бібліотеки, раннє та пізнє зв’язування.
- Модель машини та модель пам’яті С, адресний простір процесу в сучасних операційних системах. Поняття про ABI, угоди про виклики. Особливості ABI C++. Огляд системи команд (ISA) x86.
- Види паралелізму: на рівні бітів, команд, задач. Класифікація Флінна. Оцінка ефекту від застосування паралелізації, закон Амдала та закон Густафсона.
- Підсистема пам’яті: принципи та функціонування кешу, віртуальна пам’ять та TLB.
- Мультипроцесори: SMP, SMT. Модель PRAM-машини. Когерентність кешів, моделі узгодженості пам’яті. UMA та NUMA-системи.
- Програмування мультипроцесорів. Паралельне та конкурентне програмування. Стан гонитви, гонитва даних. Засоби синхронізації. Потокобезпечні та lock-free структури даних. Deadlock i Livelock. Executor-и та пули потоків. Асинхронні засоби, співпрограми, модель N:M.
- API C++, Python, Java. Важливі сторонні реалізації: TBB, Folly, Boost, Qt.
- Створення паралельних програм. Методологія PCAM. Засоби перевірки: valgrind, concurrency visualizer, Intel parallel studio, clang sanitizers.
- Робота із компілятором із командного рядка. Використання систем автоматичної побудови програм.
- Низькорівневе маніпулювання пам’яттю.
- Сучасне С++: шаблони, STL, лямбда-функції та інші елементи функціонального програмування. Узагальнене програмування.
- Написання найпростіших паралельних програм для SMT-систем. Заміри продуктивності.
- Реалізація конвеєрної обробки та Map-Reduce.
- Побудова потокобезпечних структур даних. Максимізація паралельності.
- Побудова розподілених систем із використанням MPI, Boost::MPI, Boost::asio.
Вимоги до попередніх знань учасників курсу
Знання синтаксису С++. Знання об’єктно-орієнтованого програмування.Дати проведення курсу
Навчання проводяться щочетверга о 18:30 та щосуботи о 16:00. Навчання на курсі розпочинається 27 вересня 2018. Заняття будуть проводитися в Українському Католицькому Університеті за адресою вул. Козельницька, 2а.Зарахування на курс
Зарахування на курс відбувається на конкурсній основі. Апліканти заповнюють реєстраційну форму: goo.gl/forms/70PhxmjTi401tBzC3 При відборі учасників береться до уваги персональна мотивація та попередній досвід в програмуванні. Кінцевий термін прийому заявок на курс — 23 вересня (включно). Оголошення результатів відбору — 24 вересня. Увага! Організатори залишають за собою право закрити реєстрацію на курс раніше в разі наявності достатньої кількості заявок для заповнення вакантних місць в класі. У разі необхідності організатори також можуть попросити провести онлайн співбесіду з кандидатами на участь задля уточнення питань реєстраційної форми, а також перевірки рівня необхідних знань.Вартість навчання
Загальна вартість курсу «Паралельне програмування із використанням С++» становить 10 000 грн. Оплата виконується двома частинами:- до 26 вересня — 6 000 грн;
- до 1 листопада — 4 000 грн.