Параллельная обработка информации

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

Во всем многообразии способов организации параллельной обработки можно выделить четыре основных направления:

1) совмещение во времени различных этапов разных задач;

2) одновременное решение различных задач или частей одной задачи;

3) конвейерная обработка информации.

4) параллелизм уровня команд (ILP)

Первый путь — совмещение во времени этапов решения разных задач — это мультипрограммная обработка информации. Мультипрограммная обработка возможна даже в однопроцессорной ЭВМ и широко используется в современных системах обработки данных.

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

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

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

— ни одна из входных для ветви программы величин не является выходной величиной другой программы (отсутствие функциональных связей); для обеих ветвей программы не должна производиться запись в одни и те же ячейки памяти (отсутствие связи по использованию одних и тех же полей оперативной памяти);

— условия выполнения одной ветви не зависят от результатов или признаков, полученных при выполнении другой ветви (независимость по управлению);

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

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

Параллелизм объектов или данных имеет место тогда, когда по одной и той же (или почти по одной и той же) программе должна обрабатываться некоторая совокупность данных, поступающих в систему одновременно. Это могут быть, например, задачи обработки сигналов от радиолокационной станции: все сигналы обрабатываются по одной и той же программе. Другой пример — обработка информации от датчиков, измеряющих одновременно один и тот же параметр и установленных на нескольких однотипных объектах. Это могут быть и чисто математические задачи, например задачи векторной алгебры — операции над векторами и матрицами, характеризующиеся некоторой совокупностью чисел. Решение задачи при этом в значительной степени сводится к выполнению одинаковых операций над парами чисел двух аналогичных объектов. Так, например, сложение двух матриц размерностью заключается в сложении соответствующих элементов этих матриц: A+B=[aik]+[bik]=[aik+bik]. При этом операция сложения должна быть проведена над т´ п парами чисел. Произведение матрицы размерностью т´ п на скаляр сводится к выполнению т´ п умножений элементов матрицы на скаляр: aА = a[aik] = [aaik] и т. д. Очевидно, все эти операции могут выполняться параллельно и независимо друг от друга несколькими обрабатывающими устройствами.

Третий путь параллельной обработки информации — конвейерная обработка — может быть реализован в системе и с одним процессором, разделенным на некоторое число последовательно включенных операционных блоков, каждый из которых специализирован на выполнении строго определенной части операции. При этом процессор работает таким образом: когда i-й операционный блок выполняет i-ю часть j-и операции, (i—1)-й операционный блок выполняет (i—1)-ю часть (j+1)-й операции,

Параллельная обработка информации

Этап
СП а1b1 а2b2 a3b3 а4b4 а5b5
ВП а1b1 a2b2 a3b3 а4b4 а5b5
СМ а1b1 a2b2 a3b3 а4b4 а5b5
HP c1 с2 c3 c4 c5

Рис. 1. Структурная схема и временная диаграмма конвейера операции.

а (i+l)-й операционный блок выполняет (i+1)-ю часть (j—1)-й операции. В результате образуется своего рода конвейер обработки, который хорошо может быть проиллюстрирован следующим простым примером.

Операцию сложения двух чисел с плавающей запятой А´2х+B´2y=C´2xvyможно разделить на четыре последовательно исполняемых этапа, или шага: сравнение порядков (СП); выравнивание порядков — сдвиг мантиссы с меньшим порядком для выравнивания с мантиссой с большим порядком (ВП); сложение мантисс (СМ); нормализация результата (HP). В соответствии с этим в составе процессора предусмотрены четыре операционных блока, соединенных последовательно и реализующих четыре вышеперечисленных шага операции сложения: блоки СП, ВП, СМ и HP (рис. 1). Примем, что время выполнения каждого шага равно соответственно 60, 100, 140, 100 нс. Таким образом, операция сложения будет выполняться последовательностью операционных блоков за время 400 нс.

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

Выполним эти операции на процессоре, организовав обработку данных следующим образом. После того как блок СП выполнит свою часть операции над первой парой операндов, он передает результат в следующий блок — ВП, а в блок СП будет загружена очередная пара операндов. На следующем шаге блок ВП передаст результат выполнения своей части операции в блок СМ и начнет обрабатывать вторую пару операндов и т. д. Для того чтобы не создавались очереди операндов на обработку, примем, что время выполнения каждого из этих этапов одинаково и равно максимальному значению т=140 нс. В результате получим конвейер из четырех операционных блоков. Первый результат на выходе конвейера будет получен через 140 Х 4 = 560 нс, т. е. несколько позже, чем если бы время выполнения всех этапов не выравнивалось. Однако все последующие результаты будут выдаваться через каждые 140 нс.

На рис. 1 представлена временная диаграмма процесса. Общее время сложения двух векторов с помощью описанного конвейера Тк= (п+т— 1)т, где т—число операционных блоков. Если бы конвейер не использовался, то это время было бы равно T0 = n S ti, где ti —время выполнения i-ro этапа обработки. Если применить конвейерную обработку к векторам, состоящим из 25 элементов, то получим Тк= (25+4—1) • 140=3920 нс, T0 =25 • 400=10000 нс.

Нетрудно заметить, что чем длиннее цепочка данных и чем на большее число этапов (а следовательно, и операционных блоков) разбивается операция (при той же длительности ее выполнения), тем больший эффект от использования конвейера может быть получен.

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

Таким образом, если в конвейере арифметических операций происходит параллельная обработка т пар операндов, то в конвейере команд происходит совмещение во время выполнения S операций (S— число этапов, на которое разбито выполнение команды), что позволяет существенно увеличить производительность такой конвейерной системы.

Разумеется, в вычислительных системах можно одновременно использовать и конвейер команд, и конвейер арифметических операций, и даже несколько параллельно работающих конвейеров команд и арифметических операций. В последнем случае может быть получена очень высокая производительность системы.

Четвертое направление развития параллельной обработки — параллелизм уровня команд — эффективно реализуется суперскалярными процессорами, подробно рассмотренными в другом вопросе.

К понятию уровня параллелизма тесно примыкает понятие гранулярности. Это мера отношения объема вычислений, выполненных в параллельной задаче, к объему коммуникаций (для обмена сообщениями). Степень гранулярности варьируется от мелкозернистой до крупнозернистой. Определим понятия крупнозернистого (coarse grained), среднезернистого (medium grained) и мелкозернистого (fine grained) параллелизма.

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

Среднезернистый параллелизм: единицами распараллеливания являются вызываемые процедуры, включающие в себя сотни команд. Обычно организуется как программистом, так и компилятором.

Мелкозернистый параллелизм: каждое параллельное вычисление достаточно мало и элементарно, составляется из десятков команд. Обычно распараллеливаемыми единицами являются элементы выражения или отдельные итерации цикла, имеющие небольшие зависимости по данным. Сам термин «мелкозернистый параллелизм» говорит о простоте и быстроте любого вычислительного действия. Характерная особенность мелкозернистого параллелизма заключается в приблизительном равенстве интенсивности вычислений и обмена данными. Этот уровень параллелизма часто используется распараллеливающим (векторизирующим) компилятором.

Эффективное параллельное исполнение требует искусного баланса между степенью гранулярности программ и величиной коммуникационной задержки, возникающей между разными гранулами. В частности, если коммуникационная задержка минимальна, то наилучшую производительность обещает мелкоструктурное разбиение программы. Это тот случай, когда действует параллелизм данных. Если коммуникационная задержка велика (как в слабосвязанных системах), предпочтительней крупнозернистое разбиение программ.

ПРЕЗЕНТАЦИЯ MORTAL KOMBAT 11: ВСЯ ИНФОРМАЦИЯ + МНЕНИЕ [MK11]


Похожие статьи.

Понравилась статья? Поделиться с друзьями: