Параллельная обработка данных
Паралле́льная обрабо́тка да́нных, объединяет два вида обработки данных: параллельную и конвейерную. В отличие от последовательной обработки, при которой все операции выполняются строго одна после другой, параллелизм и конвейерность предполагают возможность совмещения во времени выполнения операций целиком или каких-либо их частей. Устройства, выполняющие операции, работают независимо друг от друга при параллельной обработке. В случае конвейерной обработки все ступени конвейера работают одновременно, но обработка данных на разных ступенях идёт с перекрытием во времени, когда результаты промежуточной обработки последовательно передаются от одной ступени конвейера к другой.
Пусть необходимо выполнить поэлементное сложение двух векторов (массивов): состоящих из ста элементов каждый.
Последовательная обработка данных предполагает, что есть функциональное устройство, выполняющее необходимую операцию, причём устройство не воспринимает новые аргументы, пока не будет полностью выполнена текущая операция, и лишь после её завершения устройство может перейти к обработке аргументов новой операции. Предположим, последовательное устройство выполняет одну операцию сложения за 5 тактов, тогда цикл последовательной обработки будет выглядеть так, как показано на рис. 1.
На 1-м такте устройство начинает выполнение операции что занимает 5 тактов. В промежуток времени с 1-го по 5-й такт включительно данное последовательное устройство не выполняет никакой другой работы, кроме операции На 6-м такте данное устройство выдаёт результат этой операции, освобождается от её выполнения, переходит к выполнению операции и т. д. до обработки всех элементов векторов. При условии подачи аргументов без задержки устройство выдаёт результаты с частотой один результат в 5 тактов, а вся операция сложения двух векторов исходного примера будет выполнена за 500 тактов.
Параллельная обработка данных предполагает, что есть несколько функциональных устройств, работающих одновременно и выполняющих операции независимо от других. Пусть для такой же операции сложения двух векторов теперь есть два одинаковых параллельно работающих последовательных устройства, каждое из которых выполняет операцию сложения за 5 тактов, тогда цикл параллельной обработки будет выглядеть так, как показано на рис. 2.
На 1-м такте одно устройство начинает выполнение операции а другое устройство одновременно начинает выполнение операции Обработка первых двух элементов векторов занимает 5 тактов, после чего оба устройства на 6-м такте берут в обработку две операции и и т. д. При условии подачи аргументов на устройства без задержки вся система из двух устройств выдаёт результаты с частотой 2 результата в 5 тактов, а вся операция сложения двух векторов будет выполнена за 250 тактов. Если в системе в таком же режиме будут параллельно работать десять аналогичных устройств, то вся операция сложения таких же двух векторов выполнится уже не за 500, как было в случае последовательной обработки, а в десять раз быстрее, т. е. за 50 тактов. В общем случае, чем больше параллельно работающих устройств, тем быстрее можно выполнить операцию (рассматривается идеальная схема, при которой нет никаких задержек при чтении/записи данных, не возникает накладных расходов, все аргументы подаются на устройства без задержек, что чаще всего отличается от ситуации в реальности).
Конвейерная обработка данных предполагает, что процесс обработки разбит на несколько этапов, каждый из которых выполняется в строгом порядке один после другого. Отдельные этапы обработки называются ступенями конвейера, а общее число этапов – длиной конвейера. Данные поступают на одну ступень конвейера, обрабатываются, затем передаются на последующую ступень, причём первая ступень может начинать одновременную обработку других данных. Многие операции допускают деление на несколько этапов и обработку данных в конвейерном режиме. Например, для сложения двух действительных чисел, представленных в форме с плавающей запятой, подобными этапами могут быть: сравнение порядков этих чисел, выравнивание их мантисс, сложение мантисс, нормализация и др. (См. также Компьютерная арифметика).
Пусть имеется конвейерное устройство сложения, состоящее из 5 ступеней, причём каждая ступень срабатывает за 1 такт. Цикл конвейерной обработки показан на рис. 3.
На 1-м такте первая пара аргументов поступает на 1-ю ступень, обработка занимает 1 такт, после чего на 2-м такте промежуточные результаты обработки первой пары передаются на 2-ю ступень, а на 1-ю ступень можно подавать вторую пару аргументов которая на 2-м такте будет обрабатываться одновременно с обработкой промежуточных результатов сложения 2-й ступенью. На 3-м такте промежуточные результаты сложения передаются со 2-й ступени на 3-ю, промежуточные результаты сложения передаются с 1-й ступени на 2-ю, а на 1-ю ступень подаются аргументы и т. д. Данные перемещаются со ступени на последующую ступень каждый такт. За 5 тактов пройдёт полная обработка первой пары аргументов, и результат выполнения операции появится на выходе подобного конвейерного устройства. Если аргументы на вход устройства подавались каждый такт, то после заполнения конвейера и результаты на выходе устройства будут появляться каждый такт. Задача сложения двух векторов из ста элементов на таком конвейерном устройстве будет выполнена за 104 такта: 5 тактов идёт на заполнение конвейера и обработку первой пары элементов векторов, после чего результаты суммирования оставшихся девяносто девяти пар элементов векторов будут появляться на выходе устройства каждый такт, что займёт ещё 99 тактов.
Устройства, работающие в т. н. режиме зацепления, образуют макроконвейер, дополнительно увеличивая скорость обработки данных (рис. 4).
На практике оба вида параллельной обработки данных используются очень часто: либо самостоятельно, либо комбинируются и используются одновременно. В архитектуре компьютера CDC 7600 было восемь независимых конвейерных функциональных устройств, в векторно-конвейерных суперкомпьютерах Cray (например, Cray-1, Cray Y-MP, Cray C90/T90) все функциональные устройства были независимыми, конвейерными и могли работать в режиме зацепления. В структуре ЭВМ БЭСМ-6 впервые в отечественной практике был широко использован принцип совмещения выполнения команд: до четырнадцати одноадресных машинных команд могли находиться на разных стадиях выполнения. Этот принцип, названный главным конструктором БЭСМ-6 академиком С. А. Лебедевым принципом «водопровода», стал впоследствии широко использоваться для повышения производительности универсальных ЭВМ, получив в современной терминологии название «конвейер команд». Все современные процессоры и вычислительные системы используют параллельную обработку данных в качестве фундаментального принципа организации своей работы, начиная от разрядно-параллельной памяти, разрядно-параллельной арифметики, конвейерного выполнения команд и операций до параллельности на уровне ядер, процессоров, узлов кластера или компьютеров в распределённых вычислительных средах.