Паралельне програмування
Parallel Programming
Викладач: к.ф.-м.н. Ющенко Руслан Андрійович
с.н.с. лабораторії паралельних та розподілених обчислень
Інституту кібернетики ім. В. М. Глушкова НАН України
Всього годин – 16
Лекційних – 10
Практичних – 2
Самостійна робота – 4
Програма курсу
За основу спецкурсу взяті матеріали лекцій дисципліни «Паралельні обчислення» факультету інформатики Національного університету «Києво-Могилянська академія» [1]. Метою курсу є ознайомлення студентів з основними поняттями паралельних обчислювальних систем, а також методами паралельного програмування.
Проектування послідовних програм спирається на узагальнену архітектуру фон Неймана. Для паралельних програм не існує єдиної архітектури, більше того, такі архітектури постійно змінюються. Тому проектування та дослідження паралельних програм можна виконувати тільки спираючись на деяку архітектуру паралельного комп’ютера. Можна виділити три основних підходи паралельного програмування, пов’язані з певною архітектурою паралельних комп’ютерів:
1. Синхронізація в системах зі спільною пам’яттю («POSIX Thread» та «OpenMP»).
2. Обмін повідомленнями в системах з розподіленою пам’яттю («MPI»).
3. Асинхронне виконання на прискорювачі («kernel offload» в «CUDA» та «OpenCL»).
На перших двох заняттях спецкурсу розглядаються основні теоретичні передумови паралелізму, моделі паралельних комп’ютерів та методи дослідження ефективності паралельних алгоритмів і програм. З третього по шосте заняття розглядаються інструменти та технології паралельного програмування. Починаючи зі знайомства з проблемою доступу до спільних ресурсів та засобами синхронізації, на заняттях приділено увагу розгляду розповсюдженої технології програмування на паралельних комп’ютерах зі спільною пам’яттю «OpenMP» та технології програмування на великих комп’ютерах кластерної архітектури «MPI».
Джерелом лекційного матеріалу курсу є семінари та доповіді учасників проекту «ParLab» [2], паралельних обчислень в UC Berkeley, курс CS162 «Operating System Programming» [3]; курси NCSA University of Illinois «Multilevel Parallel Programming» [5], «Introduction to OpenMP» [6] та «Introduction to MPI» [7]; та власні конспекти з інших джерел.
Рекомендована література
Більш поглиблені знання можна отримати з наступних джерел
-
Blaise Barney «Introduction to Parallel Computing», Lawrence Livermore National Laboratory [8].
-
E. Minty, R. Davey, A.Simpson, D. Henty «Decomposing The Potentially Parallel».
-
Maurice Herlihy, Nir Shavit «The Art of Multiprocessor Programming».
Крім цього, слайди кожної лекції містять посилання на наукові статті, в яких можна прочитати докладніше про розглянуті теми.
Детальний перелік занять
День 1
-
Паралелізм та паралельні комп’ютери
-
Паралельні комп’ютери, класифікації архітектур (Фліна та інші);
-
загальні властивості паралелізму поняття графу потоку даних;
-
формальні критерії коректності: поняття послідовної узгодженості, лінеарізованості;
-
приклади застосувань.
-
Оцінка ефективності паралельних програм
-
Закони Амдала та Густавсона-Барсиса;
-
оцінка ефективності паралельних алгоритмів;
-
метрика Карпа-Флата;
-
оцінка досягнутої ефективності паралельних програм;
-
патерни паралельного програмування.
Між другим і третім заняттями пропонується індивідуальна домашня робота з оцінки паралельної програми, методом, розглянутим на другому занятті.
День 2
-
Процеси, нитки, синхронізація
-
Процеси, потоки та нитки;
-
віртуальна пам’ять та ізоляція;
-
проблема доступу до спільних ресурсів;
-
атомарні операції та замки;
-
паралельні структури даних «lock-free».
-
Синхронізація (продовження), OpenMP
-
Семафори та монітори;
-
патерни «виробник-споживач» та «читач-письменник»;
-
дедлоки, методи їх детекції та усунення;
-
основи OpenMP.
День 3
-
Основи програмування на паралельних комп’ютерах з розподіленою пам’яттю
-
Основи інтерфейсу обміну повідомленнями (MPI);
-
огляд систем на основі черг повідомлень (Message Queues);
-
умови задачі акустичного моделювання, яку будемо розв’язувати на наступному занятті.
-
Практичне заняття
-
Завдання полягає у розпаралеленні послідовної програми моделювання акустичних хвиль у двовимірному просторі
(моделювання експерименту SOFAR Евінга і Бреховських);
-
для виконання завдання необхідно бути знайомими з мовами програмування «C» та/або «С++»;
-
використовуючи інструменти MPI та, можливо, OpenMP;
-
виконання експериментів на кластері «СКІТ-4».
Перелік посилань
-
https://sites.google.com/site/parcomp2012/lectures
-
https://parlab.eecs.berkeley.edu/
-
https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c
-
https://inst.eecs.berkeley.edu/~cs162/sp15/
-
https://www.citutor.org/login.php?course=3
-
https://www.citutor.org/login.php?course=24
-
https://www.citutor.org/login.php?course=21
-
https://computing.llnl.gov/tutorials/parallel_comp/
-
https://computing.llnl.gov/tutorials/openMP/
-
https://computing.llnl.gov/tutorials/mpi/
Достарыңызбен бөлісу: |