Модель параллельного программирования

редактировать

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

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

СОДЕРЖАНИЕ
  • 1 Классификация моделей параллельного программирования
    • 1.1 Взаимодействие с процессами
      • 1.1.1 Общая память
      • 1.1.2 Передача сообщений
      • 1.1.3 Неявное взаимодействие
    • 1.2 Декомпозиция задачи
      • 1.2.1 Параллелизм задач
      • 1.2.2 Параллелизм данных
      • 1.2.3 Неявный параллелизм
  • 2 Терминология
  • 3 Примеры моделей параллельного программирования
  • 4 См. Также
  • 5 ссылки
  • 6 Дальнейшее чтение
Классификация моделей параллельного программирования

Классификации моделей параллельного программирования можно условно разделить на две области: взаимодействие процессов и декомпозиция проблемы.

Взаимодействие процессов

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

Общая память

Основная статья: Общая память (межпроцессное взаимодействие)

Общая память - эффективное средство передачи данных между процессами. В модели с общей памятью параллельные процессы совместно используют глобальное адресное пространство, которое они читают и записывают в асинхронном режиме. Асинхронный параллельный доступ может привести к состояниям гонки, и для их предотвращения можно использовать такие механизмы, как блокировки, семафоры и мониторы. Обычные многоядерные процессоры напрямую поддерживают разделяемую память, для использования которой предназначены многие языки и библиотеки параллельного программирования, такие как Cilk, OpenMP и Threading Building Blocks.

Передача сообщений

Основная статья: Передача сообщений

В модели передачи сообщений параллельные процессы обмениваются данными, передавая сообщения друг другу. Эти коммуникации могут быть асинхронными, когда сообщение может быть отправлено до того, как получатель будет готов, или синхронным, когда получатель должен быть готов. Формализация передачи сообщений « Последовательные процессы связи» (CSP) использует синхронные каналы связи для соединения процессов и привела к появлению таких важных языков, как Occam, Limbo и Go. Напротив, модель акторов использует асинхронную передачу сообщений и использовалась при разработке таких языков, как D, Scala и SALSA.

Неявное взаимодействие

Основная статья: Неявный параллелизм

В неявной модели программисту не видно взаимодействия с процессами, и вместо этого компилятор и / или среда выполнения несут ответственность за его выполнение. Два примера неявного параллелизма относятся к предметно-ориентированным языкам, где предписывается параллелизм в рамках высокоуровневых операций, и к функциональным языкам программирования, поскольку отсутствие побочных эффектов позволяет независимым функциям выполняться параллельно. Однако этим типом параллелизма сложно управлять, и такие функциональные языки, как Concurrent Haskell и Concurrent ML, предоставляют функции для явного и правильного управления параллелизмом.

Разложение проблемы

Параллельная программа состоит из одновременно выполняющихся процессов. Декомпозиция проблемы связана со способом формулирования составляющих процессов.

Параллелизм задач

Основная статья: Параллелизм задач

Модель с параллельными задачами фокусируется на процессах или потоках выполнения. Эти процессы часто отличаются поведенческими особенностями, что подчеркивает необходимость общения. Параллелизм задач - естественный способ выразить коммуникацию с передачей сообщений. В таксономии Флинна параллелизм задач обычно классифицируется как MIMD / MPMD или MISD.

Параллелизм данных

Основная статья: Параллелизм данных

Модель с параллельными данными фокусируется на выполнении операций с набором данных, обычно с регулярно структурированным массивом. Набор задач будет работать с этими данными, но независимо от непересекающихся разделов. В таксономии Флинна параллелизм данных обычно классифицируется как MIMD / SPMD или SIMD.

Неявный параллелизм

Основная статья: Неявный параллелизм

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

Терминология

Модели параллельного программирования тесно связаны с моделями вычислений. Модель параллельных вычислений - это абстракция, используемая для анализа стоимости вычислительных процессов, но она не обязательно должна быть практичной, поскольку ее можно эффективно реализовать в аппаратном и / или программном обеспечении. Модель программирования, напротив, конкретно подразумевает практические аспекты аппаратной и программной реализации.

Язык параллельного программирования может быть основан на одной или на комбинации моделей программирования. Например, высокопроизводительный Fortran основан на взаимодействии с разделяемой памятью и декомпозиции проблемы параллельных данных, а Go обеспечивает механизм взаимодействия с разделяемой памятью и передачей сообщений.

Примеры моделей параллельного программирования
Имя Класс взаимодействия Класс разложения Примеры реализации
Актерская модель Асинхронная передача сообщений Задача D, Erlang, Scala, SALSA
Массовая синхронная параллель Общая память Задача Apache Giraph, Apache Hama, BSPlib
Связь последовательных процессов Синхронная передача сообщений Задача Ада, Оккам, VerilogCSP, Go
Схемы Передача сообщений Задача Verilog, VHDL
Поток данных Передача сообщений Задача Lustre, TensorFlow, Apache Flink
Функциональный Передача сообщений Задача Параллельный Haskell, Параллельный ML
Машина LogP Синхронная передача сообщений Не указано Никто
Параллельная машина с произвольным доступом Общая память Данные Cilk, CUDA, OpenMP, стандартные блоки потоков, XMTC
Смотрите также
использованная литература
дальнейшее чтение
Последняя правка сделана 2023-04-17 07:01:26
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте