Дослідження ефективності розпаралелювання процесорозалежних задач мовою Python на основі механізму потоків
DOI:
https://doi.org/10.31558/2786-9482.2024.1.2Ключові слова:
процесорозалежні задачі, швидкість обробки даних, розпаралелювання, механізм потоків, мова PythonАнотація
Метою роботи є дослідження ефективності застосування паралельної обробки даних на основі потоків у мові Python для розв’язання задач, які потребують значних ресурсів центрального процесора. В якості такої задачі розглядалась задача обробки двовимірного масиву великих розмірів стандартними засобами Python без використання спеціалізованих бібліотек на кшталт Numpy. Виявлено непрогнозоване зменшення часу виконання багатопотокової програми на 30% у порівнянні з послідовною (непаралельною) реалізацією розв’язуваної задачі. Це дає змогу поставити під сумнів загальновідоме твердження про те, що багатопотокове розв’язання процесорозалежних задач саме в мові Python не є ефективним, оскільки не приводить до зменшення часу роботи програм. Раніше вважалося, що завдяки використанню так званого глобального замка (GIL) інтерпретатор мови Python у разі виконання багатопотокових програм із застосуванням модуля Threading спрямовує усі потоки програми на одне процесорне ядро, що виключає фізичне паралельне виконання потоків і за жодних умов не дає змоги зменшити час роботи програми. Відомою рекомендацією для отримання реального виграшу в часі є використання розпаралелювання на основі механізму процесів і модуля «multiprocessing», який допомагає задіяти кілька фізичних ядер процесора. Однак такий підхід потребує додаткових ресурсів процесора (ядер) та додаткових витрат часу на обмін даними між процесами, що може звести нанівець ефект від багатоядерної обробки. Проведені авторами експерименти довели, що застосування багатопотокового підходу також може бути доцільним у випадку процесорозалежних задач, оскільки виграш у часі, що досягається, не потребує додаткових ресурсів з боку центрального процесора комп’ютера та зайвих витрат часу на обмін даними між потоками.
Посилання
Качко, О. Г. (2016). Паралельне програмування. Харків: Харківський національний університет радіоелектроніки.
Мельник, А. О., Яковлєва, І. Д. (2018). Структурний аналіз і синтез паралельних алгоритмів. Чернівці: Чернівецький національний університет.
Семеренко, В. П. (2018). Технології паралельних обчислень. Вінниця: Вінницький національний технічний університет.
Burns, B. (2018). Designing Distributed Systems. Patterns and Paradigms for Scalable, Reliable Services. Sebastopol: O’Reilly Media.
Lutz, M. (2013). Learning Python, 5th Edition. Sebastopol: O’Reilly Media.
A Guide to Python Multiprocessing and Parallel Programming (2022). https://www.sitepoint.com/python-multiprocessing-parallel-programming/
Parallel Processing in Python (2019). https://www.geeksforgeeks.org/parallel-processing-in-python/