Параллельные вычисления


Параллельные вычисления — это тип вычислений , при котором множество вычислений или процессов выполняются одновременно. [1] Большие проблемы часто можно разделить на более мелкие, которые затем можно решить одновременно. Существует несколько различных форм параллельных вычислений: параллелизм на уровне битов, на уровне инструкций , данных и параллелизм задач . Параллелизм уже давно используется в высокопроизводительных вычислениях , но приобрел более широкий интерес из-за физических ограничений, препятствующих масштабированию частоты . [2]Поскольку потребление энергии (и, следовательно, выделение тепла) компьютерами в последние годы стало проблемой [3] , параллельные вычисления стали доминирующей парадигмой в компьютерной архитектуре , в основном в виде многоядерных процессоров . [4]

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

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

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

Теоретическая верхняя граница ускорения отдельной программы в результате распараллеливания дается законом Амдала .

Традиционно компьютерное программное обеспечение было написано для последовательных вычислений . Для решения задачи алгоритм строится и реализуется в виде последовательного потока инструкций. Эти инструкции выполняются на центральном процессоре одного компьютера. Одновременно может выполняться только одна инструкция — после завершения этой инструкции выполняется следующая. [8]


Графическое представление закона Амдала . Ускорение программы за счет распараллеливания ограничено тем, какая часть программы может быть распараллелена. Например, если 90% программы можно распараллелить, теоретическое максимальное ускорение при использовании параллельных вычислений будет в 10 раз, независимо от того, сколько процессоров используется.
Предположим, что задача состоит из двух независимых частей , А и В. Часть B занимает примерно 25% времени всего вычисления. Очень усердно работая, можно сделать эту часть в 5 раз быстрее, но это лишь немного сократит время всего вычисления. Напротив, может потребоваться выполнить меньше работы, чтобы часть А выполнялась в два раза быстрее. Это сделает вычисления намного быстрее, чем при оптимизации части B , хотя ускорение части B больше в соотношении (в 5 раз против 2 раз).
Графическое представление закона Густафсона
Taiwania 3 of Taiwan , параллельное суперкомпьютерное устройство, которое присоединилось к исследованиям COVID-19 .
Канонический процессор без конвейера . Для выполнения одной инструкции требуется пять тактов, поэтому процессор может выдавать субскалярную производительность ( IPC = 0,2 < 1 ).
Канонический пятистадийный конвейерный процессор. В лучшем случае для выполнения одной инструкции требуется один такт, и, таким образом, процессор может выдавать скалярную производительность ( IPC = 1 ).
Канонический пятистадийный конвейерный процессор с двумя исполнительными блоками. В лучшем случае для выполнения двух инструкций требуется один такт, и, таким образом, процессор может обеспечить суперскалярную производительность ( IPC = 2 > 1 ).
Логическое представление архитектуры неоднородного доступа к памяти (NUMA). Процессоры в одном каталоге могут получить доступ к памяти этого каталога с меньшей задержкой, чем они могут получить доступ к памяти в памяти другого каталога.
Скопление Беовульфа
Корпус массивно-параллельного суперкомпьютера IBM Blue Gene/L .
Карта Nvidia Tesla GPGPU
Cray-1 — векторный процессор.
ILLIAC IV , «самый печально известный из суперкомпьютеров» [64]