Організація обчислювальних процесів у паралельних системах

Спеціальність: Комп'ютерні системи та мережі
Код дисципліни: 7.123.01.E.017
Кількість кредитів: 4.00
Кафедра: Електронні обчислювальні машини
Лектор: к.т.н., доц. каф. ЕОМ Бочкарьов Олексій Юрійович
Семестр: 2 семестр
Форма навчання: денна
Мета вивчення дисципліни: Виробити у студентів чітке та систематизоване уявлення про організацію обчислювальних процесів в паралельних комп’ютерних системах, обчислювальні процеси у таких системах, а також принципи побудови відповідного системного та прикладного програмного забезпечення; надати навички в створенні та організації паралельних обчислювальних процесів.
Завдання: Загальні компетентності: ЗК6. Здатність виявляти, ставити та вирішувати проблеми. Фахові компетентності: СК2. Здатність розробляти алгоритмічне та програмне забезпечення, компоненти комп’ютерних систем та мереж, Інтернет додатків, кіберфізичних систем з використанням сучасних методів і мов програмування, а також засобів і систем автоматизації проектування. СК5. Здатність будувати архітектуру та створювати системне і прикладне програмне забезпечення комп’ютерних систем та мереж. Фахові компетентності професійного спрямування. Блок 01 «Високопродуктивні комп’ютерні системи»: ФКС1.1. Володіння поглибленими знаннями про проектування апаратного та програмного забезпечення високопродуктивних комп’ютерних систем.
Результати навчання: Результати навчання відповідно до освітньої програми: РН9. Розробляти програмне забезпечення для вбудованих і розподілених застосувань, мобільних і гібридних систем. Результати навчання спеціального спрямування відповідно до освітньої програми: Блок 01 : «Високопродуктивні комп’ютерні системи» РНС1.3. Навички володіння апаратно-програмними засобами створення паралельних ра розподілених комп’ютерних систем, здатність розв’язувати складні спеціалізовані задачі щодо їх проектування та дослідження. Результати вивчення дисципліни: - знати принципи організації обчислювальних процесів в паралельних комп’ютерних системах; - знати способи використання інтерфейсу системних викликів UNIX/Linux для організації обчислювальних процесів в паралельних комп’ютерних системах - знати методи та засоби паралельного програмування на рівні обчислювальних процесів та програмних потоків; - мати практичні навички по роботі з прикладними програмними інтерфейсами та бібліотеками паралельного програмування; - вміти проектувати та реалізувати різні схеми організації обчислювальних процесів та програмних потоків в паралельних та розподілених комп’ютерних системах за допомогою інтерфейсів та платформ паралельного програмування; - мати практичні навички по створенню та налагодженню роботи паралельних програм.
Необхідні обов'язкові попередні та супутні навчальні дисципліни: Попередні: Архітектура комп’ютерів, Паралельні та розподілені обчислення. Супутні: Проектування віртуальних машин.
Короткий зміст навчальної програми: Дисципліна “Організація обчислювальних процесів у паралельних системах” ставить на меті виробити у студентів чітке та систематизоване уявлення про організацію обчислювальних процесів в паралельних комп’ютерних системах, обчислювальні процеси у таких системах, а також принципи побудови відповідного системного та прикладного програмного забезпечення; надати навички в створенні та організації паралельних обчислювальних процесів. В результаті освоєння учбового матеріалу дисципліни студенти повинні знати загальні принципи організації обчислювальних процесів в паралельних комп’ютерних системах різних класів, розуміти концептуальні основи функціонування системного програмного забезпечення багатозадачних, багатопроцесорних та багатомашинних паралельних комп’ютерних систем, вміти працювати в операційному середовищі паралельних комп’ютерних систем. Для освоєння даної дисципліни необхідне знання таких дисциплін: “Архітектура комп’ютерів”, “Паралельні та розподілені обчислення”.
Опис: 1. Паралельні обчислення. Організація паралельних обчислень. Основні задачі організації паралельних обчислень. Класифікація паралельних комп’ютерних систем. Моделі паралельних обчислень. Типи паралельних комп’ютерних систем. Паралельне програмування. Способи організації паралельних обчислень. Паралельні обчислювальні процеси в ОС Linux. Органіазація обчислювальних процесів в ОС Linux. Запуск та породження нових процесів в ОС Linux (fork, exec, nice). Запит та встановлення атрибутів процесу в ОС Linux. Завершення виконання процесів в ОС Linux (exit, wait). 2. Взаємодія обчислювальних процесів в ОС Linux. Неіменовані канали (anonymous pipes). Створення неіменованого каналу (pipe, pipe2). Робота з неіменованим каналом. Іменовані канали (named pipes). Права доступу до об’єктів System V IPC. Режими іменування об’єктів System V IPC (IPC_PRIVATE, ftok). Черги повідомлень (message queues). Спільна пам’ять (shared memory). Відображення файлів у пам’ять (mmap, munmap, msync). Взаємодія процесів за допомогою файлів відображених у пам’ять. Семафори в ОС Linux. Способи використання семафорів для синхронiзацiї паралельних процесів. Програмний інтерфейс для роботи з семафорами стандарту POSIX. Реалізація механізму семафорів за допомогою системного виклику eventfd(). Сигнали в ОС Linux. Взаємодія процесів за допомогою сокетів Берклі. 3. Паралельні обчислення на рівні програмних потоків: POSIX Threads. Програмні потоки (threads). Переваги та недоліки використання програмних потоків. Інтерфейс прикладного програмування POSIX Threads (Pthreads). Управління програмними потоками. Управління атрибутами потоків. Синхронізація програмних потоків. Синхронізація програмних потоків за допомогою м’ютексів. Синхронізація програмних потоків за допомогою умовних змінних. Блокування читання-запису (readers–writer lock). Cпін-блокування (spinlock). Бар’єрна синхронізація програмних потоків. 4. Технології паралельного програмування OpenMP та oneTBB. Організація паралельних обчислень за допомогою OpenMP. Використання OpenMP. Складові компоненти OpenMP. Опис паралельних частин програми (директива parallel). Управління кількістю програмних потоків. Управління класами змінних в OpenMP. Розподіл обчислювальних завдань між потоками. Розподіл обчислювального навантаження між потоками (директива for, вираз schedule). Виконання блоку коду підмножиною потоків (директиви single та masked). Бар’єрна синхронізація потоків (директива barrier). Критичні секції коду та атомарні операції (директиви critical та atomic). Бібліотека паралельного програмування oneTBB. Організація паралельних обчислень за допомогою oneTBB. Структура бібліотеки паралельного програмування oneTBB. Паралельне виконання ітерацій циклу за допомогою tbb::parallel_for. Розподіл обчислювального навантаження між потоками у tbb::parallel_for. 5. Організація паралельних обчислень в розподілених системах. Програмний інтерфейс MPI: організація обчислень та омбін повідомленнями. Організація обчислень в розподіленій системі за допомогою MPI. Основні службові функції MPI. Відправка та отримання повідомлень з блокуванням. Відправка та отримання повідомлень без блокування. Комунікатори та колективна взаємодія процесів. Використання комунікаторів для роботи з групами процесів. Колективна взаємодія процесів в MPI. Бар'єрна синхронізація процесів в MPI.
Методи та критерії оцінювання: Письмові звіти з лабораторних робіт, усне опитування (40%). Підсумковий контроль (60 %, контрольних захід, екзамен): письмово-усна форма (60%).
Критерії оцінювання результатів навчання: Семестрова оцінка виставляється за умови виконання студентом навчального плану. Семестрова оцінка формується з результатів поточного контролю виконання лабораторних робіт і семестрового тестування. Результат семестрового тестування є добутком результату семестрового тесту у віртуальному навчальному середовищі та коефіцієнта лекційних тестів у віртуальному навчальному середовищі. Максимальна оцінка в балах - 100. Поточний контроль (лаб. Роботи) - 40. Екзаменаційний контроль: письмова компонента - 50, усна компонента - 10.
Порядок та критерії виставляння балів та оцінок: 100–88 балів – («відмінно») виставляється за високий рівень знань (допускаються деякі неточності) навчального матеріалу компонента, що міститься в основних і додаткових рекомендованих літературних джерелах, вміння аналізувати явища, які вивчаються, у їхньому взаємозв’язку і роз витку, чітко, лаконічно, логічно, послідовно відповідати на поставлені запитання, вміння застосовувати теоретичні положення під час розв’язання практичних задач; 87–71 бал – («добре») виставляється за загалом правильне розуміння навчального матеріалу компонента, включаючи розрахунки , аргументовані відповіді на поставлені запитання, які, однак, містять певні (неістотні) недоліки, за вміння застосовувати теоретичні положення під час розв’язання практичних задач; 70 – 50 балів – («задовільно») виставляється за слабкі знання навчального матеріалу компонента, неточні або мало аргументовані відповіді, з порушенням послідовності викладення, за слабке застосування теоретичних положень під час розв’язання практичних задач; 49–26 балів – («не атестований» з можливістю повторного складання семестрового контролю) виставляється за незнання значної частини навчального матеріалу компонента, істотні помилки у відповідях на запитання, невміння застосувати теоретичні положення під час розв’язання практичних задач; 25–00 балів – («незадовільно» з обов’язковим повторним вивченням) виставляється за незнання значної частини навчального матеріалу компонента, істотні помилки у відповідях на запитання, невміння орієнтуватися під час розв’язання практичних задач, незнання основних фундаментальних положень.
Рекомендована література: 1. Peter Pacheco, Matthew Malensek, An Introduction to Parallel Programming, 2nd Edition, Morgan Kaufmann, 2021. - 450 p. 2. Maurice Herlihy, Nir Shavit, Victor Luchangco, Michael Spear, The Art of Multiprocessor Programming, 2nd Edition, Morgan Kaufmann, 2020. - 576 p. 3. W. Stevens, Stephen Rago, Advanced Programming in the UNIX Environment, 3rd Edition, Addison-Wesley Professional, 2013. - 1032 p. 4. Michael Kerrisk, The Linux Programming Interface: A Linux and UNIX System Programming Handbook, 1st Edition, No Starch Press, 2010. – 1553 p. 5. Programming Models for Parallel Computing, ed. by Pavan Balaji, The MIT Press, 2015. - 488 p. 6. Bertil Schmidt Jorge Gonzalez-Dominguez Christian Hundt Moritz Schlarb, Parallel Programming: Concepts and Practice, 1st Edition, Morgan Kaufmann, 2017. – 416 p. 7. David B. Kirk, Wen-mei W. Hwu Programming Massively Parallel Processors, Morgan Kaufmann, 2016. – 576 p. 8. Michael Voss, Rafael Asenjo, James Reinders, Pro TBB: C++ Parallel Programming with Threading Building Blocks, Apress, 2019. – 820 p. 9. Victor Eijkhout, Parallel Programming in MPI and OpenMP, Lulu.com, 2017. – 350 p. 10. Kaiwan N. Billimoria, Hands-On System Programming with Linux, Packt Publishing, 2018. - 794 p. 11. Victor Alessandrini, Shared memory application programming, Morgan Kaufmann, 2016. - 528 p. 12. Victor Eijkhout, Parallel Programming for Science Engineering: Using MPI, OpenMP, and the PETSc library, 2nd ed., Texas Advanced Computing Center, 2020. - 769 p.
Уніфікований додаток: Національний університет «Львівська політехніка» забезпечує реалізацію права осіб з інвалідністю на здобуття вищої освіти. Інклюзивні освітні послуги надає Служба доступності до можливостей навчання «Без обмежень», метою діяльності якої є забезпечення постійного індивідуального супроводу навчального процесу студентів з інвалідністю та хронічними захворюваннями. Важливим інструментом імплементації інклюзивної освітньої політики в Університеті є Програма підвищення кваліфікації науково-педагогічних працівників та навчально-допоміжного персоналу у сфері соціальної інклюзії та інклюзивної освіти. Звертатися за адресою: вул. Карпінського, 2/4, І-й н.к., кімн. 112 E-mail: nolimits@lpnu.ua Websites: https://lpnu.ua/nolimits https://lpnu.ua/integration
Академічна доброчесність: Політика щодо академічної доброчесності учасників освітнього процесу формується на основі дотримання принципів академічної доброчесності з урахуванням норм «Положення про академічну доброчесність у Національному університеті «Львівська політехніка» (затверджене вченою радою університету від 20.06.2017 р., протокол № 35).