ПАРАЛЛЕ́ЛЬНОЕ ПРОГРАММИ́РОВАНИЕ
-
Рубрика: Технологии и техника
-
Скопировать библиографическую ссылку:
ПАРАЛЛЕ́ЛЬНОЕ ПРОГРАММИ́РОВАНИЕ, разработка программного обеспечения, которое выполняет значит. часть вычислений одновременно (параллельно). Цели П. п.: решение больших задач с объёмом данных, превосходящим возможности однопроцессорной вычислит. системы; увеличение эффективности программ за счёт параллельного выполнения как можно большего числа операций. Возможность П. п. обусловлена тем, что большие задачи часто возможно разделить на неск. меньших подзадач, которые могут выполняться одновременно. В зависимости от того, как часто подзадачи должны синхронизироваться или взаимодействовать между собой, различают мелкозернистый (fine-grained) и крупнозернистый (coarse-grained) параллелизм программных приложений. В первом случае подзадачи взаимодействуют очень часто (много раз в секунду), во втором – значительно реже (в идеальном случае подзадачи не взаимодействуют вовсе либо взаимодействие происходит крайне редко, напр. в начале и в конце работы).
Деление на подзадачи определяет виды параллелизма, используемые в компьютерной программе. Параллелизм уровня инструкций основан на том факте, что совр. процессоры имеют неск. функциональных устройств конвейерной структуры. Поток инструкций в программе переупорядочивается таким образом, чтобы как можно большее их число выполнялось параллельно; количество одновременно выполняемых инструкций зависит от набора функциональных устройств, длины конвейера и зависимостей по данным между инструкциями (зависимость возникает, когда результат одной инструкции является операндом другой; в этом случае вторую инструкцию нельзя выполнять до завершения первой). Параллелизм данных связан с циклами программы, в которых обрабатываются массивы; распределение данных по узлам параллельной системы возможно при отсутствии зависимостей между итерациями цикла. Параллелизм уровня задач возникает, когда программа выполняет существенно различающиеся вычисления над одними и теми же либо над разл. наборами данных.
Параллелизм одного потока инструкций реализуется в суперскалярных (см. в ст. Микропроцессор) и конвейерных процессорах, а также в машинах с длинным командным словом (very long instruction word – VLIW). Многоядерные процессоры выполняют параллельно инструкции из нескольких потоков, именуемых нитями (thread). Симметричные мультипроцессоры (symmetric multiprocessor – SMP) с общей памятью реализуют многопоточные вычисления и параллелизм данных; для этих систем возможно также П. п. уровня задач. Мультипроцессорные системы с распределённой памятью – массивно-параллельные системы (massive parallel processor – MPP) и кластеры способны выполнять программы как с параллелизмом данных, так и задач. Взаимодействие процессов параллельной программы в случае распределённой памяти осуществляется посредством обмена сообщениями. Механизм распределённой общей памяти (distributed shared memory) и виртуализация общей памяти позволяют скрыть механизм передачи сообщений от программиста и делают в ряде случаев П. п. для систем с распределённой памятью более простым. Ряд задач П. п. решается с использованием специализир. параллельных систем, напр. векторных процессоров, систем, построенных на основе графич. процессоров (graphics processing units – GPU) или программируемых пользователем вентильных матриц (field-programmable gate array – FPGA).
Различают явный и неявный подходы к П. п. В первом случае данные и вычисления распределяются программистом по узлам параллельной системы явно при создании кода приложения. При неявном подходе автоматич. распределение данных и вычислений является задачей системы программирования. П. п. уровня инструкций основано на неявном подходе с использованием распараллеливающих компиляторов. Многопоточное П. п. для SMP-систем использует оба подхода – автоматич. распараллеливание приложений и явное П. п. Для компьютеров с распределённой памятью используется явный подход; автоматич. распараллеливание программ для MPP ограничено эксперим. проектами.
Инструментальные средства П. п. включают в себя библиотеки программ (POSIX Threads, OpenMP, MPI), программы отладчики и профилировщики (используемые для оценки времени выполнения разл. частей программы). Последние применяются не только для устранения дефектов, но и для достижения должной эффективности работы параллельной программы. Высокоуровневые языки П. п. (High Performance Fortran, Occam и др.) ныне практически не используются, поскольку не могут обеспечить должного уровня эффективности (реальное время счёта программы в разы больше возможного для данного алгоритма на данной параллельной системе). Для П. п. специализир. систем, построенных на основе GPU, используют специализир. программные средства (CUDA, OpenCL). Ряд хорошо распределяемых задач с очень большими объёмами данных решается на кластерах с помощью реализаций фреймворка MapReduce (технологии компании «Google» для быстрой обработки больших объёмов данных, поддерживающей обычные для параллельных алгоритмов этапы – распределение исходных данных по процессорам и сбор результатов после счёта).
П. п. используется в таких областях, как газовая динамика, ядерная физика, молекулярная биология, гидрометеорология, геологоразведка, автоматизир. проектирование, криптография, прогнозирование бизнес-процессов и др. Посредством П. п. решаются задачи линейной алгебры, комбинаторной логики, спектральные методы (быстрое преобразование Фурье), метод сеток (метод конечных элементов), метод Монте-Карло, обход графов и сортировка, динамич. программирование, метод ветвей и границ и др.