Вертикальный и горизонтальный параллелизм

#parallel-processing #openmp #mpi

#параллельная обработка #openmp #mpi

Вопрос:

Недавно, работая в параллельной области, я узнал, что есть два термина «вертикальный параллелизм» и «горизонтальный параллелизм». Некоторые люди называют openmp (параллелизм с общей памятью) вертикальным, а mpi (параллелизм с распределенной памятью) — горизонтальным параллелизмом. Почему эти термины называются так? Я не понимаю причины. Это просто терминология, чтобы называть их так?

Комментарии:

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

2. Я слышал об этих терминах, но видел, как они использовались только в отношении процессоров. Горизонтальный параллелизм возникает, когда несколько независимых операций выполняются одновременно (например, в процессорах, которые были бы, когда у вас есть несколько функциональных блоков, работающих параллельно). Вертикальный параллелизм — это когда у вас перекрываются разные этапы последовательности операций (например, в процессорах, которые использовали бы конвейерную обработку).

3. Тогда, наверное, я просто всегда слышал более конкретные термины; скажем, ILP или конвейеризация, а не «вертикальный параллелизм» как общий термин. Но по этому показателю OMP, MPI, GPGPU были бы в основном горизонтальными, да? (О, и сделайте свой комментарий ответом, чтобы я мог поддержать его; В любом случае, я кое-что узнал …)

4. спасибо, парень… Возможно, я неправильно расслышал эти термины …<br> комментарии кажутся идеальными… вертикальный параллелизм должен быть на уровне ilp.. в то время как по горизонтали должны быть эти методы … 🙂

5. дал быстрый ответ, но на самом деле этот вопрос относится к programmers SE.

Ответ №1:

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

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

Горизонтальный параллелизм возникает, когда используется одно устройство или выполняется операция над несколькими похожими элементами данных. Это тот вид параллелизма, который возникает, например, при выполнении нескольких потоков над одним и тем же фрагментом кода, но с разными данными.

В мире программного обеспечения интересным примером на самом деле является алгоритм map reduce, который использует оба:

  • горизонтальный параллелизм возникает на этапе отображения, когда данные разделяются и распределяются по нескольким процессорам для обработки,

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

Аналогично, в мире аппаратного обеспечения суперскалярные конвейерные процессоры используют оба варианта, где конвейеризация является частным случаем вертикального распараллеливания (точно так же, как этап map / reduce, но с несколькими дополнительными этапами).

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