УДК 004.032.24

ДОСТОИНСТВА И НЕДОСТАТКИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ

Бондаренко Владислав Витальевич1, Козич Виталий Геннадьевич2, Плахотная Людмила Александровна3
1Приамурский государственный университет имени Шолом-Алейхема, студент
2Приамурский государственный университет имени Шолом-Алейхема, студент
3Приамурский государственный университет имени Шолом-Алейхема, старший преподаватель кафедры информационных систем, математики и методик обучения

Аннотация
Технологии параллельного программирования являются на настоящее время активно развивающейся областью в методах создания программного обеспечения, значительно повышая скорость выполнения сложных вычислений. Однако, как и у любого другого метода, помимо преимуществ у него есть свои недостатки, из-за которых возникают определенные трудности при распараллеливании процессов, особенно у начинающих программистов. Тем не менее при должном подходе и правильном алгоритме параллельное программирование позволяет добиться значительного повышения производительности. Высокая скорость работы программного обеспечения особенно важна в таких сложных областях науки как: исследование космоса, расшифровка генома человека, прогнозирование погоды, криптографические системы. В данной статье рассматриваются основные достоинства и недостатки параллельного программирования, а также проблемы, которые требуют своего решения при разработке программного обеспечения.

Ключевые слова: высокопроизводительные системы, параллелизм, параллельное программирование, распределенное программирование


ADVANTAGES AND DISADVANTAGES OF PARALLEL PROGRAMMING

Bondarenko Vladislav Vitalievich1, Kozich Vitaliy Gennadievich2, Plakhotnaya Ludmila Alexandrovna3
1Sholom-Aleichem Priamursky State University, student
2Sholom-Aleichem Priamursky State University, student
3Sholom-Aleichem Priamursky State University, Senior Teacher of the Department of Information Systems, Mathematics and teaching methods

Abstract
Technologies of parallel programming are currently at a rapidly growing area in the way of development of software, significantly increasing the speed of execution of complex calculations. However, as with any other method, in addition to the advantages it does have its disadvantages, because of which there are some difficulties in parallelizing processes, especially for developers. Nevertheless, with proper approach and the correct algorithm, parallel programming allows to achieve a significant increase in productivity. High speed software is especially important in such complex areas of science as exploring of the cosmos, the human genome decoding, weather forecasting, cryptographic system. This article discusses the main advantages and disadvantages of parallel programming, as well as issues that need to be addressed when developing software.

Рубрика: 05.00.00 ТЕХНИЧЕСКИЕ НАУКИ

Библиографическая ссылка на статью:
Бондаренко В.В., Козич В.Г., Плахотная Л.А. Достоинства и недостатки параллельного программирования // Современные научные исследования и инновации. 2016. № 6 [Электронный ресурс]. URL: http://web.snauka.ru/issues/2016/06/69538 (дата обращения: 02.06.2017).

Многие специалисты определяют параллельное программирование как технику программирования, при которой используются все преимущества многоядерных или многопроцессорных систем. При этом параллельное программирование является одним из методов параллелизма, наравне с распределенным программированием. В настоящее время по определенным техническим причинам стало невозможным увеличивать тактовую частоту процессора. Однако есть другой способ увеличения производительности – размещение нескольких ядер в процессоре, но это требует другого подхода в программировании.

Камерон Х., Трейси Х. написали книгу «Параллельное и распределенное программирование на С++», в которой рассмотрели принципы параллельного программирования, его преимущества и недостатки, а также реализацию на языке программирования C++ [1]. Понятие алгоритма, а также теоретические сведения о параллельных вычислениях были даны в книге авторов Бурова И.Г., Демьянович Ю.К. [2]. Корнеев В.В. дал представление о MPP-компьютерах и аспектах применения этих систем [3]. Воеводин В.В., Воеводин Вл.В. посвятили себя обсуждению ключевых проблем современных параллельных вычислений [4]. Давлеткалиев Р. в своей статье рассказал об основах параллельных вычислений и рассмотрел архитектуру современных вычислительных систем [5]. На сайте компании NVIDIA представлена информация о технологии CUDA [6]. Облачный сервис Playkey предоставляет возможность играть в компьютерные игры с использованием современных технологий распределенного программирования [7]. Плахотная Л.А. разработала методы организации самостоятельной работы студентов по курсу «Основы технологий параллельного программирования», в рамках которого было проведено данное исследование [8]. Очень часто технологии параллельного программирования применяются в организации систем баз данных [9].

Для того, чтобы создавать программное обеспечение, отвечающее современным требованиям, необходимо обладать практическими знаниями параллельного и распределенного программирования. Пользователь должен быть всегда уверен в надежности и мгновенности работы программы, поэтому к ней предъявляются очень жесткие требования по производительности. Современные компьютеры оснащены многоядерными процессорами, но ввиду отсутствия подходящего программного обеспечения это не имеет никакого смысла. Люди хотят использовать больше функций при работе за компьютером, притом одновременно. Например, писать доклад, слушать музыку и параллельно что-либо устанавливать. Для удовлетворения всех требований создаваемые программы должны быть более производительными и интеллектуальными, а программное обеспечение следует проектировать с тем учётом, чтобы можно было воспользоваться всеми преимуществами многопроцессорных систем.

Если несколько задач выполняются в течение одного и того же интервала времени, то они выполняются параллельно. Но это вовсе не значит, что задачи обязательно должны выполняться в один момент времени. Например, две задачи могут выполняться в течение одной секунды, но каждая из них будет выполняться в определенные доли секунды. Первая задача будет выполняться в первую десятую часть секунды, вторая во вторую десятую, затем снова первая в третью десятую секунды и так далее. Другими словами, здесь мы видим последовательное поочередное выполнение задач, но обе завершаются к концу секунды и так как для нас доли секунды не заметны и не играют роли, то нам кажется, что они выполняются параллельно. Именно таким способом выполняются задачи в однопроцессорной среде. В многопроцессорной среде при наличии свободных процессоров задачи выполняются параллельно в один и тот же момент времени. Цель параллелизма – обеспечить компьютеру все возможности для совершения большого объема работы за тот же интервал времени. Поэтому программное обеспечение должно создаваться, ориентируясь не на выполнение одной задачи, а на выполнение нескольких задач за некоторый промежуток времени. Также распараллеливание процессов позволяет достичь более простой и удобной структуры программы, организовав её в виде ряда небольших параллельно выполняемых операций.

Программное обеспечение, которое качественно спроектировано с учётом всех требований параллелизма, зачастую выполняется в разы быстрее, чем та же программа, но с последовательной архитектурой. Решение некоторых важных задач представляются в естественном виде коллекции параллельных задач. Данная особенность характерна для многих научных областей таких, как математическое и научное программирование, проектирование искусственного интеллекта. Для разработчика это значит снижение трудозатрат, так как технологии параллельного программирования позволяют напрямую реализовывать алгоритмы и структуры данных, созданных ранее учёными. Часто используют специальное оборудование, напичканное сотнями и даже тысячами процессорами, каждый из которых выполняет свою конкретную задачу, что позволяет достигнуть невероятной производительности вычислений.

В качестве примера можно привести видеокарты от компании NVIDIA, которые имеют продвинутую технологию параллельных вычислений CUDA. Данные видеокарты содержат в себе несколько тысяч ядер CUDA, каждое из которых производит параллельное вычисление. Платформа параллельных вычислений CUDA обеспечивает набор расширений для языков C и C++, которые позволяют работать как с параллелизмом данных, так и с параллелизмом задач. На сегодняшний день CUDA очень широко используется программистами, учёными и исследователями во многих областях, включая обработку видео и изображений, биологию и химию, симуляцию различных субстанций, таких, как вода, сейсмический анализ, трассировку лучей и многое другое.

Такие устройства называются MPP-компьютерами (Massively Parallel Processors) и с их помощью также можно моделировать экологическую систему, проводить исследования космического пространства, моделировать геном человека.

Применение подобных технологий параллельного программирования приводит к новым архитектурам программного обеспечения, которое специально разрабатывается для параллельных сред.

Существует ещё другой метод параллелизма – распределённое программирование. Этот метод позволяет воспользоваться компьютерными и программными ресурсами, размещенных в Интернете. Другими словами, можно сказать, что какая-то программа выполняется на удалённом компьютере и на компьютере пользователя, а затем сервер передаёт данные на компьютер, где они объединяются с локальными данными. Распределенное программирование в той или иной степени включает в себя сетевое программирование и подразумевает общение посредством сетевого соединения между программами клиента и сервера. Таким образом основным преимуществом данного метода является доступ к компьютерным ресурсам, которые могут находиться даже на другом континенте. При этом всё, что нужно обычному пользователю – иметь домашний компьютер или смартфон с необходимым программным обеспечением.

В этой сфере сейчас очень бурно развиваются облачные технологии. Их существует огромное множество, но в качестве примера приведем одну из них. Playkey – очень интересная облачная технология для потокового передачи видео, которая дарит возможность играть в самые технологичные компьютерные игры с любого устройства. Игра запускается на удалённом сервере, а пользователю транслируется видеопоток на его устройство. Таким образом игра использует ресурсы компьютера не пользователя, а удалённого сервера. Всё что нужно для работы – это стабильное Интернет-соединение. Также существуют множество облачных сервисов для хранения и получения доступа к данным: Google Drive, Dropbox, OneDrive и другие.

В базовой модели программирования все инструкции выполняются поочередно, то есть у каждой задачи есть порядок и каждая из них должна ожидать своей очереди. Такая линейная структура программы очень твердо закрепилась в умах многих разработчиков, что они даже не могут допустить другого положения вещей. Отсюда происходят различные проблемы при создании программного продукта ещё на стадии проектирования. Это один из главных недостатков на сегодняшний день и для того, чтобы исправить ситуацию, необходимо изменить парадигму мышления программиста. Ведь в мире параллельного программирования всё обстоит по-другому. Но даже в этом случае не исключаются проблемы при кодировании: параллельное программирование имеет ряд особенностей и трудностей и не всякий процесс можно распараллелить ввиду разного рода ограничений и требований. Вот основные проблемы, с которыми возможно придётся столкнуться при параллельном программировании:

  1. Гонка данных. Когда два процесса пытаются одновременно изменить общую область данных, создаётся некая неопределенность, и конечный результат будет зависеть от того, какая задача обратится к этой области данных первой.
  2. Бесконечная отсрочка. Одна или несколько задач ожидают связи от другой задачи до своего выполнения. Если такая связь между задачами не налажена, то задачи будут бесконечно ожидать завершения друг от друга.
  3. Взаимоблокировка. Может произойти при параллельно выполняемых задачах, имеющих общий доступ к данным. Возможно ситуация, при которой каждая из задач будет ожидать пока другая не освободит доступ к данным.
  4. Организация связи. Порой бывает очень трудно наладить связь между задачами, если они выполняются на компьютерах различных типов (разные операционные системы, технологии и языки программирования), что делает поиск и обработку ошибок ещё сложнее.
  5. Отказ оборудования. Если какие-то процессоры дадут сбой, то возникает проблема, при которой необходимо решить, как будут вести себя другие процессоры, чтобы не прекращать работу программы.
  6. Излишний параллелизм. Выражение «чем больше процессоров, тем лучше» не соответствует действительности. Организация синхронизации всех процессоров при их большом количестве может показаться затруднительной. Поэтому в каждом конкретном случае необходимо выявить оптимальное количество процессоров, чтобы не навредить быстродействию работы.

Таким образом в подведение итогов еще раз кратко рассмотрим основные преимущества и недостатки параллельного программирования.

Преимущества:

-     возможность выполнения нескольких задач в один момент времени;

-     более высокая скорость работы приложений;

-     простая и удобная структура программы.

Недостатки:

-     трудности для новичков, связанные с иным типом мышления при программировании;

-     неопределенность приоритета задач;

-     трудности взаимосвязи между задачами;

-     взаимоблокировка задач;

-     проблемы при отказе оборудования;

-     необходимость подбора оптимального количества процессоров.

Несомненно, параллельное программирование является интенсивно развивающейся областью компьютерных наук и позволяет с большей эффективностью создавать высокопроизводительные системы, разрабатывать качественно новые архитектуры аппаратных средств и структурировать программный код при проектировании. Однако существует ряд минусов, касающихся технической стороны, которые могут отпугнуть начинающих программистов. Поэтому важно на сегодняшний день изменить парадигму мышления программиста в сторону параллелизма, чтобы избежать разного рода недоразумений при создании программного обеспечения. Для этого следует создавать современные и эффективные методики обучения по дисциплинам связанными с параллельным программированием.


Библиографический список
  1. Камерон Х., Трейси Х. Параллельное и распределенное программирование на С++. М.: Вильямс, 2004. 672 с.
  2. Бурова И.Г., Демьянович Ю.К. Алгоритмы параллельных вычислений и программирование. СПб.: СПбГУ, 2007. 208 с.
  3. Корнеев В.В. Параллельные вычислительные системы. М.: Нолидж, 1999. 320 с.
  4. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. СПб.: ВХВ-Петербург, 2002. 608 с.
  5. Введение в параллельные вычисления // Habrahabr URL: https://habrahabr.ru/post/126930/ (дата обращения: 24.04.2016).
  6. Параллельные вычисления CUDA | Что такое CUDA? | NVIDIA // NVIDIA URL: http://www.nvidia.ru/object/cuda-parallel-computing-ru.html (дата обращения: 01.05.2016).
  7. Playkey | игры онлайн // PLAYKEY URL: http://playkey.net/ (дата обращения: 01.05.2016).
  8. Плахотная Л. А. Организация самостоятельной работы студентов специальности «Информатика» в рамках курса по выбору «Основы технологии параллельного программирования» // Актуальные вопросы методики преподавания математики и информатики: сборник научных трудов третьей Международной научно-практической конференции, 16 апреля 2008 г. Биробиджан: Изд-во ДВГСГА, 2008. С. 113-116.
  9. Плахотная Л.А., Бондаренко В.В. О технологиях организации интерфейса к базе данных // Современная техника и технологии. 2015. № 6


Все статьи автора «Владислав Витальевич»


© Если вы обнаружили нарушение авторских или смежных прав, пожалуйста, незамедлительно сообщите нам об этом по электронной почте или через форму обратной связи.

Связь с автором (комментарии/рецензии к статье)

Оставить комментарий

Вы должны авторизоваться, чтобы оставить комментарий.

Если Вы еще не зарегистрированы на сайте, то Вам необходимо зарегистрироваться: