ОРГАНІЗАЦІЯ БАГАТОПОТОКОВИХ ОБЧИСЛЕНЬ В С++

https://doi.org/10.23939/cds2023.01.019
Надіслано: Липень 17, 2023
Переглянуто: Вересень 28, 2023
Прийнято: Жовтень 10, 2023
1
Національний університет Львівська політехніка
2
Національний університет Львівська політехніка

Протягом багатьох років, збільшення обчислювальної потужності сучасних пристроїв досягається не через підвищення тактової частоти та пропускної здатності процесорів, а шляхом застосування гіперпотокових і багатоядерних архітектур. Ця проста зміна підходу до дизайну комплектуючих призвела до драматичних змін в організації обчислень і стала поворотним пунктом для розробників програмного забезпечення. Програмне забезпечення, яке має скористатися збільшенням обчислювальної потужності багатоядерних архітектур, повинно бути розроблена таким чином, щоб мати змогу одночасно виконувати кілька завдань. При висвітленні теми паралельних/одночасних обчислень науковці та фахівці в галузі ІТ користуються двома термінами: (1) «паралелізм» (англ. parallelism) та (2) «одночасне/узгоджене виконання» (англ. сoncurrency). Третім важливим терміном при розгляді паралельних/одночасних обчислень, є «багатопотоковість» (multithreading). У C++ двома найпоширенішими способами реалізації паралелізму є узгоджене виконання та власне паралелізм. Хоча їх можна використовувати і в інших мовах програмування, C++ виділяється своїми можливостями використання одночасних обчислень з нижчим, ніж середнє, залученням загальних ресурсів машини, а також здатністю виконувати складні інструкції. У стандарті C++11 була запропонована підтримка багатопотокових програм. Стандарт C++ визнавав існування багатопотоковості у мові та надавав компоненти для написання багатопотокових програм у бібліотеці . Це зробило можливим написання багатопотокових програм на C++, не покладаючись на специфічні для певної платформи розширення, та дало змогу створювати портативний багатопотоковий код із гарантованою поведінкою. Бібліотека надає широкі можливості для організації паралельних та узгоджених/одночасних обчислень, містить також модель пам’яті C++, умовні змінні, м’ютекси та ін. для синхронізації роботи потоків. У статті здійснено аналіз можливостей написання програм мовою C++ з використанням кількох потоків для паралельного та/або узгодженого виконання завдань, а також розгляд функцій мови C++ і засобів бібліотеки , які роблять це можливим.

1. Sutter H. (2009). The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software. Retrieved from: www.gotw.ca/publications/concurrency-ddj.htm

2. Acar U. A., Chargueraud A., Rainey M. (2016). An Introduction to Parallel Computing in C++. Retrieved from: www.cs.cmu.edu/afs/cs/academic/class/15210-f18/www/pasl.html

3. Wataru E., Shigeyuki S., Kenjiro T. (2022). ComposableThreads: Rethinking User-level Threads with Composability and Parametricity in C++, Journal of Information Processing, Vol.30, 269–282. https://doi.org/10.2197/ipsjjip.30.269

4. Qiu W., Zhang Y., Wang L. (2019). Visual C + + and MFC Application in Safety Monitoring System of Airplane Depot, Advances in Computer Science Research, volume 88, 40-45, CNCI 2019, Atlantis Press. https://doi.org/10.2991/cnci-19.2019.6

5. Thelin R. (2020). A tutorial on modern multithreading and concurrency in C++. Retrieved from: www.educative.io/blog/modern-multithreading-and-concurrency-in-cpp

6. Сіциліцин Ю. О. (2022). Моделювання змісту дисципліни «Паралельні та розподілені обчислення», Педагогічні науки: теорія та практика, № 4 (44), 23-28. https://doi.org/10.26661/2786-5622-2022-4-03

7. Wilson C. (2019). Multithreading and concurrency fundamentals. Retrieved from: www.educative.io/blog/multithreading-and-concurrency-fundamentals

8. Williams A. (2019). C++ Concurrency in Action, Second Edition. Manning Publications Co. Shelter Island, NY.

9. The Difference Between Asynchronous and Multi-Threading (2023). Retrieved from: www.baeldung.com/cs/async-vs-multi-threading

10. MemarianK.,Matthiesen J., Lingard J.,Nienhuis K., Chisnall D., Watson R.N.M., Sewell P. (2016). Into the depths of C: elaborating the de facto standards, PLDI '16: Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation, 1–15.https://doi.org/10.1145/2908080.2908081

11. Mahapatra S. (2023). Multithreading in C++. Retrieved from: www.geeksforgeeks.org/multithreading-in-cpp 

12. Ajkunic E., Fatkic H., Omerovic E., Talic K., Nosovic N. (2012). A Comparison of Five Parallel Programming Models for C++, 2012 Proceedings of the 35th International Convention, MIPRO 2012, Opatija, Croatia, May 21-25, 2012. IEEE 2012, 1780-1784.