Модель параллельного программирования - Parallel programming model

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

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

Классификация моделей параллельного программирования

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

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

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

Общая память

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

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

В модели передачи сообщений параллельные процессы обмениваются данными, передавая сообщения друг другу. Эти коммуникации могут быть асинхронными, когда сообщение может быть отправлено до того, как получатель будет готов, или синхронным, когда получатель должен быть готов. В Связь последовательных процессов (CSP) формализация передачи сообщений использует синхронные каналы связи для соединения процессов и привела к важным языкам, таким как Оккам, Лимбо и Идти. Напротив, актерская модель использует асинхронную передачу сообщений и был использован при разработке таких языков, как D, Scala и SALSA.

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

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

Декомпозиция проблемы

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

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

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

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

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

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

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

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

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

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

Примеры моделей параллельного программирования

ИмяКласс взаимодействияКласс разложенияПримеры реализации
Актерская модельАсинхронная передача сообщенийЗадачаD, Erlang, Scala, САЛЬСА
Массовая синхронная параллельОбщая памятьЗадачаApache Giraph, Apache Hama, BSPlib
Связь последовательных процессовСинхронная передача сообщенийЗадачаАда, Оккам, VerilogCSP, Идти
СхемыПередача сообщенийЗадачаVerilog, VHDL
Поток данныхПередача сообщенийЗадачаБлеск, TensorFlow, Apache Flink
ФункциональныйПередача сообщенийЗадачаПараллельный Haskell, Параллельный ML
LogP машинаСинхронная передача сообщенийНе указаноНикто
Параллельная машина с произвольным доступомОбщая памятьДанныеСилк, CUDA, OpenMP, Заправка строительных блоков, XMTC

Смотрите также

Рекомендации

  1. ^ Скилликорн, Дэвид Б., «Модели для практических параллельных вычислений», Международный журнал параллельного программирования, 20,2 133–158 (1991), https://www.ida.liu.se/~chrke55/papers/modelsurvey.pdf
  2. ^ Лесли Г. Валиант, «Модель моста для параллельных вычислений», Сообщения ACM, том 33, выпуск 8, август 1990 г., страницы 103–111.
  3. ^ Джон Э. Сэвидж, Модели вычислений: исследование мощности вычислений, 2008 г., глава 7 (Параллельные вычисления), http://cs.brown.edu/~jes/book/ В архиве 2016-11-05 в Wayback Machine
  4. ^ Ян Фостер, «Проектирование и создание параллельных программ», 1995, раздел 1.3, «Модель параллельного программирования», http://www.mcs.anl.gov/~itf/dbpp/text/node9.html
  5. ^ Блэз Барни, Введение в параллельные вычисления, «Модели», 2015 г., Ливерморская национальная лаборатория Лоуренса,https://computing.llnl.gov/tutorials/parallel_comp/#Models
  6. ^ Хаммонд, Кевин. Параллельное функциональное программирование: введение. В Международном симпозиуме по параллельным символьным вычислениям, стр. 46. ​​1994.
  7. ^ Макберни, Д. Л. и М. Ронан Сон. «Транспьютерные эксперименты с архитектурой ZAPP». PARLE Параллельные архитектуры и языки Европа. Springer Berlin Heidelberg, 1987 год.
  8. ^ Ян Фостер, «Проектирование и создание параллельных программ», 1995 г., раздел 2.2, «Разбиение на разделы», http://www.mcs.anl.gov/~itf/dbpp/text/node16.html
  9. ^ Блэз Барни, Введение в параллельные вычисления, «Разделение», 2015, Ливерморская национальная лаборатория Лоуренса, https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning
  10. ^ Скилликорн, Дэвид Б. и Доменико Талия, Модели и языки для параллельных вычислений, ACM Computing Surveys, 30,2 123–169 (1998), https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf

дальнейшее чтение

  • Блэз Барни, Введение в параллельные вычисления, Ливерморская национальная лаборатория Лоуренса
  • Мюррей И. Коул., Алгоритмические скелеты: структурированное управление параллельными вычислениями (PDF), Университет Глазго
  • Дж. Дарлинтон; М. Ганем; Х. В. То (1993), «Структурированное параллельное программирование», В моделях программирования для массивно параллельных компьютеров. Пресса IEEE Computer Society: 160–169, Дои:10.1109 / PMMP.1993.315543, ISBN  0-8186-4900-3, S2CID  15265646
  • Ян Фостер, Проектирование и создание параллельных программ, Аргоннская национальная лаборатория