language-agnostic - computing - parallel architectures



В чем разница между параллельным программированием и параллельным программированием? (10)

В чем разница между параллельным программированием и параллельным программированием? Я спросил у Google, но не нашел ничего, что помогло мне понять эту разницу. Не могли бы вы привести мне пример для обоих?

На данный момент я нашел это объяснение: http://www.linux-mag.com/id/7411 - но «параллелизм - это свойство программы», а «параллельное выполнение - свойство машины» для меня не достаточно - Я все еще не могу сказать, что к чему.


Answer #1

В программировании параллелизм представляет собой состав независимо исполняемых процессов, а параллелизм - одновременное выполнение (возможно связанных) вычислений.
- Эндрю Герранд -

А также

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

Параллельность - это не параллельность, хотя она позволяет параллелизм. Если у вас только один процессор, ваша программа все еще может быть параллельной, но она не может быть параллельной. С другой стороны, хорошо написанная параллельная программа может работать эффективно параллельно на мультипроцессоре. Это свойство может быть важно ...
- Роб Пайк -

Чтобы понять разницу, я настоятельно рекомендую посмотреть видеоролик Роб Пайка (одного из авторов Голанг). Параллельность - параллелизм


Answer #2
  • Concurrent programming в общем смысле относится к средам, в которых задачи, которые мы определяем, могут происходить в любом порядке. Одна задача может возникать до или после другой, и одновременно выполнять некоторые или все задачи.

  • Parallel programming предназначено специально для одновременного выполнения параллельных задач на разных процессорах. Таким образом, все параллельное программирование является параллельным, но не все параллельное программирование является параллельным.

Источник: программирование PThreads - стандарт POSIX для лучшей многопроцессорности, Buttlar, Farrell, Nichols



Answer #4

Если вы программируете использование потоков (параллельное программирование), это не обязательно будет выполняться как таковое (параллельное выполнение), так как оно зависит от того, может ли машина обрабатывать несколько потоков.

Вот наглядный пример. Нитки на безпоточной машине:

        --  --  --
     /              \
>---- --  --  --  -- ---->>

Нитки на резьбовой машине:

     ------
    /      \
>-------------->>

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


Answer #5

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

Параллельное программирование касается операций, которые перекрываются для конкретной цели повышения пропускной способности. Трудности параллельного программирования уклоняются от детерминированности потока управления. Как правило, программы порождают множество дочерних задач, которые выполняются параллельно, и родительская задача выполняется только после завершения каждой подзадачи. Это облегчает отладку параллельных программ. Трудной частью параллельного программирования является оптимизация производительности по таким вопросам, как гранулярность и связь. Последнее по-прежнему является проблемой в контексте многоядерных процессоров, поскольку существует значительная стоимость, связанная с переносом данных из одного кеша в другой. Плотное матрично-матричное умножение является педагогическим примером параллельного программирования, и его можно эффективно решать с помощью алгоритма разделения и управления Straasen параллельно и параллельно атаковать параллельные задачи. Cilk - это, пожалуй, самый перспективный язык для высокопроизводительного параллельного программирования на компьютерах с общей памятью (в том числе многоядерных).


Answer #6

Хотя нет полного согласия в отношении различия между терминами, параллельными и параллельными , многие авторы делают следующие различия:

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

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

Источник : введение в параллельное программирование, Питер Пачеко


Answer #7

Я нашел этот контент в каком-то блоге. Думал, что это полезно и актуально.

Параллелизм и параллелизм - это не одно и то же. Две задачи T1 и T2 являются параллельными, если порядок, в котором выполняются две задачи во времени, не предопределен,

T1 может быть выполнен и закончен до того, как T2, T2 могут быть выполнены и закончены до того, как T1, T1 и T2 могут выполняться одновременно в одном и том же экземпляре времени (параллелизм), T1 и T2 могут быть выполнены альтернативно, ... Если два параллельных потока запланированы ОС для работы на одном одноядерном процессоре без CMT без SMT, вы можете получить параллелизм, но не параллелизм. Параллелизм возможен на многоядерных, многопроцессорных или распределенных системах.

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

Источник: https://blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming


Answer #8

Я понял разницу:

1) Параллельно - работает в тандеме с использованием общих ресурсов 2) Параллельно - работает бок о бок с использованием разных ресурсов

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


Answer #9

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

Однако параллельное программирование состоит в том, что код выполняется разными процессами / потоками, которые совместно используют переменные и такие, поэтому при параллельном программировании мы должны установить какое-то правило, чтобы решить, какой процесс / поток выполняется первым, мы хотим этого, чтобы мы могли быть уверены, что быть последовательностью и что мы с уверенностью можем узнать, что произойдет. Если нет контроля и все потоки вычисляются в одно и то же время и хранят вещи на одних и тех же переменных, как мы знаем, чего ожидать в конце? Возможно, поток быстрее, чем другой, возможно, один из потоков даже остановился посреди его выполнения, а другой продолжал разное вычисление с поврежденной (еще не полностью вычисленной) переменной, возможности бесконечны. Именно в этих ситуациях мы обычно используем параллельное программирование вместо параллельного.






concurrency