Особенно помогает реклама - кубарики с логотипом так нравятся людям.

Основы вычислительных систем Курс лекций начало

 

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

 

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

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

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

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

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

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

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

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

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

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

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

обе ветви должны выполняться по разным блокам программы (программная независимость).

Хорошее представление о параллелизме независимых ветвей дает ярусно-параллельная форма программы, пример которой приведен на рис. 1.1. Программа представлена в виде совокупности ветвей, расположенных в нескольких уровнях – ярусах. Кружками с цифрами внутри обозначены ветви. Длина ветви представляется цифрой, стоящей около кружка. Стрелками показаны входные данные и результаты обработки. Входные данные обозначаются символом х, выходные данные – символом у. Символы х имеют нижние цифровые индексы, означающие номера входных величин; символы у имеют цифровые индексы и внизу и вверху; цифра вверху соответствует номеру ветви, при выполнении которой получен данный результат, а цифра внизу означает порядковый номер результата, полученного при реализации данной ветви программы.

Рис. 1.1.Ярусно-параллельная форма программы

 

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

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

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

 

Рассмотрим три варианта выполнении программы ярусно–параллельной формы (рис. 2.1).

Вариант 1. Процессор 1 выполняет ветви 14–5–9–10–13, процессор 2 – ветви 2–6–3–78–11–1214. При этом процессор 1 затрачивает 260 единиц времени, из которых 55 простаивает, так как не готовы данные для ветви 13. Процессор 2 затрачивает 230 единиц времени.

Вариант 2. Процессор 1 выполняет ветви 1459101113, процессор 2 - ветви 263781214. При этом процессор 1 затрачивает 245 единиц времени, из которых 25 простаивает по той же причине, что и в варианте 1. Процессор 2 затрачивает 215 единиц времени.

Вариант 3. Процессор 1 выполняет ветви 1–4–8–12–11–13, процессор 2 – ветви 2–5–6–3–7–9–10–14. При этом процессор 1 затрачивает 235, а процессор 2 – 205 единиц времени, из которых 5 он простаивает.

Сравнение этих вариантов показывает следующее. Во всех случаях время, через которое двухпроцессорная система выдает результаты , , существенно сокращается: вместо 435 единиц времени результаты выдаются в первом варианте через 260, во втором – через 245 и в третьем – через 235 единиц времени, т. е. в последнем случае время решения задачи уменьшается в 1,85 раза. Выигрыш по времени может существенно колебаться в зависимости от последовательности выполнения ветвей каждым процессором (читатель при желании может построить и другие варианты решения задачи), поэтому процессор должен выбирать новую ветвь с учетом этого обстоятельства. При решении задачи каждый процессор перед началом выполнения очередной ветви должен иметь информацию о готовности данных для этого.

 

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

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

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

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

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

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

 

 б)

Этап

1

2

3

4

5

6

i

n

n+1

n+2

n+3

СП

 

 

 

ВП

 

 

 

СМ

 

 

 

НР

 

 

 

 

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

 

Операцию сложения двух чисел с плавающей запятой   можно разделить на четыре последовательно исполняемых этапа, или шага: сравнение порядков (СП); выравнивание порядков – сдвиг мантиссы с меньшим порядком для выравнивания с мантиссой с большим порядком (ВП); сложение мантисс (СМ); нормализация результата (НР). В соответствии с этим в составе процессора предусмотрены четыре операционных блока, соединенных последовательно и реализующих четыре вышеперечисленных шага операции сложения: блоки СП, ВП, СМ и НР (рис. 1.2, а). Примем, что время выполнения каждого шага равно соответственно 60, 100, 140, 100 нс. Таким образом, операция сложения будет выполняться последовательностью операционных блоков за время 400 нс.

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

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

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

где   – время выполнения i-го этапа обработки. Если применить конвейерную обработку к векторам, состоящим из 25 элементов, то получим ТК= (25 + 4– 1) • 140 = 3920 нc, Т0 = 25 • 400 = 10 000 нс.

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

В приведенном выше примере было рассмотрено конвейерное выполнение арифметических операций, но идея конвейера может быть распространена и на выполнение команд. Надо сказать, что конвейер команд применяется уже давно в обычных ЭВМ. При этом цикл выполнения команды разбивается на ряд этапов, например формирование адреса команды (ФАК), выборка команды из памяти (ВК), расшифровка кода операции (РКО), формирование адреса операнда (ФАО), выборка операнда из памяти (ВО) и, наконец, арифметическая или логическая операция (АЛО). В устройстве управления предусматриваются блоки, которые независимо друг от друга и параллельно могут выполнять указанные этапы. Временная диаграмма показана на рис. 1.3. Для простоты время выполнения каждого этапа принято одинаковым (что, вообще говоря, не обязательно и не всегда делается).

 

Этап

1

2

3

4

5

6

7

8

ФАК

ВК

 

РКО

 

 

ФАО

 

 

 

ВО

 

 

 

 

АЛО

 

 

 

 

 

Рис. 1.3. Временная диаграмма конвейера команд

 

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

К сожалению, выигрыш по производительности в l раз практически невозможен, так как может быть получен только при выполнении программы без условных переходов. Наличие условных переходов сразу нарушает работу конвейера и приводит к «холостым» пробегам конвейера, когда по выработанному в команде Ki признаку результата надо перейти к выполнению не Ki+1команды, а совершенно другой, что вызывает необходимость очистки всех блоков и загрузки их другой операцией. В реальных ЭВМ и системах применяются различные приемы, позволяющие определять признак перехода возможно раньше, однако совсем исключить влияние условных переходов не удается. Тем не менее для определенных задач, где имеют место цепочки команд без таких переходов, выигрыш в производительности конвейерного процессора команд получается значительным. Как и в конвейере арифметических операций, выигрыш в производительности получается тем больше, чем длиннее участки программы без условных переходов и чем больше предусматривается независимость этапов (и, следовательно, блоков устройства управления) при выполнении команды.

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

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

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

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

1.        Системы с одиночным потоком команд и одиночным потоком данных (ОКОД).

2.        Системы с множественным потоком команд и одиночным потоком данных (МКОД).

3.        Системы с одиночным потоком команд и множественным потоком данных (ОКМД). SIMD (Single Instruction Multiple Data - с одним потоком команд при множественном потоке данных)

4.        Системы с множественным потоком команд и множественным потоком данных (МКМД). MIMD (Multiple Instruction Multiple Data - с множественным потоком команд при множественном потоке данных)

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

Системы класса ОКОД. Системы этого класса – обычные однопроцессорные ЭВМ (рис. 1.4, а), включающие всебя запоминающее устройство (ЗУ) для команд и данных (оно чаще всего бывает общим) и один процессор, содержащий арифметическо-логическое устройство (АЛУ) и устройство управления (УУ). В современных системах этого класса наиболее широко используется первый путь организации параллельной обработки – совмещение во времени различных этапов решения разных задач, при котором в системе одновременно работают различные устройства: ввода, вывода и собственно обработки информации. В общем виде это достаточно подробно рассмотрено в предыдущей главе, однако практическая реализация этого принципа предусматривает и более широкое совмещение работы различных устройств. В отношении ввода–вывода информации – это введение нескольких одновременно работающих каналов ввода–вывода, а также нескольких устройств одного типа: перфокарточных устройств ввода и вывода, печатающих устройств, различного рода накопителей и др. Введение большого числа параллельно работающих периферийных устройств позволяет существенно сократить время на ввод информации и оперативное запоминающее устройство: (ОЗУ), уменьшая общее время решения задачи, и до некоторой степени сгладить разрыв между скоростями работы центральных (процессор и ОЗУ) и периферийных устройств. Значительный эффект в производительности однопроцессорной системы дает разделение ОЗУ на несколько модулей, функционально самостоятельных, что позволяет им работать независимо друг от друга. Производительность увеличивается за счет уменьшения простоев устройств из-за так называемых конфликтов при обращении к ОЗУ.

При параллельной работе многих устройств ввода–вывода и процессора неизбежны ситуации, когда нескольким устройствам требуется обращение к ОЗУ для записи или чтения информации. Такая ситуация и называется конфликтной. Естественно, разрешить этот конфликт можно только путем введения системы приоритетов, которая устанавливает определенную очередность удовлетворения запросов в ОЗУ. При этом неизбежны очереди, а, следовательно, и простои устройств, не имеющих высшего приоритета. В наибольшей степени от этого страдает процессор, так как по принципу своей работы он может ожидать в очереди обслуживания сколь угодно долго, в то время как большинство периферийных устройств, в основном электромеханических, ждать долго не могут или это будет приводить к слишком большим потерям времени. Так, например, если вовремя не считать информацию с накопителя на магнитном диске, то придется потерять несколько миллисекунд (один оборот диска) до следующего момента, когда эта информация может быть считана. При наличии нескольких модулей ОЗУ с независимым управлением есть определенная вероятность того, что различные устройства будут обращаться к различным модулям, а следовательно, очередь к ОЗУ разделится на несколько меньших очередей и время ожидания (т. е. простой устройства) в очереди будет уменьшено. Кроме совмещения во времени различных этапов обработки информации в системах класса ОКОД существенное увеличение производительности достигается за счет введения конвейерной обработки, точнее конвейера команд.

Рис. 1.4. Система ОКОД (а), МКОД (б, в), ОКМД (г), МКМД (д)

Д – данные; К – команды; Р - результат

 

По существу конвейер команд – это также совмещение во времени работы нескольких различных блоков, выполняющих отдельные части общей операции. Если совмещение во времени работы различных устройств можно назвать «макросовмещением», то конвейер является как бы «микросовмещением». При организации конвейера команд очень часто применяются также способы увеличения производительности, базирующиеся на использовании многомодульных ОЗУ. Во-первых, если программы и данные размещать в разных модулях памяти, то это позволит совмещать во времени выборку команды и операнда, что при выполнении ОЗУ в виде одного функционального устройства было бы невозможно. Во-вторых, используется тот факт, что команды и данные обычно при обработке выбираются из некоторой последовательности ячеек памяти с последовательно возрастающими адресами. Если организовать ОЗУ таким образом, что все четные адреса будут принадлежать одному модулю ОЗУ, а все нечетные – другому, и сдвинуть начало цикла работы этих двух модулей на ½ цикла, то при выполнении программы среднее время обращения к ОЗУ существенно уменьшается (в пределе в 2 раза). Этот принцип может быть распространен и на большее число модулей ОЗУ с независимым управлением. При N модулях ОЗУ среднее время обращении к ОЗУ оказывается равным 1/N-й цикла ОЗУ. Такая намять называется памятью с чередованием адресов или расслоением обращений.

В системах класса ОКОД возможна реализация и еще одного способа увеличения производительности – конвейер арифметических и логических операций, который вполне вписывается в этот класс систем, так как поток команд остается один: просто команды разбиваются на некоторое число микроопераций, образуя, таким образом, несколько потоков микрокоманд. По этой причине системы с конвейером арифметических и логических операций относится к следующему классу – МКОД.

Детальное рассмотрение систем класса ОКОД не входит в нашу задачу – это делается в курсе «Теория и проектирование ЭВМ», одним из разделов которого является подробное изучение всех перечисленных выше способов повышения производительности ЭВМ.

Системы класса МКОД. Структуру систем этого класса можно представить в виде схемы, изображенной на рис. 1.4, б: несколько потоков команд воздействуют на единственный поток данных. Однако не существует такого класса задач, в которых одна и та же последовательность данных подвергалась бы обработке по нескольким разным программам. По этой причине в чистом виде такая схема до сих пор не реализована.

Как уже отмечалось, реализована другая схема обработки, представленная на рис. 1.4, в. Здесь один поток команд K разделяется устройством управления на несколько потоков микрооперации, каждая из которых реализуется специализированным, настроенным на выполнение именно данной микрооперации, устройством. Поток данных проходит последовательно через, все (или часть) этих специализированных ЛЛУ. Именно такого класса системы принято называть конвейерными или системами с магистральной обработкой информации.

Разумеется, в системах МКОД с целью достижения высокой производительности используется не только конвейер операции. Обычно в таких системах используется и конвейер команд, и различные способы совмещения работы многих устройств. Однако при этом главным, определяющим признаком является наличие конвейера арифметических и логических операций. Заметим также, что системы этого класса развивают максимальную производительность только при решении задач определенного типа, в которых существуют длинные последовательности (цепочки) однотипных операций над достаточно большой последовательностью данных, т. е. когда имеет моего параллелизм объектов или данных.

Системы класса ОКМД. Системы этого класса также ориентированы на использование параллелизма объектов или данных для повышения производительности. Обобщенная структура представлена на рис. 1.4, г. В этой системе по одной и той же (или почти по одной и той же) программе обрабатывается несколько потоков данных, каждый из этих потоков обрабатывается своим АЛУ, работающим однако под общим управлением, за счет чего и достигается высокая производительность системы.

Общая схема, представленная на рис. 2.4, г, может реализоваться разными способами. Так, например, АЛУ может представлять собой достаточно сложное устройство, содержащее обрабатывающий процессор и оперативное ЗУ. В этом случае поток данных в каждый процессор поступает из собственного ЗУ. Управление и память команд реализуются отдельной ЭВМ, управляющей ансамблем процессоров. Память данных может иметь не только адресную выборку, но и ассоциативную, т. е. по содержимому памяти.

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

Системы класса МКМД. Возможны два способа построения систем МКМД: в виде совокупности элементарных систем (рис. 1.4, а) и по схеме, приведенной на рис. 1.4, д. На первый взгляд разница незначительная: в варианте а для каждой последовательности команд и данных имеется собственное ЗУ, в варианте ∂ все команды и все данные размещаются в общих ЗУ. Это различие приводит однако к двум сильно отличающимся по построению и организации вычислении типам вычислительных систем и комплексов: многомашинным (рис. 1.4, а) и многопроцессорным (рис. 1.4, д). В многомашинном варианте вся система как бы распадается на несколько независимых систем класса ОКОД, т. е. по существу самостоятельных ЭВМ со всеми особенностями, присущими им. При этом обычно существуют определенные связи между ЭВМ, объединяющие эти ЭВМ в систему. В многопроцессорном варианте система (комплекс) достаточно жестко связана общей памятью команд и данных и, хотя процессоры системы имеют достаточную самостоятельность, в системе организуется совместная их работа.

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

Из всех рассмотренных систем наиболее универсальными в отношении класса решаемых задач являются системы МКМД. Их программное обеспечение не ориентируется, как правило, на решение только определенного класса задач. Таким образом, системы типа МКМД строятся как вычислительные комплексы. Многопроцессорные и многомашинные комплексы имеют наиболее широкое распространение, и по этой причине мы именно с них начинаем подробное рассмотрение.

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

Машиностроительное черчение, инженерная графика, начертательная геометрия. Выполнение контрольной