Параллелизм подразумевает параллелизм, но не наоборот, верно?

15

Я часто читаю, что параллелизм и параллелизм - это разные вещи. Очень часто ответчики / комментаторы заходят так далеко, что пишут, что это две совершенно разные вещи. Тем не менее, на мой взгляд, они связаны, но я хотел бы получить некоторые разъяснения по этому поводу.

Например, если я работаю на многоядерном процессоре и смогу разделить вычисления на х меньшие вычисления (скажем, с использованием fork / join), каждый из которых работает в своем собственном потоке, у меня будет программа, которая выполняет параллельные вычисления (потому что предположительно, в любой момент времени несколько потоков будут работать на нескольких ядрах) и будут параллельными, не так ли?

Хотя, если я просто использую, скажем, Java и работаю с событиями и перерисовками пользовательского интерфейса в потоке диспетчеризации событий, а также запускаю единственный созданный мной поток, у меня будет программа, которая работает одновременно (поток EDT + GC + мой основной поток и т.д.) но не параллельно.

Я хотел бы знать, правильно ли я понимаю, и если параллелизм (в системе «одноядерный, но многоядерный») всегда подразумевает параллелизм или нет?

Кроме того, многопоточные программы работают на многоядерных процессорах, но где разные потоки выполняют совершенно разные вычисления, считающиеся использующими «параллелизм»?

Седрик Мартин
источник

Ответы:

13

Согласно Википедии :

Параллельные вычисления - это форма вычислений, при которой многие вычисления выполняются одновременно, исходя из того, что большие проблемы часто можно разделить на более мелкие, которые затем решаются одновременно («параллельно»).

То есть параллелизм всегда подразумевает параллелизм.

Кроме того, многопоточные программы работают на многоядерных процессорах, но где разные потоки выполняют совершенно разные вычисления, считающиеся использующими «параллелизм»?

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

Суть параллелизма заключается в том, что несколько потоков (или процессов, или компьютеров) делают что-то одновременно , возможно (но не обязательно), взаимодействуя определенным образом. Википедия снова :

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

Joonas Pulakka
источник
4
Отличный пост. Параллелизм является подмножеством параллелизма.
3
Извините, но этот ответ неверен. Вы можете определенно иметь параллелизм без параллелизма (например, параллелизм на уровне битов), и на самом деле, это две разные концепции. Параллельность - это составление независимых единиц выполнения, тогда как параллелизм - это одновременное выполнение потенциально связанных вычислений.
Кай Селгрен
@KaiSellgren: Пожалуйста, приведите некоторые источники в поддержку вашего заявления.
Joonas Pulakka
Первая вики-цитата просто неверна. К счастью, это было исправлено некоторое время назад, и теперь правильно говорится, что параллелизм не зависит от параллелизма.
Кай Селгрен
Действительно, это то, что в настоящее время говорится в вики ( возможно параллелизм без параллелизма (например, параллелизм на уровне битов) ). Но я не понимаю этого; разве параллелизм на уровне битов не является самой параллельной вещью, которую можно себе представить - чем больше операций выполняется с меньшим количеством команд, то не некоторые ли эти операции выполняются в одной и той же инструкции, то есть одновременно, то есть одновременно?
Joonas Pulakka
3

Код может быть параллельным, но не параллельным.

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

Euphoric
источник
0

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

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

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

user196279
источник