В чем разница между терминами параллельного и параллельного выполнения? Я никогда не мог понять разницу.
Тег определяет параллелизм как способ запуска двух процессов одновременно, но я думал, что параллелизм - это одно и то же, то есть: отдельные потоки или процессы, которые потенциально могут выполняться на отдельных процессорах.
Кроме того, если мы рассмотрим что-то вроде асинхронного ввода-вывода, имеем ли мы дело с параллелизмом или параллелизмом?
Ответы:
Параллелизм и параллелизм - это две взаимосвязанные, но разные концепции.
Параллелизм означает, по сути, что задача A и задача B должны выполняться независимо друг от друга, и A запускается, а затем B запускается до завершения A.
Существуют различные способы достижения параллелизма. Одним из них является параллелизм - наличие нескольких процессоров, работающих над разными задачами одновременно. Но это не единственный способ. Другой способ заключается в переключении задач, которое работает следующим образом: задача A работает до определенной точки, затем процессор, работающий над ней, останавливается и переключается на задачу B, работает над ней некоторое время, а затем переключается обратно на задачу A. Если временные интервалы достаточно малы, пользователю может показаться, что обе вещи выполняются параллельно, даже если они на самом деле обрабатываются последовательно с помощью многозадачного процессора.
источник
Эти два понятия связаны, но различны.
Параллельность означает, что два или более вычислений происходят в одном и том же временном интервале, и между ними обычно существует какая-то зависимость.
Параллелизм означает, что два или более вычислений происходят одновременно.
Проще говоря, параллелизм описывает проблему (две вещи должны происходить вместе), в то время как параллелизм описывает решение (два ядра процессора используются для одновременного выполнения двух вещей).
Параллелизм - это один из способов реализации параллелизма, но он не единственный. Другое популярное решение - чередующаяся обработка (или сопрограммы): разбить обе задачи на атомарные этапы и переключаться между ними.
Безусловно, самый известный пример непараллельного параллелизма - это то, как работает JavaScript: существует только один поток, и любой асинхронный обратный вызов должен ждать до завершения выполнения предыдущего фрагмента кода. Это важно знать, потому что это гарантирует, что любая функция, которую вы пишете, является атомарной - никакой обратный вызов не может прервать ее, пока она не вернется. Но это также означает, что «занятые циклы» не будут работать - вы не можете установить тайм-аут, а затем цикл, пока он не сработает, потому что цикл будет препятствовать выполнению обратного вызова тайм-аута.
источник
Concurrency means that two or more calculations happen within the same time frame, and there is usually some sort of dependency between them.
но пользователь, который написал этот принятый ответ, говоритConcurrency means, essentially, that task A and task B both need to happen independently of each other
. Так какой вывод?Я считаю, что этот ответ является более правильным, чем существующие ответы, и их редактирование изменило бы их суть. Я пытался ссылаться на различные источники или страницы википедии, чтобы другие могли подтвердить правильность.
Параллельность: свойство системы, позволяющее выполнять элементы программы, алгоритма или задачи не по порядку или по частям, не влияя на конечный результат 1 2 .
Простой пример этого - последовательные добавления:
Из-за коммутативного свойства сложения их порядок может быть переставлен без ущерба для корректности; следующая договоренность приведет к тому же ответу:
Здесь я сгруппировал числа в пары, которые составят 10, чтобы мне было легче найти правильный ответ в моей голове.
Параллельные вычисления: тип вычислений, при котором множество вычислений или выполнение процессов выполняются одновременно 3 4 . Таким образом, параллельные вычисления используют свойство параллелизма для одновременного выполнения нескольких модулей программы, алгоритма или задачи.
Продолжая пример последовательных дополнений, мы можем выполнить разные части суммы параллельно:
Затем в конце мы суммируем результаты от каждого работника, чтобы получить
10 + 35 = 45
.Опять же, этот параллелизм был возможен только потому, что последовательные добавления имеют свойство параллелизма.
Параллельность может быть усилена не только параллелизмом. Подумайте об упреждении в одноядерной системе: в течение некоторого времени система может прогрессировать в нескольких запущенных процессах без завершения какого-либо из них. Действительно, ваш пример асинхронного ввода-вывода является распространенным примером параллелизма, который не требует параллелизма.
неразбериха
Вышеуказанное относительно просто. Я подозреваю, что люди путаются, потому что определения словаря не обязательно соответствуют тому, что было изложено выше:
Словарь определяет «параллелизм» как факт возникновения, в то время как определение в вычислительном языке является скрытым свойством программы, свойства или системы. Хотя связаны эти вещи не то же самое.
Личные рекомендации
Я рекомендую использовать термин «параллельный», когда одновременное выполнение гарантировано или ожидается, и использовать термин «параллельный», когда он неопределен или не имеет значения, если будет использоваться одновременное выполнение.
Поэтому я бы описал моделирование реактивного двигателя на нескольких ядрах как параллельное.
Я бы описал Makefiles как пример параллелизма. Makefiles устанавливают зависимости каждой цели. Когда цели зависят от других целей, это создает частичное упорядочение. Когда отношения и рецепты определены всесторонне и правильно, это устанавливает свойство параллелизма: существует частичный порядок, такой, что порядок определенных задач может быть переупорядочен без влияния на результат. Опять же, этот параллелизм может быть использован для одновременного построения нескольких правил, но параллелизм является свойством Makefile независимо от того, используется параллелизм или нет.
источник
Параллельное выполнение - это обобщенная форма параллельного выполнения. Например, параллельную программу также можно назвать параллельной, но обратная неверна.
Подробнее читайте в этой статье « Концепции параллельного программирования».
источник
Параллельная обработка является подмножеством параллельной обработки.
Параллельная обработка описывает две задачи, возникающие асинхронно, то есть порядок выполнения задач не предопределен. Два потока могут работать одновременно на одном и том же ядре процессора путем чередования исполняемых инструкций. Например, поток 1 работает в течение 10 мс, поток 2 работает в течение 10 мс и т. Д.
Параллельная обработка - это тип параллельной обработки, когда более одного набора инструкций выполняется одновременно. Это может быть несколько систем, работающих над общей проблемой, как в распределенных вычислениях, или несколько ядер в одной системе.
источник
Заявление tdammer близко, все остальное не имеет смысла. Он говорит:
«Проще говоря, параллелизм описывает проблему (две вещи должны происходить вместе), а параллелизм описывает решение (два ядра процессора используются для одновременного выполнения двух вещей»)
Давайте просто проанализируем слова.
Текущее означает происходящее сейчас, актуальное, актуальное в данный момент. Против означает против, против, не выравнивая с.
Параллель означает в одном направлении, не пересекаясь, не находясь на пути друг друга.
Таким образом, параллелизм подразумевает конкуренцию за один и тот же ресурс. Параллелизма нет. Параллельные процессы могут использовать один и тот же ресурс, но это не считается проблемой, это не проблема. С параллелизмом, это проблема, которую нужно решать.
источник
Очевидно, что термины используются по-разному в разных культурах.
Я понимаю следующее:
Параллелизм - это способ ускорить обработку. Независимо от того, выполняете ли вы матричное умножение на одном ядре, на нескольких ядрах или даже в графическом процессоре, результат один и тот же (иначе ваша программа не работает). Это не добавляет новых функций к какой-либо программе, только скорость.
В то время как параллелизм - это то, что вы не можете делать последовательно Например, одновременное обслуживание 3 разных веб-страниц для 3 клиентов в ожидании следующего запроса. (Хотя вы можете смоделировать это в некоторой степени посредством чередования, как это было сделано в прошлые дни.) Обратите внимание, что поведение параллельных программ недетерминировано. Например, не ясно, кто из 3 клиентов будет полностью обслужен первым. Вы можете выполнить несколько тестов и каждый раз получать другой результат в отношении порядка, в котором запрос будет завершен. Система времени выполнения должна гарантировать, что а) все клиенты будут обслуживаться и б) в разумные сроки.
Обычно рабочая лошадка параллельных вычислений не знает и не заботится о параллелизме. В то время как параллельные задачи часто явно используют межпроцессное или межпотоковое взаимодействие, такое как блокирование очередей, механизмы синхронизации и блокировки.
источник
На мой взгляд, с точки зрения прикладного программирования нет никакой разницы между этими двумя понятиями, и наличие двух слов вводит в заблуждение ради путаницы. Я думаю, что чередование потоков было реализовано для имитации многоядерной обработки в те времена, когда многоядерность была невозможной. Почему у нас есть слово для этого устаревшего мышления?
Мейсон Уилер и Пингвин дали один и тот же ответ. Одно ядро с переключением задач и / или многоядерностью является параллельным, строго многоядерным = параллельным.
Мое мнение таково, что эти два термина должны быть объединены, и я стараюсь не говорить «одновременно». Я предполагаю, что на уровне программирования ОС это различие важно, но с точки зрения программиста приложений это не имеет большого значения. Я написал mapReduce, Spark, MPI, cuda, openCL и многопоточный c ++, и мне никогда не приходилось останавливаться и думать, выполняется ли задание с чередующимися потоками или с несколькими ядрами.
Например, когда я пишу многопоточный c ++, иногда я не уверен, сколько ядер я получу, хотя есть способы предъявлять требования к количеству ядер, которые вы можете получить, как описано здесь https://stackoverflow.com/questions/2166425/ как структурировать приложение для использования в многоядерном процессоре . В spark я просто отображаю и сокращаю операции и не знаю, как jvm обрабатывает их на аппаратном уровне. На графических процессорах я думаюкаждый поток назначен на свой собственный простой процессор, но я всегда синхронизирую свои потоки везде, где может возникнуть проблема. С помощью MPI связь между машинами указывается явно, но мы можем чередовать функции, выполняющиеся на нескольких машинах, на одном ядре и объединять результаты с помощью соответствующей однопоточной функции. А что если мы используем MPI для координации группы одноядерных машин, каждая из которых имеет многопоточность? Что это меняет? Я бы сказал, нет. Назовите все это «параллельно» и покончите с этим.
источник