stringtranslate.com

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

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

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

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

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

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

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

Общая память

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

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

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

Разделенное глобальное адресное пространство

Модели Partitioned Global Address Space (PGAS) обеспечивают золотую середину между общей памятью и передачей сообщений. PGAS обеспечивает абстракцию адресного пространства глобальной памяти, которая логически разделена, где часть является локальной для каждого процесса. Параллельные процессы взаимодействуют путем асинхронного выполнения операций (например, чтения и записи) в глобальном адресном пространстве, способом, напоминающим модели общей памяти. Однако, семантически разделяя глобальное адресное пространство на части с привязкой к определенному процессу, они позволяют программистам использовать локальность ссылок и обеспечивают эффективную реализацию на параллельных компьютерах с распределенной памятью . PGAS предлагается многими языками и библиотеками параллельного программирования, такими как Fortran 2008 , Chapel , UPC++ и SHMEM .

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

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

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

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

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

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

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

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

Параллелизм потока

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

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

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

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

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

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

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

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

Ссылки

  1. ^ Скилликорн, Дэвид Б., «Модели для практических параллельных вычислений», Международный журнал параллельного программирования, 20.2 133–158 (1991), https://www.ida.liu.se/~chrke55/papers/modelsurvey.pdf
  2. Лесли Г. Валиант, «Модель моста для параллельных вычислений», Communications of the ACM, том 33, выпуск 8, август 1990 г., страницы 103–111.
  3. ^ Джон Э. Сэвидж, Модели вычислений: исследование мощности вычислений, 2008, Глава 7 (Параллельные вычисления), http://cs.brown.edu/~jes/book/ Архивировано 05.11.2016 на Wayback Machine
  4. ^ "1.3 Модель параллельного программирования". www.mcs.anl.gov . Получено 2024-03-21 .
  5. ^ ab "Введение в параллельные вычисления Учебное пособие | HPC @ LLNL". hpc.llnl.gov . Получено 21.03.2024 .
  6. ^ Хаммонд, Кевин. Параллельное функциональное программирование: Введение. В Международном симпозиуме по параллельным символьным вычислениям, стр. 46. 1994.
  7. ^ Макберни, Д. Л. и М. Ронан Слип. «Эксперименты на основе транспьютера с архитектурой ZAPP». PARLE Parallel Architectures and Languages ​​Europe. Springer Berlin Heidelberg, 1987.
  8. ^ "2.2 Разделение". www.mcs.anl.gov . Получено 2024-03-21 .
  9. ^ Скилликорн, Дэвид Б. и Доменико Талия, Модели и языки для параллельных вычислений, ACM Computing Surveys, 30.2 123–169 (1998), https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf

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