Статья опубликована в рамках: Научного журнала «Студенческий» № 23(67)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4
ОЦЕНКА ПРИМЕНЕНИЯ ПАРАЛЛЕЛИЗМА НА ПРАКТИКЕ
В настоящее время большинство компьютеров обладают многоядерными процессорами или реже имеют несколько процессоров. Так как любая программа изначально задействует некоторое количество потоков и один процесс, при трудоёмких расчетах можно увеличить производительность путем применения бо́льшей вычислительной мощности компьютера. Это достигается через распределение вычислительных процессов на несколько ядер, процессоров или группу машин (кластер) (распределенные вычисления). Первые два случая представляют собой свойство программы, называемое параллелизмом. Можно выделить 3 способа реализации параллельных вычислений [1]:
- с помощью процессов (взаимодействие c помощью передачи сообщений);
- с помощью потоков (взаимодействие через разделяемую память);
- гибридный способ.
Существует большой выбор математических теорий для изучения и анализа систем с передачей сообщений, включая модель акторов и различные виды исчислений процессов.
Эффективность применения параллелизма в основном зависит от количества ядер процессора, её тактовой частоты и от количества процессоров в компьютере.
В таблице 1 перечислены основные преимущества и недостатки процессного и поточного параллелизма.
Таблица 1
Сравнение типов параллелизма
Тип параллелизма |
Преимущества |
Недостатки |
Процессный |
Из независимости процессов друг
|
Потребность в бо́льшем количестве ресурсов системы, временных затрат (необходимость |
Поточный |
Относительно высокая скорость синхронизации между потоками, меньшие временные затраты на создание потока, упрощение программы в некоторых случаях за счёт использования общего адресного пространства. |
Сложность координации потоков для предотвращения состояния неопределенности (недетерминированности), общие проблемы для всех потоков внутри процесса (фрагментация памяти, утечки ресурсов и т.д.) |
На основе вышеприведенного сравнения в таблице 1 можно сделать вывод, что процессный параллелизм подходит для параллельных вычислений, не требующих сложного взаимодействия друг с другом, но требующих безопасности и отказоустойчивости системы.
Далее процессный параллелизм будет рассмотрен в контексте языка программирования Python версии 3.6. В качестве примера использования данного свойства можно привести параллелизм в работе модуля, рассчитывающего зоны затопления с использованием множества инструментов геообработки. Для реализации процессного параллелизма был применен модуль Python 3.6 под названием multiprocessing [2]. Так как этот модуль использует процессы, а не потоки, он позволяет обойти Global Interpreter Lock (GIL) — механизм синхронизации потоков, который используется в некоторых интерпретируемых языках программирования, в частности в CPython, наиболее распространенной реализации интерпретатора языка Python. GIL ограничивает параллельность вычислений из-за применяемого в нем подхода обеспечения потокобезопасности, т.е. он не позволяет достигать наибольшей эффективности вычислений при работе на многоядерных и мультипроцессорных системах [3].
Для обеспечения целостности базы данных и предотвращения конфликтов доступа в файловой системе операционной системы применяются блокировки с повторным входом, которые реализованы в классе RLock вышеупомянутого модуля. Объект данного класса блокирует процесс только в том случае, если блокировка захвачена другим процессом. Таким образом, это позволяет облегчить взаимодействие между процессами и избежать взаимной блокировки (deadlock).
Класс Pool библиотеки multiprocessing позволяет создать подобие модели распределенных вычислений MapReduce с использованием только одного сервера. Для этого в данном классе предусмотрен метод map, который разделяет массив входных данных на части и передает их рабочим процессам (по аналогии с рабочими узлами) для обработки с помощью предопределенной функции. При решении задачи расчета зоны затопления в качестве первого аргумента в метод map была передана соответствующая функция для расчета, а в качестве второго — номер файла, откуда считываются входные данные за конкретный час об уровнях воды, скорости течения в точках расчетной сетки.
Для оценки эффективности применения параллелизма были проведены эксперименты по применению модуля с использованием 1, 2, 3 и 4 ядер процессора (Рисунок 1).
Рисунок 1. Зависимость среднего времени обработки от используемого количества ядер процессора
Из данной зависимости можно отметить, что наиболее высокая разница наблюдается уже при использовании 2-х ядер процессора. При использовании 4-х ядер время обработки сокращается в 2,49 раза по сравнению с обработкой на 1 ядре процессора.
Таким образом, выбор типа параллелизма, аппаратных характеристик вычислительных устройств для параллельных вычислений индивидуально для каждой предметной области. Оптимальный выбор данных параметров позволяет наиболее рационально применять имеющиеся ресурсы. Для этого необходимо провести сравнительную характеристику применяемых технологий, изучить особенности реализации параллелизма в выбранном языке программирования, выполнить тесты производительности и т.д.
Список литературы:
- Параллельные вычисления [Электронный ресурс] // Википедия: свободная энцикл. – URL: https://ru.wikipedia.org/wiki/Параллельные_вычисления (дата обращения: 24.05.2019).
- multiprocessing — Process-based parallelism [Электронный ресурс] // Python Documentation. – URL: https://docs.python.org/3.6/library/multiprocessing.html (дата обращения 25.05.2019).
- Global Interpreter Lock [Электронный ресурс] // Википедия: свободная энцикл. – URL: https://ru.wikipedia.org/wiki/Global_Interpreter_Lock (дата обращения: 26.05.2019).
Оставить комментарий