Список моделей параллелизма - PullRequest
23 голосов
/ 11 ноября 2010

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

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

Я искал список или вики и не смог найти ни одного хорошего (многие не перечислили 3, о котором я упоминал выше), и многие результаты дали мне сложное описание, объясняющее, как оно работает, а не то, что оно делает или как оно должно быть б.

Что такое модели параллелизма и каково простое описание того, что они делают? Один за ответ.

Ответы [ 11 ]

8 голосов
/ 22 ноября 2010

Модель актера

Я слышал о передаче сообщений, когда нет общей памяти.

Речь идет об актерах в стиле Эрланга?

Scala использует эту идею в своей структуре Actors (таким образом, в Scala это не часть языка, а просто библиотека), и это выглядит довольно привлекательно!

В нескольких словах субъекты - это объекты, которые вообще не имеют общих данных, но могут использовать асинхронные сообщения для взаимодействия. Актеры могут быть расположены на одном или разных хостах и ​​использовать интересную политику обработки ошибок (когда ошибка произошла - актер просто умирает).

Вы должны прочитать больше об этом в документах Erlang и Scala, это действительно простой и прогрессивный подход!

Главы 3, 17, 17.11:

http://www.scala -lang.org / сайты / по умолчанию / файлы / linuxsoft_archives / доку / файлы / ScalaByExample.pdf https://en.wikipedia.org/wiki/Actor_model

6 голосов
/ 23 ноября 2010

Модель COM Threading (параллелизм)

  • Однопоточные апартаменты
  • Многопоточные квартиры
  • Разработка смешанной модели

COM-объекты могут использоваться в нескольких потоках процесса. Условия « Однопоточная квартира * t» (STA) и «* Многопоточная квартира » (MTA) используется для создания концептуальной основы для описания отношений между объектами и потоками, параллельные отношения между объекты, средства, с помощью которых метод звонки доставляются на объект, и правила прохождения интерфейса указатели среди потоков. Компоненты и их клиенты выбирают между следующие две модели квартир в настоящее время поддерживается COM:

Модель однопоточной квартиры (STA): Один или несколько потоков в процессе использования COM и вызовы COM объектов синхронизируется с помощью COM. Интерфейсы распределяются между потоками. вырожденный корпус однопоточный модель квартиры, где только одна нить в данном процессе использует COM, называется однопоточная модель. предыдущий Информация Microsoft и документация иногда ссылалась к модели STA просто как "модель квартиры" Многопоточная Модель квартиры (MTA): одна или несколько потоки используют COM и вызовы COM объекты, связанные с MTA, сделано непосредственно всеми нитями связанные с MTA без каких-либо вставка системного кода между звонящий и объект. Потому что несколько одновременные клиенты могут звонить объекты более или менее одновременно (одновременно на многопроцессорном системы), объекты должны синхронизироваться их внутреннее состояние само по себе. Интерфейсы не маршалируются между потоки. Предыдущий Microsoft информация и документация иногда называют эту модель «модель с бесплатной резьбой». Оба Модель STA и модель MTA могут быть используется в том же процессе. Это иногда упоминается как процесс "смешанной модели".


Другие модели по Википедии

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

4 голосов
/ 17 ноября 2010

Есть также карта / уменьшение.

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

Вот как графические процессоры, функциональные языки, такие как LISP / Scheme / APL, и некоторые платформы (Google Map /Уменьшить) обрабатывать параллелизм.

4 голосов
/ 13 ноября 2010

Фьючерсы

Будущее является местозаполнителем для неопределенный результат (одновременный) вычисление. После вычисления дает результат, связанный будущее устраняется глобально заменив его значением результата. Это значение может быть будущим само по себе.

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

Существует четыре вида фьючерсов:

  • параллельные фьючерсы обозначают результат параллельных вычислений,
  • Ленивые фьючерсы обозначают результат вычислений, которые выполняются только по запросу,
  • обещанные фьючерсы означают стоимость, которую обещают доставить позже явным образом,
  • неудачные фьючерсы представляют результат вычислений, которые завершились с исключением.
3 голосов
/ 12 ноября 2010

Программная транзакционная память

В области компьютерных наук, программного обеспечения Транзакционная память (STM) является механизм управления параллелизмом аналогично транзакциям базы данных для контроль доступа к общей памяти в параллельные вычисления. Это альтернатива основанной на блокировке синхронизации. Транзакция в этом контекст это кусок кода, который выполняет серию чтения и записи в общую память. Это читает и записи логически происходят в одном момент времени; промежуточные состояния не видны другим (успешно) сделки. Идея предоставления аппаратная поддержка транзакций возник в 1986 году бумаги и патента Том Найт [1]. Идея была популяризируется Морисом Херлихи и Ж. Элиот Б. Мосс [2]. В 1995 году Нир Шавит и Дэн Туиту расширил эту идею только программная транзакционная память (СТМ) [3]. СТМ недавно был центр интенсивных исследований и поддержки для практической реализации растет.

2 голосов
/ 12 ноября 2010

Сопрограмма

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

1 голос
/ 15 июля 2016

Шаблон прерывателя LMAX сохраняет данные на месте и гарантирует, что только один поток (потребитель или производитель) является владельцем элемента данных (= слот очереди) одновременно.

1 голос
/ 25 марта 2016

Как насчет пространства кортежей ?

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

1 голос
/ 23 ноября 2010

Параллельная машина произвольного доступа (PRAM) полезна для определения сложности / управляемости (подробности см. В хорошей книге ).

О моделях вы также найдете что-то здесь (Блейз Барни)

1 голос
/ 16 ноября 2010

IPC (включая MPI и RMI )

Привет,
на вики-страницах вы можете найти этот MPI (сообщениеПередача интерфейса) - это методы общей методики IPC: http://en.wikipedia.org/wiki/Inter-process_communication
Другой интересный подход - вызов процедуры Remote.Например, RMI в Java позволяет вам сосредоточиться только на предметной области приложения и шаблонах связи.Это параллелизм «прикладного уровня».
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html

Существуют различные шаблоны проектирования / инструменты, доступные для распараллеливания модели совместно используемой памяти.Помимо упомянутого будущего можно также воспользоваться:
1. Шаблон пула потоков - фокусируется на распределении задач между фиксированным числом потоков: http://en.wikipedia.org/wiki/Thread_pool_pattern
2. Шаблон планировщика - контролирует выполнение потоков в соответствии с выбраннымполитика планирования http://en.wikipedia.org/wiki/Scheduler_pattern
3. Шаблон Reactor - для встраивания однопоточного приложения в параллельную среду http://en.wikipedia.org/wiki/Reactor_pattern
4. OpenMP (позволяет распараллеливать часть кода с помощью прагм препроцессора)

С уважением,
Марцин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...