2.2. Быстродействие матричных систем

advertisement
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
РЫБИНСКАЯ ГОСУДАРСТВЕННАЯ АВИАЦИОННАЯ
ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ
имени П.А. СОЛОВЬЕВА
Н. Л. Михайлов
АРХИТЕКТУРА
ВЫЧИСЛИТЕЛЬНЫХ
СИСТЕМ
Учебное пособие
РЫБИНСК
2008
2
УДК 681.32
Михайлов Н.Л. Архитектура вычислительных систем: Учебное пособие. – Рыбинск, РГАТА, 2008. – 87 с.
Учебное пособие подготовлено в соответствии с Государственным
стандартом высшего профессионального образования по специальности
230103 Программное обеспечение вычислительной техники и автоматизированных систем.
В учебном пособии освещены теоретические и практические вопросы современных архитектур вычислительных систем, позволяющих эффективнее и производительнее реализовывать информационные процессы
обработки и накопления данных.
Пособие рассчитано в первую очередь на студентов, изучающих
проектирование архитектуры аппаратно-программных комплексов и их
компонентов.
Ил. 26 Табл. 3 Библиогр. 8
Рецензенты :
кафедры информатики Ярославского филиала Московского государственного университета экономики, статистики и информатики (МЭСИ);
к.ф.-м.н., доцент Д.Л. Загорин
 Н.Л. Михайлов, 2008
 Рыбинская государственная
авиационная технологическая
академия имени П.А. Соловьева, 2008
3
ВВЕДЕНИЕ
Под вычислительной системой (ВС) принято понимать совокупность взаимосвязанных и взаимодействующих процессоров или ЭВМ, периферийного оборудования и программного обеспечения, предназначенную для подготовки и решения задач пользователей. Отличительной особенностью ВС по отношению к ЭВМ является наличие в них нескольких
вычислителей, реализующих параллельную обработку. Создание ВС преследует следующие основные цели: повышение производительности системы за счет ускорения процессов обработки данных, повышение надежности и достоверности вычислений, предоставление пользователям дополнительных сервисных услуг и т.д.
В настоящее время сфера применения многопроцессорных вычислительных систем (МВС) непрерывно расширяется, охватывая все новые области в самых различных отраслях науки, бизнеса и производства. Если
традиционно МВС применялись в основном в научной сфере для решения
вычислительных задач, требующих мощных вычислительных ресурсов, то
сейчас из–за бурного развития бизнеса резко возросло количество компаний, отводящих главную роль использованию компьютерных технологий
и электронного документооборота. В связи с этим непрерывно растет потребность в построении централизованных вычислительных систем для
критически важных приложений, связанных с обработкой транзакций,
управлением базами данных и обслуживанием телекоммуникаций. Наряду
с расширением области применения, по мере совершенствования МВС
происходит усложнение и увеличение количества задач в областях, традиционно использующих высокопроизводительную вычислительную технику.
Наиболее перспективным и динамичным направлением увеличения
скорости решения прикладных задач является широкое внедрение идей
параллелизма в работу вычислительных систем. К настоящему времени
спроектированы и опробованы сотни различных компьютеров, использующих в своей архитектуре тот или иной вид параллельной обработки данных. В научной литературе и технической документации можно найти более десятка различных названий, характеризующих лишь общие принципы функционирования параллельных машин: векторно–конвейерные, массивно–параллельные, компьютеры с широким командным словом, систолические массивы, гиперкубы, спецпроцессоры и мультипроцессоры,
иерархические и кластерные компьютеры, dataflow, матричные ЭВМ и
4
многие другие. Если же к подобным названиям для полноты описания
добавить еще и данные о таких важных параметрах, как, например, организация памяти, топология связи между процессорами, синхронность работы отдельных устройств или способ исполнения арифметических операций, то число различных архитектур станет и вовсе необозримым.
Понятие архитектуры высокопроизводительной системы является
достаточно широким, поскольку под архитектурой можно понимать и
способ параллельной обработки данных, используемый в системе, и организацию памяти, и топологию связи между процессорами, и способ исполнения системой арифметических операций. Архитектура ВС – совокупность характеристик и параметров, определяющих функционально–
логическую и структурную организацию системы. Понятие архитектуры
охватывает общие принципы построения и функционирования, наиболее
существенные для пользователей, которых больше интересуют возможности систем, а не детали их технического исполнения.
5
1. КЛАССИФИКАЦИИ АРХИТЕКТУР ВЫЧИСЛИТЕЛЬНЫХ
СИСТЕМ
Классификация архитектур вычислительных систем должна помогать разобраться с тем, что представляет собой каждая архитектура, как
они взаимосвязаны между собой, что необходимо учитывать для написания действительно эффективных программ или же на какой класс архитектур следует ориентироваться для решения требуемого класса задач.
Одновременно удачная классификация могла бы подсказать возможные
пути совершенствования компьютеров и в этом смысле она должна быть
достаточно содержательной.
Основной вопрос классификации – что заложить в её основу, может
решаться по–разному, в зависимости от того, для кого данная классификация создается и на решение какой задачи направлена. В научной литературе рассматривается несколько видов классификации архитектур вычислительных систем:
 классификация Флинна, в основу которой положена единственность или множественность потоков данных и команд;
 классификация Фенга, учитывающая две простые численные характеристики параллелизма (пословный и поразрядный параллелизм);
 классификация Хокни, конкретизирующая класс систем с множественным потоком команд и множественным потоком данных;
 классификация Шнайдера, позволяющая конкретизировать класс
систем с одиночным потоком команд и множественным потоком данных;
 классификация Дункана.
1.1. Классификация Флинна
Самой ранней и наиболее известной является классификация архитектур вычислительных систем, предложенная в 1966 году М. Флинном.
Классификация базируется на понятии потока, под которым понимается
последовательность элементов, команд или данных, обрабатываемая процессором. На основе числа потоков команд и потоков данных Флинн выделяет четыре класса архитектур:
 одиночный поток команд и одиночный поток данных;
 одиночный поток команд и множественный поток данных;
 множественный поток команд и одиночный поток данных;
 множественный поток команд и множественный поток данных.
6
Однопроцессорные системы традиционной фон–неймановской
структуры, обрабатывающие один поток команд и один поток данных
(рис.1.1), относятся к классу систем с одиночным потоком команд и одиночным потоком данных (single instruction stream / single data stream)
(ОКОД – SISD).
Процессор
1
2
3
Оперативная
память
Рис. 1.1.
В соответствии с этой организацией команды потока 2 считываются
из оперативной памяти последовательно одна за другой. Этому потоку
команд соответствует поток данных 1, преобразуемый в процессоре в выходной поток результатов 3. В системах ОКОД возможно широкое совмещение во времени работы разнородных устройств на основе принципов
мультипрограммирования. В частности, используется совмещение процессов вычислений и ввода–вывода. В ЭВМ высокой производительности
может осуществляться совмещение работы модулей оперативной памяти с
целью обеспечения непрерывного и опережающего потока команд и данных в процессор.
Системы, обрабатывающие одиночный поток команд и множественный поток данных (single instruction stream / multiple data stream), называют системами класса ОКМД (SIMD) (рис.1.2).
ПЭ
ПЭ
1
2
Процессор
управления
Рис. 1 2.
3
7
Их особенностью является наличие большого числа однородных по
структуре обрабатывающих блоков – процессорных элементов (ПЭ), которые выполняют преимущественно арифметические и логические операции, и процессора управления (ПУ) в виде мини– или универсальной
ЭВМ, которая генерирует единый поток команд 2 для всех ПЭ и индивидуальный поток данных для каждого ПЭ. В каждый момент времени в системе ОКМД выполняется только одна команда, но во всех ПЭ сразу.
Одиночные потоки данных, передаваемые от ПУ в отдельные ПЭ, в сумме
образуют множественный поток 1, который перерабатывается в множественный поток результатов 3, накапливаемых в памяти ПЭ или передаваемых в ПУ. Типичными представителями систем класса ОКМД являются
матричные и параллельные системы, различающиеся между собой топологией связи между процессорами и, возможно, свойствами адресации. В
матричных системах ПЭ имеют связи между ближайшими соседями для
обмена промежуточными результатами. Может быть и более сложная
конфигурация связей. В параллельных системах связи между ПЭ менее
выражены или могут вообще отсутствовать. Обмен между ПЭ в них осуществляется через ПУ. К параллельным системам относятся ансамбли
процессоров и ассоциативные системы. Ансамбли процессоров представляют собой малосвязанные микро– или мини–ЭВМ. Ассоциативные системы содержат набор ПЭ с ассоциативной обработкой или ассоциативной
адресацией данных.
Системы, обрабатывающие множественный поток команд и одиночный поток данных (multiple instruction stream / single data stream), называют системами класса МКОД (MISD) (рис.1.3).
ФП
1
ФП
2
3
Процессор
управления
Рис.1.3.
В этих системах осуществляется одновременное выполнение нескольких команд в последовательности процессоров, называемых функ-
8
циональными (ФП), каждый из которых представляет собой арифметическое устройство, выполняющее определенную операцию (функцию). К
ФП относятся суммирующие, умножающие, делящие и логические процессоры. В составе конвейерных систем может быть несколько идентичных ФП. Работа всех ФП централизованно синхронизируется одним
устройством или процессором управления (ПУ), который, формируя команду к каждому из ФП, генерирует множественный поток команд 2.
Данные 1 обрабатываются последовательно в ФП. Результаты выполнения
операций в первом ФП являются входными данными для второго ФП и
т.д. При ненадобности отдельные ФП могут пропускаться. Все ФП образуют цепочку или конвейер обработки данных, поэтому системы класса
МКОД часто называют конвейерными системами.
В настоящее время широкое распространение получили системы и
комплексы с множественными потоками команд и данных (multiple
instruction stream / multiple data stream), иначе, системы и комплексы класса МКМД. (MIMD) (рис.1.4).
1
Пр
Пр
Пр
Пр
2
3
Оперативная
память
Рис.1.4.
Каждый из процессоров (Пр) организует из оперативной памяти
собственный поток команд и данных, объединяемых в рамках системы в
множественные потоки.
Степень специализации процессоров является основным признаком
деления систем и комплексов класса МКМД на однородные и неоднородные.
В однородных системах функции, выполняемые различными процессорами, и структура последних идентичны. Процессоры выполняют
универсальный набор операций. Однородные многомашинные комплексы
состоят из идентичных ЭВМ или многопроцессорных систем.
В неоднородных многопроцессорных системах каждый из процессо-
9
ров специализирован на выполнение определенных функций, в связи с
чем различают универсальные и специализированные операционные процессоры, командные процессоры, процессоры ввода–вывода. Универсальные операционные процессоры предназначаются для выполнения операций с фиксированной и плавающей запятой, операций над десятичными
числами. Специализированные операционные процессоры используются
как для ускоренного выполнения стандартных программ (вычисления тригонометрических функций, расчетов по формулам, решения систем уравнений), так и для выполнения системных функций (обработки прерываний, диспетчеризация ресурсов системы, преобразования адресов при работе с виртуальной памятью, трансляции и т.п.). Процессоры ввода–
вывода управляют обменом между оперативной памятью и периферийными устройствами.
Кроме того, МКМД системы можно разделить по способу обмена
информацией между процессорами. Если все процессоры работают с единым полем памяти, т.е. каждый из них может получить доступ ко всем
хранящимся в памяти командам и данным, то процессоры обмениваются
информацией именно через общую память. Такие системы получили
наименование симметричных мультипроцессорных SMP–систем. Процессоры получают доступ к общей памяти через общую магистраль или с помощью системы соединений другого типа, но отличительной характеристикой такого вида систем является то, что время доступа любого
процессора к любому участку общей памяти одно и то же. В последние
годы появились мультипроцессорные системы с примерно такой же организацией, но имеющие переменное время доступа к разным участкам общей памяти – так называемые NUMA–системы (nonuniform memory
access).
Несколько однопроцессорных или SMP–систем можно объединить в
многомашинную систему или кластер. Связь между компонентами (узлами) в такой системе осуществляется либо через специализированные каналы связи, либо через коммуникационные средства локальной вычислительной сети. Каждый узел кластера имеет доступ к своему модулю оперативной памяти, так что общая память носит распределенный характер.
Предложенная схема классификации вплоть до настоящего времени
является самой применяемой при начальной характеристике того или иного компьютера. Если говорится, что компьютер принадлежит классу
ОКМД (SIMD) или МКМД (MIMD), то сразу становится понятным базовый принцип его работы, и в некоторых случаях этого бывает достаточно.
10
Однако видны и явные недостатки. В частности, некоторые заслуживающие внимания архитектуры, например dataflow и векторно–конвейерные
машины, четко не вписываются в данную классификацию. Другой недостаток – это чрезмерная заполненность класса МКМД (MIMD). Необходимо средство, более избирательно систематизирующее архитектуры, которые по Флинну попадают в один класс, но совершенно различны по
числу процессоров, природе и топологии связи между ними, по способу
организации памяти и, конечно же, по технологии программирования.
1.2. Классификация Фенга
В 1972 году Т. Фенг предложил классифицировать вычислительные
системы на основе двух простых характеристик:
1) число бит n в машинном слове, обрабатываемых параллельно при
выполнении машинных инструкций. Практически во всех современных
компьютерах это число совпадает с длиной машинного слова;
2) число слов m, обрабатываемых одновременно данной вычислительной системой. Функционирование любого компьютера можно представить как параллельную обработку n битовых слоев, на каждом из которых независимо преобразуются m бит. Опираясь на такую интерпретацию,
вторую характеристику обычно называют шириной битового слоя.
Если рассмотреть предельные верхние значения данных характеристик, то каждую вычислительную систему C можно описать парой чисел
(n, m) и представить точкой на плоскости в системе координат длина слова – ширина битового слоя. Площадь прямоугольника со сторонами n и m
определяет интегральную характеристику потенциала параллельности P
архитектуры и носит название максимальной степени параллелизма вычислительной системы: P(C) = mn.
На основе введенных понятий все вычислительные системы в зависимости от способа обработки информации, заложенного в их архитектуру, можно разделить на четыре класса.
1.
Разрядно–последовательные
пословно–последовательные
(n=m=1). В каждый момент времени такие компьютеры обрабатывают
только один двоичный разряд.
2. Разрядно–параллельные пословно–последовательные (n >1, m = 1).
Большинство классических последовательных компьютеров, так же как и
многие вычислительные системы, эксплуатируемые до сих пор, принадлежит к данному классу.
11
3. Разрядно–последовательные пословно–параллельные (n = 1, m
>1). Как правило, вычислительные системы данного класса состоят из
большого числа одноразрядных процессорных элементов, каждый из которых может независимо от остальных обрабатывать свои данные.
4. Разрядно–параллельные пословно–параллельные (n > 1, m > 1).
Большая часть существующих параллельных вычислительных систем, обрабатывая одновременно mn двоичных разрядов, принадлежит именно к
этому классу
Недостатки предложенной классификации достаточно очевидны и
связаны со способом вычисления ширины битового слоя m. По существу
Фенг не делает никакого различия между процессорными матрицами, векторно–конвейерными и многопроцессорными системами. Не делается акцент на том, за счет чего компьютер может одновременно обрабатывать
более одного слова: множественности функциональных устройств, их
конвейерности или же какого–то числа независимых процессоров. Если в
системе N независимых процессоров имеют каждый по F конвейерных
функциональных устройств с длиной конвейера L, то для вычисления ширины битового слоя надо просто найти произведение данных характеристик.
Конечно же, опираясь на данную классификацию, достаточно трудно
(а иногда и невозможно) осознать специфику той или иной вычислительной системы. Однако достоинством является введение единой числовой
метрики для всех типов компьютеров, которая вместе с описанием потенциала вычислительных возможностей конкретной архитектуры позволяет
сравнить любые два компьютера между собой.
1.3. Классификация Хокни
Р. Хокни – известный английский специалист в области параллельных вычислительных систем, разработал свой подход к классификации,
введенной им для систематизации компьютеров, попадающих в класс
МКМД (MIMD) по систематике Флинна.
Как отмечалось выше, класс MIMD чрезвычайно широк, причем
наряду с большим числом компьютеров он объединяет и целое множество
различных типов архитектур. Хокни, пытаясь систематизировать архитектуры внутри этого класса, получил иерархическую структуру, представленную на рис 1.5.
Основная идея классификации состоит в следующем. Множествен-
12
ный поток команд может быть обработан двумя способами: либо одним
конвейерным устройством обработки, работающем в режиме разделения
времени для отдельных потоков, либо каждый поток обрабатывается своим собственным устройством. Первая возможность используется в MIMD
компьютерах, которые автор называет конвейерными. Архитектуры, использующие вторую возможность, в свою очередь опять делятся на два
класса:
 MIMD компьютеры, в которых возможна прямая связь каждого
процессора с каждым, реализуемая с помощью переключателя;
 MIMD компьютеры, в которых прямая связь каждого процессора
возможна только с ближайшими соседями по сети, а взаимодействие удаленных процессоров поддерживается специальной системой маршрутизации через процессоры–посредники.
МКМД
Переключаемые
Конвейерные
Сетевые
С общей памятью
Киперкубы
С распределенной
памятью
Регулярные решетки
Иерархические
структуры
Изменяющие
конфигурацию
Рис.1.5.
Далее, среди MIMD машин с переключателем Хокни выделяет те, в
которых вся память распределена среди процессоров как их локальная память. В этом случае общение самих процессоров реализуется с помощью
очень сложного переключателя, составляющего значительную часть компьютера. Такие машины носят название MIMD машин с распределенной
памятью. Если память – это разделяемый ресурс, доступный всем процес-
13
сорам через переключатель, то такие MIMD являются системами с общей памятью. В соответствии с типом переключателей можно проводить
классификацию и далее: простой переключатель, многокаскадный переключатель, общая шина.
Многие современные вычислительные системы имеют как общую
разделяемую память, так и распределенную локальную. Такие системы
автор рассматривает как гибридные MIMD c переключателем.
При рассмотрении MIMD машин с сетевой структурой считается,
что все они имеют распределенную память, а дальнейшая классификация
проводится в соответствии с топологией сети: гиперкубы, регулярные решетки разной размерности, сети с иерархической структурой и, наконец,
сети, изменяющие свою конфигурацию.
Необходимо отметить, что если архитектура компьютера спроектирована с использованием нескольких сетей с различной топологией, то, по
всей видимости, по аналогии с гибридными MIMD с переключателями, их
стоит назвать гибридными сетевыми MIMD, а использующие идеи разных
классов – просто гибридными MIMD.
1.4. Классификация Шнайдера
В 1988 году Л.Шнайдер предложил новый подход к описанию архитектур параллельных вычислительных систем, попадающих в класс SIMD
систематики Флинна. Основная идея заключается в выделении этапов выборки и непосредственно исполнения в потоках команд и данных. Именно
разделение потоков на адреса и их содержимое позволяет описать такие
ранее "неудобные" для классификации архитектуры, как компьютеры с
длинным командным словом, систолические массивы и целый ряд других.
Назовем потоком ссылок ( reference stream ) S некоторой вычислительной системы конечное множество бесконечных последовательностей
пар:
S = { (a1t1) (a2t2)...,
(b1u1) (b2u2)...,
(c1v1)(c2v2)...},
где первый компонент каждой пары – это неотрицательное целое число,
называемое адресом, второй компонент – это набор из n неотрицательных
целых чисел, называемых значениями, причем n одинаково для всех набо-
14
ров всех последовательностей. Пара (b2u2) определяет адрес b2 и
значение u2. Если значения рассматривать как команды, то из потока
ссылок получим поток команд I; если же значения интерпретировать как
данные, то соответствующий поток – это поток данных D. Число последовательностей в потоке команд определяет число инструкций, которое
данный компьютер может выполнять одновременно. Число последовательностей в потоке данных определяет число различных данных, которое
компьютер может обработать одновременно.
Пусть S произвольный поток ссылок. Последовательность адресов
потока S, обозначаемая Sa, – это последовательность, чей i–й элемент –
набор, сформированный из адресов i–х элементов каждой последовательности из S:
Sa = a1 b1 ...c1 ,a2 b2 ...c2 ,...
Последовательность значений потока S, обозначаемая Sv, – это последовательность, чей i–й элемент – набор, образованный слиянием наборов значений i–х элементов каждой последовательности из S:
Sv = t1 u1 ...v1,t2 u2 ...v2 ,...
Если Sx – последовательность элементов, где каждый элемент –
набор из n чисел, то для обозначения "ширины" последовательности будем пользоваться обозначением: w(Sx) = n.
Из определений Sa, Sv и w сразу следует утверждение: если S – это
поток ссылок со значениями из n чисел, то
w(Sa) = S и
w(Sv) = nS,
где S обозначает мощность множества S.
Каждую пару (I, D) с потоком команд I и потоком данных D будем
называть вычислительным шаблоном, а все компьютеры будем разбивать
на классы в зависимости от того, какой шаблон они могут исполнить. В
самом деле, компьютер может исполнить шаблон (I, D), если он в состоянии:
 выдать w(Ia) адресов команд для одновременной выборки из памяти;
 декодировать и проинтерпретировать одновременно w(Iv) команд;
15
 выдать одновременно w(Da) адресов операндов и
 выполнить одновременно w(Dv) операций над различными данными.
Если все эти условия выполнены, то компьютер может быть описан следующим образом:
I w( I a ) w( I v ) Dw( Da ) w( Dv )
Для более четкой классификации Шнайдер вводит три предиката для
обозначения значений, которые могут принимать величины w(Ia), w(Iv),
w(Da) и w(Dv):
 s – предикат "равен 1";
 с – предикат "от 1 до некоторой (небольшой) константы";
 m – предикат "от 1 до произвольно большого конечного числа".
Несмотря на то, что и c , и m в принципе не имеют определенной
верхней границы, они отражают разные свойства архитектуры компьютера. Описатель c предполагает жесткие ограничения сверху со стороны аппаратуры, и соответствующий параметр не может быть значительно увеличен относительно простыми средствами. Примером может служить
число инструкций, упакованных в командном слове VLIW компьютера. С
другой стороны, описатель m используется тогда, когда обозначаемая величина может быть легко изменена, т.е. другими словами, компьютер по
данному параметру масштабируем.
На основе указанных предикатов можно выделить следующие классы компьютеров:
 IssDss – фон–неймановские машины;
 IssDsc – фон–неймановские машины, в которых заложена возможность выбирать данные, расположенные с разным смещением относительно одного и того же адреса, над которыми будет выполнена одна и та же операция. Примером могут служить компьютеры, имеющие команды, типа одновременного выполнения двух
операций сложения над данными в формате полуслова, расположенными по указанному адресу;
 IssDsm – SIMD компьютеры без возможности получения уникального адреса для данных в каждом процессорном элементе;
 IssDcc – многомерные SIMD машины – фон–неймановские машины, способные расщеплять поток данных на независимые потоки
операндов;
 IssDmm – это SIMD компьютеры, имеющие возможность независи-
16
мой модификации адресов операндов в каждом процессорном
элементе;
 IscDcc – вычислительные системы, выбирающие и исполняющие
одновременно несколько команд, для доступа к которым используется один адрес. Типичным примером являются компьютеры с
длинным командным словом (VLIW);
 IccDcc – многомерные MIMD машины. Фон–неймановские машины, которые могут расщеплять свой цикл выборки/выполнения с
целью обработки параллельно нескольких независимых команд.
 ImmDmm – к этому классу относятся все компьютеры типа MIMD.
Нет необходимости рассматривать все возможные комбинации описателей s, c и m, так как архитектура реальных компьютеров накладывает
ряд вполне разумных ограничений. Очевидно, что число адресов w(Sa) не
должно превышать числа возвращенных значений w(Sv), которое компьютер может обработать. Отсюда следуют неравенства: w(Ia) <= w(Iv) и
w(Da)<= w(Dv). Другим естественным предположением является тот факт,
что число выполняемых команд не должно превышать числа обрабатываемых данных: w(Iv)<= w(Dv).
В классификации Шнайдера можно отметить два положительных
момента: более избирательная систематизация SIMD компьютеров и возможность описания нетрадиционных архитектур типа систолических массивов или компьютеров с длинным командным словом. Однако почти все
вычислительные системы типа MIMD опять попали в один и тот же класс
ImmDmm.
1.5. Классификация Дункана
Р.Дункан излагает свой взгляд на проблему классификации архитектур параллельных вычислительных систем и дает неформальное определение параллельной архитектуры, причем именно неформальность дала
ему возможность включить в данный класс компьютеры, которые ранее не
вписывались в систематику Флинна.
Параллельная архитектура - это такой способ организации вычислительной системы, при котором допускается, чтобы множество процессоров (простых или сложных) могло бы работать одновременно, взаимодействуя по мере надобности друг с другом. Следуя этому определению,
все разнообразие параллельных архитектур Дункан систематизирует так,
как показано на рис.1.6.
17
По существу, систематика очень простая: процессоры системы работают либо синхронно, либо независимо друг от друга, либо в архитектуру системы заложена та или иная модификация идеи MIMD. На следующем уровне происходит детализация в рамках каждого из этих трех
классов. Дадим небольшое пояснение лишь к тем из них, которые на сегодняшний день не столь широко известны.
векторные
матричные
Синхронные
ОКМД
систолические
МКМД
с ассоциативной
памятью
с ассоциативной
памятью
с общей памятью
МКМД/ОКМД
Использующие
идеи МКМД
dataflow
reduction
wavefront
Рис.1.6.
Систолические архитектуры (их чаще называют систолическими
массивами) представляют собой массив процессоров, объединенных регулярным образом. Обращение к памяти может осуществляться только через
определенные процессоры на границе массива. Выборка операндов из памяти и передача данных по массиву осуществляется в одном и том же
темпе. Направление передачи данных между процессорами фиксировано.
Каждый процессор за интервал времени выполняет небольшую инвариантную последовательность действий.
Гибридные МКМД/ОКМД архитектуры, dataflow, reduction и
wavefront вычислительные системы осуществляют параллельную обра-
18
ботку информации на основе асинхронного управления, как и МКМД
системы. Но они выделены в отдельную группу, поскольку все имеют ряд
специфических особенностей, которыми не обладают системы, традиционно относящиеся к МКМД.
МКМД/ОКМД – типично гибридная архитектура. Она предполагает,
что в МКМД системе можно выделить группу процессоров, представляющую собой подсистему, работающую в режиме ОКМД. Такие системы
отличаются относительной гибкостью, поскольку допускают реконфигурацию в соответствии с особенностями решаемой прикладной задачи.
Остальные три вида архитектур используют нетрадиционные модели
вычислений. Dataflow используют модель, в которой команда может выполняться сразу же, как только вычислены необходимые операнды. Таким
образом, последовательность выполнения команд определяется зависимостью по данным, которая может быть выражена, например, в форме графа.
Модель вычислений, применяемая в reduction машинах иная и состоит в следующем: команда становится доступной для выполнения тогда
и только тогда, когда результат ее работы требуется другой, доступной
для выполнения, команде в качестве операнда.
Wavefront array архитектура объединяет в себе идею систолической
обработки данных и модель вычислений, используемой в dataflow. В данной архитектуре процессоры объединяются в модули и фиксируются связи, по которым процессоры могут взаимодействовать друг с другом. Однако, в противоположность ритмичной работе систолических массивов,
данная архитектура использует асинхронный механизм связи с подтверждением (handshaking), из–за чего "фронт волны" вычислений может менять свою форму по мере прохождения по всему множеству процессоров.
2. МАТРИЧНЫЕ СИСТЕМЫ
19
2.1. Структура матричных систем и принципы их работы
Матричные многопроцессорные системы относятся к классу сверхбыстродействующих систем. Их отличительной особенностью является
жестко синхронизируемая множественная обработка данных. Высокая
производительность таких систем достигается за счет большого количества простых по структуре процессоров, называемых процессорными элементами (ПЭ) ввиду довольно ограниченного круга выполняемых операций.
Матричные системы имеют структуру, приведенную на рис. 2.1.
Межпроцессорные связи
Поток команд
ПУ
ПЭ1
ПЭ2
ПЭn
ОП
СОП1
СОП2
СОПn
ПВВ
Информационный канал
Рис. 2.1. Схема структуры матричной системы
Управление работой системы осуществляется процессором управления (ПУ), характеризуемым высоким быстродействием и имеющим многомодульную оперативную память (ОП) большого объема с малым временем считывания. Высокое быстродействие ПУ обеспечивает непрерывность потока команд, направляемых для исполнения в матрицу ПЭ. Повышенные характеристики оперативной памяти обуславливаются спецификой применения матричных систем, рассчитанных на выполнение трудоемких программ, обрабатывающих наборы данных большого объема.
При работе системы процессор управления выбирает команды из
оперативной памяти, декодирует их с целью выявления команд обработки
данных и направляет в матрицу процессорных элементов ПЭ1, …, ПЭn поочередно. Команды переходов выполняются самим процессором управления с учетом состояния ПЭ в момент завершения предшествующей команды. Команды ввода–вывода передаются для выполнения в процессор
20
ввода–вывода (ПВВ). Все процессорные элементы в один и тот же момент времени выполняют одну и ту же операцию, жестко задаваемую
процессором управления, над различными данными, размещаемыми в
местной сверхоперативной памяти (СОП). ПЭ может пропустить команду,
т.е. блокировать ее, если на его входе нет данных, но выполнять команду,
отличную от заданной для всех, не может.
Модули сверхоперативной памяти используются для хранения обрабатываемых данных и промежуточных результатов вычислений. С учетом
жесткой синхронизации выполнения команд в ПЭ, работа модулей СОП
также жестко синхронизирована. Цикл записи–чтения для всех модулей
начинается одновременно. Кроме процессорных элементов, модули СОП
связаны с информационным каналом (ИК) высокой производительности,
обеспечивающим обмен данными с оперативной памятью системы. Инициирование обмена осуществляется по командам обмена. В течение цикла
обмена ПЭ простаивают.
Для обмена промежуточными результатами процессорные элементы
связаны между собой определенным образом. Наиболее распространенный способ связи заключается в размещении процессорных элементов в
узлах квадратной решетки размерностью N = n х n. Пример матрицы из 16
ПЭ представлен на рис. 2.2. Каждый ПЭi в этой решетке связан с четырьмя
другими по правилу (i ± 1) mod 16; (i ± 4) mod 16. В результате передача
данных от одного ПЭ к другому требует не более (log2N – 1) шагов.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Рис. 2.2. Матрица процессорных элементов
2.2. Быстродействие матричных систем
21
Пусть в системе содержится n процессорных элементов со средним быстродействием B1 каждый. Номинальное быстродействие этой системы при полной (единичной) загрузке всех процессорных элементов
пропорционально n:
Bн = n B1
Реальное быстродействие Bр всегда меньше номинального в связи с
простоем процессорных элементов, вызываемым различными факторами.
Основные из них обуславливаются:
1) степенью распараллеливания операций над одновременно обрабатываемыми данными;
2) ожиданием всеми ПЭ выполнения подготовительных операций в
ПУ, таких, как завершение одной задачи и инициирование новой, трансляция, управление вычислительным процессом и т.д.
Степень распараллеливания максимальна для данной конфигурации
системы, если обработку данных осуществляют одновременно все ПЭ, т.е.
ни один из них не пропускает очередную команду. Если число распараллеливаемых операций на каких–то этапах вычислений меньше числа ПЭ,
то часть из них простаивает. Простой ПЭ вызван некратностью числа распараллеливаемых операций на различных этапах вычислений числу ПЭ.
Для определения влияния указанных факторов на реальное быстродействие системы примем, что простои, вызываемые факторами "некратности" и "подготовки", равномерно распределены по всем ПЭ, и обозначим их для каждого ПЭ через ηн и ηп соответственно. Тогда загрузка одного ПЭ выразится в виде
ρ1 = 1 – ηп – (1 – ηп ) ηн = (1 – ηн )(1 – ηп )
В результате
Bр = n ρ1 B1 = n (1 – ηн )(1 – ηп ) B1
(2.1)
Рассмотрим упрощенный способ оценки влияния составляющих ηн и
ηп на реальное быстродействие системы в целом.
Для этого вначале оценим величину потерь ηн , проиллюстрировав
предварительно на простом примере влияние некратности числа одновременно распараллеливаемых операций числу ПЭ. Пусть в системе, состоя-
22
щей из 4–х процессорных элементов, необходимо выполнить операции
сложения 8 операндов: а, b, с, d, e, f, g, h. Процесс вычисления суммы Σ
может быть распараллелен по шагам следующим образом:
ПЭ1: (a + b) = Σ'1 ;
ПЭ2: (c + d) = Σ'2 ;
ПЭ3: (e + f) = Σ'3 ;
ПЭ4: (g + h) = Σ'4 ;
2)
ПЭ1: (Σ'1 + Σ'2 ) = Σ"1 ;
ПЭ1: (Σ'3 + Σ'4 ) = Σ"2 ;
3)
ПЭ1: ( Σ"1 + Σ"2 ) = Σ ;
т.е. на первом шаге операцию сложения параллельно выполняют все 4
процессорных элемента, на втором — 2 и на третьем – лишь один. Для
этого примера на рис. 2.3, а и б соответственно приведена временная диаграмма работы ПЭ и число n одновременно работающих ПЭ на каждом
шаге. Принимая для иллюстраций, что длительность каждого шага ti –ti – 1
одинакова, получаем, что усредненная загрузка процессорного элемента
1)
3
равна
 n j /( 3n ) =
7/12 и простой из–за некратности числа процессов
j 1
3
числу ПЭ: (1 –
 n j /( 3n ) ) = 5/12.
j 1
Σ'1+Σ'2 Σ"1+Σ"2
a+b
ПЭ1
n
4
Σ'3+Σ'4
c+d
ПЭ2
3
e+f
ПЭ3
2
g+h
ПЭ4
1
t0
t1
t2
а)
t3
t0
t1
t2
t3
б)
Рис. 2.3. Пример диаграммы выполнения вычислений в матричной системе
Рассматривая работу матричной системы относительно числа ПЭ,
одновременно выполняющих операции над данными, выделим в процессе
23
выполнения программы n этапов и перенумеруем их в порядке j = 1,
2,..., n так, чтобы этап j соответствовал (n – j + 1) одновременно работающим ПЭ, т.е. не пропускающим выполнение очередных команд. Пусть
также sj — доля числа команд, приходящихся на этап j, которая равна отношению числа команд, исполняемых на этапе j, к общему числу перерабатываемых команд программы, и время выполнения всех команд в среднем одинаково.
Тогда загрузка процессорного элемента за период выполнения программы составит
1 n
( 1   н )   ( n  j  1 )s j
n j 1
(2.2)
Из (2.2) следует: чем больше доля команд, выполняемых на уровнях
с меньшими номерами, тем выше загрузка процессорного элемента.
Для оценки потерь на подготовку программ к выполнению предположим, что система решает достаточно большое число задач, каждая из
которых требует в среднем τ1 единиц времени процессора управления для
подготовки программы и затем τ2 единиц времени – для обработки данных
в матрице процессорных элементов (МПЭ). Параметр τ2 легче всего выражать через число команд k, выполняемых в программе, т.е. направляемых
от ПУ к МПЭ: τ2 = k / B1 .
Вероятность того, что процесс будет находиться в первой фазе
p1 
1
1   2
и во второй
p2 
2
1   2
Вероятность p1 характеризует простой матрицы процессорных элементов, а вероятность p2 – ее загрузку. С учетом того, что каждая команда
выполняется во всех ПЭ одновременно, загрузка и простой одного ПЭ соответствуют загрузке и простою матрицы всех ПЭ, т.е.
п 
и
24
1
1

1   2 1  
1  п 
2

,

1   2 1  
(2.3)
где γ = τ2 / τ1 – отношение времени выполнения программы к времени ее подготовки.
Подставляя (2.2) и (2.3) в (2.1), получим
B1
Bр 
n
 ( n  j  1 )s j
j 1
1 
.
(2.4)
Проанализируем зависимость быстродействия Bр от параметров γ и n
при равномерном распределении доли числа команд, выполняемых на различных этапах. В этом случае sj = 1/n. Подставляя это значение в (2.4), получим
B1
Bр 
n
( n  j  1 )
j 1
n( 1   )
B ( n  1 )
 1
.
2( 1   )
(2.5)
Из анализа (2.5) следует, что в случае равномерного распределения
доли числа выполняемых команд по этапам при больших n (n > 8) загрузка
процессорного элемента практически не изменяется и для заданного γ
равна половине максимально возможного значения, отмечаемого при n= 1.
Отношение времени выполнения к времени подготовки программ γ существенно влияет на загрузку процессорного элемента. В частности,
limВр=0 (при j→0) и lim Bp= (n + l)B1/2 (при j→∞). Эти оценки показывают, что эффективное использование матричных систем достигается, во–
первых, применением быстродействующего процессора управления, обеспечивающего минимальные затраты времени на подготовку программ к
выполнению, и во–вторых, высокой степенью распараллеливания процессов обработки данных.
25
3. АССОЦИАТИВНЫЕ ПРОЦЕССОРЫ
Ассоциативными процессорами называют процессоры с адресацией
данных по содержанию слов или их частей. В этом заключается их отличие от обычных, в том числе матричных систем, в которых обращение к
данным осуществляется по адресам слов. Основу ассоциативных процессоров составляет ассоциативная память с доступом по содержанию данных, дополненная средствами параллельной обработки данных (слов) –
процессорными элементами (ПЭ).
Ассоциативные процессоры, так же как и матричные системы, относятся к классу системы с одиночным потоком команд и множественным
потоком обрабатываемых данных. Общим для них является наличие множества простых по структуре ПЭ; параллельное выполнение одной и той
же операции, но над различными данными в различных процессорных
элементах; использование общего устройства или процессора управления,
который обеспечивает подготовку программ к выполнению и задает поток
команд в матрицу процессорных элементов.
3.1. Доступ к ассоциативной памяти
В ассоциативной памяти традиционного применения для целей информационного поиска доступ к словам осуществляется по их отличительным признакам, как это показано на рис. 3.1.
РгП
n
РгD
1
m
1
Y1
&1
r
1
Y1
Пр1
r
D1
1 m
1
C1
Yn
&n
r
1
Yn
Прn
r
Dn
1 m
Рис. 3.1. Схема сравнения
1
Cn
26
Каждое из слов C1,... , Cn , хранимое в ячейках памяти, состоит из
двух частей: m–разрядных данных Di (i = 1, ... , n), содержащих смысловую часть слова, и r–разрядных признаков (Прi), отличающих данное слово от множества других слов. При доступе к ассоциативной памяти признак выбираемого или записываемого слова заносится в регистр признаков (РгП), который по выходу связан со схемами сравнения &1,...,&n. По
второму входу каждая из схем сравнения соединена с признаковой частью
ячеек ассоциативной памяти. При совпадении кода признака, занесенного
в РгП, с кодом признака одного из слов C1,.., Cn, вырабатывается соответствующий сигнал Yi, который идентифицирует соответствующую ячейку
памяти и разрешает выборку из нее или занесение в нее данных из регистра данных (PгD). Таким образом, операция идентификации ячейки, содержащей искомое слово, осуществляется параллельно по всем словам,
размещенным в ассоциативной памяти. Память рассмотренного типа широко используется при выработке исполнительных (физических ) адресов
в ЭВМ с виртуальной памятью. Отличительными признаками слов в этом
случае являются математические (виртуальные) адреса страниц и данными – физические номера страниц, определяющие их месторасположение в
оперативной памяти.
Схемы сравнения &1,...,&n в памяти со структурой рис. 3.1 можно
считать элементарными процессорами, реализующими лишь одну логическую операцию – операцию сравнения, но одновременно над признаковыми частями всех слов. Процессорные элементы ассоциативных процессоров, ориентированных на обработку данных, выполняют не только логические, но и арифметические операции, поэтому их структура существенно сложнее.
3.2. Структура ассоциативных процессоров
Классификационным признаком деления ассоциативных процессоров является способ выполнения операций над словами в процессорных
элементах. По этому признаку ассоциативные процессоры делятся на параллельные, поразрядно–последовательные, пословно–последовательные
и блочно–ориентированные процессоры. При обработке данных в основном используются параллельные и поразрядно–последовательные процессоры, причем в параллельных процессорах операции выполняются параллельно над разрядами и словами ассоциативной памяти, а в поразрядно–
последовательных – последовательно по разрядам, но над всеми словами
27
одновременно.
Пословно–последовательные
и
блочно–
ориентированные процессоры предназначаются для целей информационного поиска в сочетании с циркуляцией данных. К ним можно отнести узлы сравнения, используемые в памяти на магнитных дисках для определения местоположения блока данных на дорожке по его ключу. Эти узлы
представляют собой блочно–ориентированные ассоциативные процессоры. При поиске слов в памяти с циркуляцией данных в линиях задержки
применяются пословно–последовательные ассоциативные процессоры.
Из рассмотренных типов ассоциативных процессоров для целей
множественной обработки данных применяют параллельные и поразрядно–последовательные процессоры.
Упрощенная структура параллельного процессора представлена на
рис.3.2.
k1
ПЭ1
m
1
M1
m
1
Mn
k2
k1
ПЭn
k2
Y1
Y2
Рис. 3.2. Схема упрощенной структуры
параллельного процессора
Процессорные элементы ПЭ1, ... , ПЭn представляют собой многоразрядные арифметическо–логические блоки. Каждый из них работает со
своим модулем (M1, ... , Mn ) ассоциативной памяти, выполняя операции
поиска, арифметической и логической обработки слов 1, …, m. Коммутирующие цепи k1 и k2 обеспечивают пересылку слов, выбранных по их содержанию, из модуля памяти в процессорный элемент и обратно. Для целей управления процессорные элементы соединены между собой и с процессором управления (ПУ) по каналу Y1. Обмен данными между модулями
28
ассоциативной памяти и оперативной памятью осуществляется по каналу прямой адресации Y2, т.е. обращения по этому каналу осуществляются
как и в обычной памяти по адресам слов.
Параллельные ассоциативные процессоры наиболее быстродействующие из всех типов ассоциативных процессоров, что обеспечивается
большими аппаратурными затратами. Сложность этих процессоров,
большие аппаратурные затраты и невысокая степень однородности составляющих компонентов затрудняют их реализацию в микроэлектронном
исполнении в виде больших интегральных схем. По этой причине параллельные процессоры изготавливаются лишь в единичных образцах.
Более широкое применение в настоящее время получают поразрядно–последовательные ассоциативные процессоры. Они строятся по структуре рис. 3.3, но каждый процессорный элемент представляет собой одноразрядный арифметическо–логический блок.
ПЭ2
ПЭn–1
ПЭn
1
n–2
m
i
2
1
Разряд
ПЭ1
0
Слова
n–1
Рис. 3.3. Схема поразрядно–последовательной обработки
Он оперирует с полями m–разрядного слова, хранимого в модуле ассоциативной памяти. Поля имеют переменную длину. Их размер устанавливается программистом (пользователем). Все арифметические и логические операции процессорный элемент выполняет над этими полями в пределах слова, суммируя их, умножая одно на другое и т д. Дополнительной
особенностью поразрядно–последовательных систем является синхронная
работа процессорных элементов, одновременно обрабатывающих один и
тот же разряд разных слов ( рис. 3.3). По этой причине ассоциативные
процессоры
рассматриваемого
типа
называют
поразрядно–
последовательными, пословно–параллельными процессорами с "вертикальной" обработкой данных.
Структура ПЭ поразрядно–последовательной системы представлена
29
на рис. 3.4. Он содержит одноразрядный арифметическо–логический
блок (АЛБ) с цепью учета переноса (Р) из младшего разряда в старший,
регистр Рг для хранения промежуточных результатов S, триггер маски М
и коммутирующую схему КС, обеспечивающую ассоциативный доступ к
разрядам слова, выборку и размещение данных в ассоциативной памяти,
связь с процессором управления. Триггер маски используется для запрета
выполнения операций над соответствующим словом. При нулевом состоянии этого триггера процессорный элемент пропускает и не выполняет
команду, поступающую на все процессорные элементы одновременно.
АП
КС
Р
исУУ
уно Р
М
иск2
уно
П
к2
П
S
АЛБ
P
Р
Рг
Рис. 3.4. Структура процессорного элемента
поразрядно–последовательной системы
Процессорный элемент реализует операции поиска, арифметические
и логические операции, системные операции. По командам поиска в модуле ассоциативной памяти отыскивается поле с заданным содержанием
или сравниваются между собой два поля. В обоих случаях поиск осуществляется путем поразрядного сравнения кода поля в модуле ассоциативной памяти и кода в регистре Рг. Для выполнения арифметических или
логических операций один из операндов также предварительно заносится
в этот регистр. Системные операции заключаются в пересылке содержимого модулей ассоциативной памяти в оперативную память процессора
управления и обратно.
Как
правило,
ассоциативный
процессор
поразрядно–
последовательного действия конструктивно исполняется в виде матрицы,
содержащей m процессорных элементов и ассоциативную память емкостью n слов по n бит.
Множество ассоциативных процессоров (АП), соединенных между
собой и процессором управления (ПУ) каналами управления (У) и передачи данных (D), образуют ассоциативную многопроцессорную систему (см.
30
рис.3.5). Ввод—вывод в ней осуществляется через процессор ввода—
вывода (ПВВ). Информация, поступающая в систему, заносится в оперативную память (ОП). ПУ выбирает из ОП команды, декодирует их с целью селекции команд обработки данных и задает эти команды для параллельного выполнения во всех ассоциативных процессорах, которые готовы к обработке данных. В ходе вычислений ПУ обеспечивает обмен данными между оперативной памятью системы и ассоциативной памятью
каждого процессора, а также выполняет системные функции по обеспечению трансляции программ, их редактированию, распараллеливанию обработки данных и т.д.
ПВВ
ПУ
У
Р
АП
АП
ОП
Д
АП
АП
Рис. 3.5. Упрощенная структура ассоциативной системы
3.3. Быстродействие и применение ассоциативных процессоров
Ассоциативные процессоры, как и матричные системы, характеризуются обработкой данных, осуществляемой под "жесткой" синхронизацией процессора управления. Поэтому номинальное и реальное быстродействие ассоциативных процессоров зависит от тех же факторов: числа и
быстродействия процессорных элементов; степени распараллеливания обработки данных; затрат времени на подготовку программ к выполнению.
Однако различные способы адресации данных, принятые в этих системах, обуславливают разницу в быстродействии их процессорных элементов. Для сравнения рассмотрим вначале параллельные ассоциативные
процессоры и матричные системы при условии, что они построены на одной элементной базе, оперируют со словами одинаковой разрядности, связаны с модулями памяти равного объема и равным временем цикла. Способы адресации, принятые в этих системах, не влияют на время выполнения арифметических операций, так как доступ по содержанию и доступ по
31
адресам операндов обеспечивает равное время их считывания из памяти. Совсем другая картина наблюдается при выполнении поиска. В параллельном ассоциативном процессоре поиск заданного слова осуществляется за один цикл работы памяти. В матричной системе поиск сводится к
перебору слов в памяти и их сравнению с заданным. При емкости памяти
процессорного элемента V слов требуется перебрать в среднем V/2 из них
для выполнения этой операции. В параллельном ассоциативном процессоре поиск выполняется за одну операцию, т.е. с большим быстродействием
в среднем в V/2 раз.
Сопоставим
теперь
по
быстродействию
поразрядно–
последовательные ассоциативные процессоры и матричные системы. При
выполнении арифметических операций над m—разрядными операндами
можно приближенно считать, что быстродействие процессорного элемента матричной системы в m раз превышает быстродействие аналогичного,
но одноразрядного элемента ассоциативного процессора. При выполнении
операций поиска эффективность ассоциативного процессора, выполняющего операцию поиска слова за m циклов памяти, выше эффективности
матричной системы, выполняющей эту же операцию в среднем за V/2
циклов обращения к памяти, так как обычно m<<V/2.
Таким образом, матричные системы в целом эффективнее ассоциативных процессоров при выполнении арифметических операций, но уступают им при выполнении операций поиска. Последнее предопределяет
области применения ассоциативных процессоров при решении задач с
большим числом независимых наборов данных, обработка которых преимущественно сводится к поиску данных и их модификации. Учитывая
большую долю операций поиска и сравнения в этих задачах, применение
ассоциативных процессоров для их решения сулит определенные преимущества по сравнению с матричными и другими мультипроцессорными
системами.
32
4. КОНВЕЙЕРНЫЕ МНОГОПРОЦЕССОРНЫЕ СИСТЕМЫ
Совмещенную во времени и организуемую общим устройством
управления обработку многих команд, находящихся на различных стадиях
выполнения, называют конвейерной обработкой. Для ее реализации средства обработки системы разделяются на множество простых по структуре
специализированных устройств – функциональных процессоров (ФП),
каждый из которых предназначается для реализации определенного действия над данными на уровне команд (сложение, умножение, логические
операции и т.п.) или макрокоманд (сдвиг, пересылка, сложение и т.п.).
Каждый ФП в цепи из таких процессоров выполняет операцию над блоком данных, после чего передает его процессору–преемнику и принимает
от процессора–предшественника на обработку новый блок данных. Обработка данных в каждом процессоре осуществляется под управлением
местного устройства управления. Общее устройство управления формирует множественный поток команд, каждый из которых направляется для
выполнения в соответствующий ФП.
4.1. Основы конвейерной организации обработки
Рассмотрим самую простую схему разделения процесса обработки
команды на два этапа – извлечение команды и выполнение команды. При
выполнении команды существуют интервалы времени, когда обращение к
памяти не производится. Их можно использовать для извлечения следующей команды параллельно с выполнением текущей. Этот подход иллюстрируется схемой, представленной на рис. 4.1,а. Конвейер имеет две независимые "рабочие позиции" – извлечения команды и выполнения команды. На первой позиции команда извлекается из памяти и загружается в
буфер. Когда вторая позиция будет свободна, первая передаст ей команду
из буфера. Пока команда будет выполняться на второй позиции, на первой
позиции можно использовать любой свободный цикл обращения к памяти
и извлечь следующую команду, загрузив ее в буфер. Этот процесс называется извлечением команды с опережением (instruction prefetch) или наложением извлечения (fetch overlap). Очевидно, что такая организация процесса ускорит обработку команд. Если оба этапа реализуются за одно и то
же время, цикл обработки команды сократится вдвое. Но в действительности вряд ли можно достичь увеличения скорости обработки вдвое (рис.
4.1,6). Тому есть две причины:
33
1. Время выполнения команды в общем случае больше времени
извлечения. Выполнение команды может потребовать извлечения и сохранения в памяти значений операндов и выполнения определенных операций с ними. Следовательно, "позиция извлечения" конвейера будет вынуждена определенное время простаивать, дожидаясь, пока заполненный
ею буфер не освободится.
2. Приступая к выполнению команды условного перехода, нельзя заранее предсказать, каков будет адрес следующей выполняемой команды.
Следовательно, позиция извлечения должна дождаться завершения выполнения текущей команды, получить от нее адрес следующей выполняемой команды, и только после этого можно будет приступить к ее извлечению.
Команда
Команда
Извлечение
Результат
Выполнение
а)
Ожидание
Новый адрес
Команда
Ожидание
Команда
Извлечение
Результат
Выполнение
Аннулирование
б)
Рис. 4.1. Двухпозиционный конвейер выполнения команд:
а — упрощенное представление;
б — детализированное представление
Потерю времени по второй причине можно сократить, если по определенному правилу предположить заранее результат условного перехода.
Самое простое правило можно сформулировать так: "После извлечения
команды условного перехода всегда извлекать следующую за ней по порядку команду, т.е. предполагать, что более вероятен отрицательный ис-
34
ход анализа условия". Тогда при выполнении команд условного перехода, в которых высказанное предположение оправдалось, потери времени
не будет. Если же предположение не оправдается, заранее извлеченная
команда может быть попросту удалена из буфера, а вместо нее извлечена
правильная, заданная результатом выполнения команды перехода.
Хотя эти факторы и не позволяют получить желаемого увеличения
скорости обработки вдвое, все–таки определенный выигрыш в быстродействии достигается. Чтобы еще более его увеличить, нужно организовать
на конвейере не две, а несколько "рабочих позиций", т.е. разделить цикл
обработки команды на большее количество независимых этапов (конечно,
они могут быть только относительно независимыми). Рассмотрим следующий вариант декомпозиции цикла обработки команды:
 извлечение команды (ИК) – чтение из памяти следующей выполняемой машинной команды;
 декодирование команды (ДК) – расшифровка кода операции и
спецификаторов операндов;
 вычисление адресов операндов (АО) – вычисление исполнительных адресов всех операндов–источников. При вычислении эффективных адресов учитываются заданные режимы адресации операндов, в том числе косвенная адресация, адресация со смещением, индексная и т.д.;
 извлечение операндов (ИО) – извлечение всех операндов–
источников из памяти. Операнды, которые ранее помещены в регистр, в выполнении этого этапа не участвуют;
 выполнение команды (ВК) – выполнение операций, заданных кодом операции в команде и, если это задано в команде, сохранение
результата в регистрах;
 запись результата (ЗР) – запись результата в память.
Время выполнения перечисленных этапов примерно одинаковое.
Для упрощения анализа будем в дальнейшем считать, что дело обстоит
именно так, – все этапы выполняются за один и тот же интервал времени –
назовем его тактом конвейера. На рис. 4.2 показана временная диаграмма
работы конвейера операций из шести позиций, который позволяет сократить время выполнения 9 машинных команд с 54 тактов до 14.
Эта диаграмма требует некоторых пояснений.
Во–первых, при ее построении предполагается, что каждая команда
проходит все шесть перечисленных этапов обработки. Конечно же, в действительности дело обстоит несколько по–другому. Самый простой при-
35
мер – при обработке команды загрузки этап ЗР опускается. Но при организации конвейера для упрощения схем управления синхронизация
производится таким образом, что каждая команда "задерживается" на этапе определенное время, хотя никакие операции с ней не выполняются.
Время (такты конвейера)
1
2
3
4
5
6
7
8
9
10 11 12 13 14
ИК ДК АО ИО ВК ЗР
Команда 1
ИК ДК АО ИО ВК ЗР
Команда 2
ИК ДК АО ИО ВК ЗР
Команда 3
ИК ДК АО ИО ВК ЗР
Команда 4
ИК ДК АО ИО ВК ЗР
Команда 5
ИК ДК АО ИО ВК ЗР
Команда 6
ИК ДК АО ИО ВК ЗР
Команда 7
ИК ДК АО ИО ВК ЗР
Команда 8
ИК ДК АО ИО ВК ЗР
Команда 9
Рис. 4.2. Временная диаграмма работы конвейера операций
Во–вторых, при построении диаграммы считается, что все этапы
можно выполнять параллельно и что при этом, в частности, не может возникнуть конфликт в соперничестве за доступ к памяти. Этапы ИК, ИО и
ЗР предполагают обращение к памяти. Из диаграммы следует, что все
операции доступа реализуются одновременно, но реальные конструкции
блоков памяти не позволяют это сделать. Следует, однако учитывать, что
извлекаемая информация может находиться в кэш–памяти или этапы ИО и
ЗР при выполнении определенных команд могут опускаться. Следовательно, довольно высока вероятность того, что конфликт в борьбе за доступ к памяти не окажет существенного влияния на скорость работы конвейера операций.
36
Существуют другие факторы, неблагоприятно сказывающиеся на
функционировании конвейера. Поскольку для реализации операций на
разных этапах нужно разное время, на некоторых этапах приходится
ждать (этот случай мы рассматривали выше на примере конвейера двух
операций). Более существенные сложности связаны с командами передачи
управления, в частности командами условного перехода, которые могут
привести к аннулированию нескольких этапов извлечения команд (и,
естественно, всех последующих этапов обработки извлеченных команд).
Аналогичным непредсказуемым событием для конвейера является и прерывание. На рис. 4.3 показана временная диаграмма обработки последовательности команд, в которой встретилась команда условного перехода,
тем же конвейером операций, который рассматривался при построении
диаграммы, представленной на рис.4.2.
Штраф за изменение естественного
порядка выполнения команд
Время (такты конвейера)
1
2
3
4
5
6
7
8
9
10 11 12 13 14
ИК ДК АО ИО ВК ЗР
Команда 1
ИК ДК АО ИО ВК ЗР
Команда 2
ИК ДК АО ИО ВК ЗР
Команда 3
ИК ДК АО ИО
Команда 4
ИК ДК АО
Команда 5
ИК ДК
Команда 6
ИК
Команда 7
ИК ДК АО ИО ВК ЗР
Команда 8
ИК ДК АО ИО ВК ЗР
Команда 9
Рис. 4.3. Влияние команды условного перехода
на работу конвейера операций
Предположим, что 3–я команда оказалась командой условного перехода, передающей управление 8–й команде. До тех пор, пока 3–я команда
37
не пройдет "позицию" ВК, никакой информацией о том, на какую команду задан переход в ней, схема управления конвейером не располагает.
Следовательно, до этих пор конвейер работает в обычном режиме – извлекает 4–ю команду и т.д. В том варианте, который показан на рис. 4.2,
3–я команда тоже была командой условного перехода, но заданное условие перехода выполнено не было, а потому сохранился естественный порядок выполнения команд и были реализованы все потенциальные преимущества конвейерной организации обработки. В случае, показанном на
рис. 4.3, "произошла неприятность" – заданное в команде условие перехода было выполнено, и естественный порядок выполнения команд был изменен, что выяснилось только на исходе 7–го такта. После этого пришлось
"очистить" все позиции конвейера, поскольку выполненные на них операции оказались лишними. На 8–м такте в конвейер была "загружена" 8–я
команда, а на интервале от 9–го до 12–го такта ни одна команда с конвейера не "сошла". Это и есть "штраф" за то, что мы не могли предусмотреть
действительную передачу управления в программе.
Существует еще множество нюансов, которые следует учитывать
при организации конвейерной обработки. Например, на этапе АО могут
использоваться регистры, содержимое которых к этому времени изменено
предыдущей командой, еще не покинувшей конвейер. Могут также возникнуть конфликты при доступе к регистрам или памяти. В схеме управления конвейером должны быть предусмотрены средства, позволяющие
справляться со всеми подобными ситуациями.
Может показаться, что чем большее количество "рабочих позиций" в
конвейере (т.е. чем более детально разделен на этапы цикл обработки команды), тем выше будет быстродействие процессора. Однако это не совсем так. Существуют два фактора, которые сводят на нет, казалось бы,
такую простую концепцию повышения эффективности конвейера.
1. На каждой позиции конвейера существуют определенные накладные расходы, связанные с передачей данных из буфера в буфер и выполнением всевозможных подготовительных операций. Такие накладные расходы могут заметно увеличить время обработки отдельной команды, пока
она пройдет все позиции конвейера. Это становится особенно существенным, когда последовательные команды логически очень тесно связаны то
ли через часто встречающиеся команды условного перехода, то ли через
данные, которые одной командой записываются в память, а другой – считываются.
2. Сложность схем управления памятью и регистрами, оптимизации
38
работы конвейера резко возрастает с увеличением количества позиций.
Это может привести к тому, что схема управления конвейером станет
сложнее тех средств, которые реализуют "полезные" операции.
Из всего сказанного следует вывод – конвейерная организация может существенно повысить быстродействие процессора, но требует хорошо продуманных проектных решений, поддерживающих оптимальное соотношение между предполагаемым повышением производительности и
сложностью средств реализации.
4.2. Структура конвейерных систем и принципы их работы
Для организации конвейерной обработки требуются существенные
затраты на синхронизацию процессов обработки данных в цепочке ФП, на
буферы для промежуточного хранения команд, находящихся на различных стадиях выполнения, на связи между буферами, на дополнительные
схемы декодирования команд в буферах и т.д. Поэтому такой вид обработки реализуется только в больших ЭВМ, системах и комплексах.
Упрощенная структура центральной части конвейерной системы
представлена на рис. 4.4. В его составе выделены: функциональные процессоры (ФП); устройство управления (УУ); буфер команд (БК), буфер
операндов (БО); многомодульная оперативная память с местным устройством управления (УОП) и модулями памяти (МП).
ФП
ФП
ФП
БК
УУ
БО
УОП
МП
МП
Рис. 4.4. Схема структуры конвейерного процессора
Централизованное управление в рассматриваемой системе осуществляет общее для всех функциональных процессоров устройство
39
управления. Оно обеспечивает вызов команд и операндов из оперативной памяти в буфер команд и буфер операндов соответственно, предварительно декодирует команды с целью определения места их выполнения,
управляет передачей операндов в соответствии с заданной последовательностью их обработки, локализует команды передачи управления и выполняет их.
Быстродействие электронной обработки данных в функциональных
процессорах обычно выше быстродействия оперативной памяти, поэтому
для обеспечения непрерывности конвейерной обработки оперативная память строится по многомодульному принципу с расслоением обращений.
При модульном построении памяти операции чтения – записи выполняются независимо в каждом из модулей, что позволяет совместить их работу во времени. Расслоение обращений к памяти обеспечивает непрерывность совмещения операций чтения – записи в модулях и заключается в
закреплении соседних адресов ячеек в модулях с соседними номерами.
Число расслаиваемых модулей определяет коэффициент расслоения памяти. Чем выше этот коэффициент, тем выше производительность памяти.
Вместе с тем производительность существенно зависит от порядка адресации команд и операндов, определяемого структурой программ.
Наибольшая производительность памяти достигается при выполнении
программ линейной структуры, в которых обращение к командам осуществляется в естественном порядке. В этом случае время между моментами считывания команд из оперативной памяти уменьшается в К раз, где
К – коэффициент расслоения.
Информация, считываемая из оперативной памяти, направляется для
промежуточного хранения на время обработки в буферы команд и операндов. Каждый из буферов представляет собой цепочку регистров, связанных с функциональными процессорами и между собой. При продвижении информации в буфере команд осуществляется поэтапная обработка
команд. При этом команды частично декодируются с целью определения
типа операции, места ее выполнения, адресов операндов. На основе данных декодирования устройство управления вырабатывает запросы к оперативной памяти для чтения и записи операндов, а также управляет работой всего конвейера, определяя предшественников и преемников данных в
процессе выполнения операций.
Средства программирования и трансляции программ для конвейерных систем строятся из расчета обеспечения максимального параллелизма
обработки данных в цепочке из регистров буферов команд и функцио-
40
нальных процессоров.
4.3. Быстродействие конвейерных систем
Максимальное быстродействие конвейерных систем, определяемое
тактовой частотой работы электронных компонентов, достигается при обработке линейных участков программ. При нарушениях естественного порядка обработки команд, вызываемых командами передачи управления в
программах, все заблаговременно считанные из оперативной памяти команды, следующие за командой перехода, не выполняются, так как в программе реализуется ветвление или цикл. Поэтому в работе конвейера возникает вынужденный перерыв, длящийся до момента считывания из оперативной памяти команды, которой передано управление. Время чтения
команды в этом случае соответствует полному циклу выполнения операции чтения в модуле оперативной памяти.
Для приближенной оценки быстродействия системы с последовательной и конвейерной обработкой примем, что выполнение команды
осуществляется в среднем за r машинных тактов длительностью τ единиц
времени каждый. Параметр r называют глубиной перекрытия, так как он
определяет число одновременно обрабатываемых команд в системе.
При последовательной обработке в каждый момент времени в процессоре обрабатывается одна команда. Продолжительность обработки
фрагмента программы из n команд составит T1 = nrτ единиц времени.
При конвейерной обработке в случае отсутствия команд перехода
(на линейном фрагменте программы) для завершения первой команды потребуется r тактов конвейера, а для завершения остальных n–1 команд –
еще n–1 тактов. Тогда суммарное время Tr, которое потребуется на выполнение всех n команд, можно оценить по формуле:
Tr = (r + (n – 1))τ .
Это соотношение легко проверить, обратившись к временной диаграмме на рис. 4.2. Девятая команда закончится на исходе 14–го такта:
14 = (6 + (9 – 1)).
Коэффициент повышения быстродействия Sr благодаря использованию конвейера оценивается по формуле:
T
nr
nr
.
Sr  1 

Tr ( r  ( n  1 )) r  n  1
41
Очевидно, что в пределе (при n→∞) быстродействие системы при
конвейерной обработке в r раз превышает быстродействие при последовательной обработке. Однако приведенные оценки быстродействия системы
с конвейерной обработкой команд являются предельными и обеспечиваются лишь в случае обработки непрерывного потока команд линейных
участков программ. При выполнении команд переходов быстродействие
может снизиться до уровня, соответствующего быстродействию при последовательной обработке.
Для иллюстрации этих положений рассмотрим пример конвейерной
обработки команд, занумерованных в порядке 1, 2,..., 9 причем команда с
номером 3 является командой перехода (рис. 4.3). В ходе выполнения команды 3 в процессор вызываются и начинают обрабатываться команды 4,
5, 6, 7. Если бы все команды обрабатывались в естественном порядке их
следования, то в моменты времени 6, 7, ... , 14 в системе завершалось бы
выполнение по одной команде, т.е. процессор достиг бы своего предельного быстродействия. Однако команда 3 является командой перехода и на
момент ее завершения известно, что переход осуществляется к команде 8.
Следовательно, результат предварительной обработки команд 4, 5, 6, 7
аннулируются. Очевидно, что при переходе через одну команду теряется
непроизводительно один такт времени процессора, через 2 команды – 2
такта и т.д. Максимальное число непроизводительно теряемых тактов
равно r, что соответствует переходу через l ≥ r команд. Отметим также,
что при переходе от текущей команды k к команде (k + l + 1), при l ≥ r,
команды, начиная с номера (k + r), не вызываются из оперативной памяти,
так как в момент завершения команды k уже известно, что последующей
обрабатываемой командой будет (k + l + 1).
Для приближенной оценки быстродействия системы при возможных
нарушениях естественного порядка конвейерной обработки команд обозначим через pl вероятность выполнения в программе команд, передающих управление через l команд, т.е. к (l + 1)–й команде, начиная от текущей
(l= 1, ... , L– 1). Тогда с вероятностью p0 команды обрабатываются
в естественном порядке и завершаются каждый такт (потерями в начале
обработки при достаточно большом числе команд программы можно пренебречь). С вероятностью p1 осуществляется переход через 1 команду, в
результате чего теряется 1 такт времени процессора и команды заверша-
ются каждые 2 такта и т д. С вероятностями pr–1 и pr 
42
L 1
 pl
соответ-
l r
ственно осуществляется переход через r – 1 команд с потерей r – 1 тактов,
и через r и более команд с потерей r тактов, но завершение обработки команд в последних двух случаях осуществляется каждый r такт (см.
рис.4.3). В результате среднее время между моментами завершения обработки команд составит
Tср   (
r 1
 ( i  1 ) pi  rpr )
i 0
и быстродействие процессора:
B
1
r 1
,
 (  ( i  1 ) pi  rp r )
i 0
r 1
где
 pi  1
i 0
Из последнего выражения получим, что при p0 = 0, т.е. при естественном порядке обработки команд, быстродействие системы максимально: Bmax=1/τ, при p0 = 1, т.е. при выполнении одних лишь команд перехода, причем переходы осуществляются через r – 1 и более команд,
быстродействие системы минимально: Bmin=1/(rτ).
Рассмотренные оценки быстродействия системы применимы к так
называемой синхронной конвейерной обработке команд, когда длительность такта τ выбирается с учетом самого продолжительного этапа обработки команд. Для увеличения быстродействия системы могут применяться и другие виды конвейерной обработки, например, асинхронная конвейерная обработка с опережающим "просмотром" команд переходов, промежуточные формы конвейерной обработки. Суть асинхронной обработки
заключается в использовании переменной длительности такта, соответствующей продолжительности самого длительного этапа выполнения команд, требуемой для каждой команды индивидуально. Тем самым сокра-
43
щаются простои, возникающие при синхронной обработке внутри каждого такта для всех этапов выполнения команд за исключением самых
продолжительных. Процесс начинается одновременно, но длительность
рабочего такта определяется наиболее длительной операцией на одном из
уровней, после чего начинается новый рабочий такт.
4.4. Обработка команд перехода
При проектировании конвейера операций основная сложность –
обеспечить непрерывное поступление "правильных" команд на вход конвейера. Главные неприятности исходят от команды условного перехода.
Дело в том, что до того момента, как будет завершено выполнение предшествующей ей команды, нельзя с уверенностью сказать, на какой адрес в
программе будет задан переход в этой команде (точнее, сохранится ли
естественный порядок выполнения команд или придется его отменить).
Существует несколько подходов к решению проблемы условных переходов при конвейерной обработке:
 организация множества потоков;
 предварительное извлечение команды в точке перехода;
 организация буфера цикла;
 предсказание перехода;
 задержка выполнения перехода.
4.4.1. Организация множества потоков
В простейшем варианте конвейера приходится платить штраф за
опережение событий при выполнении команды перехода, поскольку необходимо решать, какую из двух команд извлекать из памяти на следующем
такте после команды условного перехода. "Грубый" способ преодолеть
это затруднение – включить в состав процессора второй конвейер (но не
полностью, а только начальные позиции) и загрузить в каждый конвейер
одну из двух команд–претендентов. Таким образом, получается два потока. При реализации этого подхода возникают следующие проблемы.
Когда в процессоре параллельно работают два и более конвейеров,
появляются дополнительные возможности конфликтов за доступ к памяти
и регистрам. Для их разрешения требуется увеличивать длительность такта конвейера, в результате чего вместо ожидаемого повышения скорости
можно получить даже ее снижение при одновременном росте сложности
44
схемы управления. В поток может попасть еще одна команда перехода
до того, как первая будет окончательно обработана. Каждая такая команда
потребует своего потока.
Но несмотря на эти сложности, многопотоковая стратегия была использована на практике и показала свою работоспособность.
4.4.2. Предварительное извлечение команды в точке перехода
Когда в программе встречается команда условного перехода, она
немедленно распознается, и в очередном такте из памяти извлекается не
только следующая за ней команда, но и команда в точке перехода. Последняя не "запускается" на конвейер, но сохраняется в специальном буфере до тех пор, пока команда условного перехода не попадет на позицию
выполнения. Если окажется, что нужно передать управление на точку перехода, то соответствующая команда уже заготовлена в буфере.
4.4.3. Организация буфера цикла
В процессоре организуется специальный блок памяти сверхвысокого
быстродействия, в котором хранятся n последних команд, извлеченных из
оперативной памяти в процессе выполнения текущей программы. Если в
обрабатываемом фрагменте программы встретится команда условного перехода, аппаратные средства процессора первым делом анализируют, не
находится ли точка перехода среди тех команд, что ранее были записаны в
этот буфер. Если дело обстоит именно так, команда извлекается из буфера
и "ставится" на конвейер. Применение буфера цикла имеет три достоинства.
1. Поскольку в буфере хранится целый фрагмент программы, то помимо команды, размещенной в точке перехода, в нем могут оказаться и
следующие за ней команды, а значит, их не придется извлекать из памяти.
2. Если адрес перехода недалеко отстоит от команды перехода, то
команда, на которую задан переход, уже окажется в буфере. Это происходит при выполнении часто встречающихся программных конструкций
вроде if–then и if–then–else.
3. Этот подход очень хорошо сочетается с организацией в программе
итерационных циклов (откуда и произошло наименование loop buffer –
буфер цикла). Если буфер будет достаточно большим, чтобы включить все
команды цикла, это избавит процессор от необходимости повторно извле-
45
кать их из памяти при обработке всех последующих циклов в программе.
В принципе буфер цикла ничем не отличается от специализированного кэша команд. Отличие только в том, что в буфере цикла команды
хранятся в той же последовательности, что и в программе, да еще в размерах буфера и, соответственно, его стоимости.
4.4.4. Предсказание перехода
Существует множество методов, имеющих целью предсказать, изменится ли естественный порядок обработки команд программы в результате выполнения команды условного перехода. Наибольшую популярность среди них приобрели следующие:
 переход не предполагается никогда;
 всегда предполагается, что произойдет переход;
 переход предполагается на основе анализа кода операции перехода;
 использование переключателя "принято/не принято";
 анализ таблицы предыстории переходов.
Первые три подхода – статические, т.е. при их реализации не используется информация о характере текущей выполняемой программы
вплоть до появления команды условного перехода. Последние два подхода учитывают поведение именно текущей программы и, таким образом,
являются в определенной мере динамическими.
Два первых подхода – самые простые. Предполагается, что конвейер
всегда работает в расчете на сохранение естественного порядка следования команд, либо всегда предполагается, что команда условного перехода
нарушит естественный порядок. Изучение статистических характеристик
программ показало, что переход реализуется более чем в половине случаев выполнения команд условного перехода. Поэтому если затраты на
предварительное извлечение в обоих подходах одинаковы, то преимущество имеет стратегия "всегда предполагать, что произойдет переход". В
этом случае "процент попаданий" будет выше. Но тут следует учитывать и
другие особенности структурной организации компьютера. В частности,
если в компьютере используется страничная организация памяти, то цена
неверного предсказания перехода будет довольно высокой, поскольку
ошибочно запустится механизм страничного обмена, а он требует достаточно много времени. В результате вместо ожидаемого выигрыша, в сред-
46
нем по сравнению с альтернативным подходом, получится существенный проигрыш.
Последний вариант статического подхода основан на анализе статистических характеристик разных вариаций команд условного перехода. В
соответствии с результатами этого анализа схема управления конвейером
проектируется таким образом, что для одних кодов операций условного
перехода всегда предполагается сохранение естественного порядка обработки команд, а для других – всегда предполагается переход. Как показали исследования, такая стратегия оправдывается более чем в 75% случаев.
Для повышения точности предсказания перехода в некоторых процессорах с конвейерной организацией используются разные варианты динамического подхода, которые предполагают анализ предыстории обработки команд условного перехода в данной программе. Например, с каждой командой условного перехода связывается однобитовый флаг или несколько битов, в которых отражается предыстория выполнения этой команды. Обычно этот флаг называют переключателем "принято/не принято" и информация в нем используется процессором для принятия решения
при очередной выборке данной команды. Как правило, переключатель
связывается с командой, находящейся не в оперативной, а в быстродействующей памяти временного хранения, чаще всего – в кэше. Когда команда удаляется из кэша, информация об ее предыстории теряется. Иногда применяется и другой вариант – организуется таблица на несколько
последних выполненных командах условного перехода, каждый элемент
которой содержит один или несколько битов. Процессор может обращаться к таблице ассоциативно, как к кэшу, или по результатам анализа младших разрядов адреса команды перехода.
Если для хранения предыстории выделен всего один бит, то в нем
фиксируется, был выполнен переход при последнем обращении к этой
команде или нет. При такой организации, в случае, если определенная команда условного перехода в программе чаще всего приводит к изменению
естественного порядка обработки программы, как это бывает в команде,
завершающей цикл, ошибка предсказания возникает дважды при выполнении цикла: на первой итерации и на последней.
Если для хранения предыстории выделяется два бита, в них можно
записать результат двух последних выполнений команды, связанной с переключателем, или информацию о состоянии, определяемую каким–либо
правилом. Один из наиболее часто применяемых вариантов переключения
состояний иллюстрируется диаграммой, помещенной на рис. 4.5.
47
Процесс принятия решения представлен в виде конечного автомата с четырьмя состояниями. Если два последних выполнения данной команды дали один и тот же результат (т.е. в обоих случаях был выполнен
переход или в обоих случаях сохранился естественный порядок), предсказывается, что и очередное выполнение команды должно привести к тому
же результату. Если предсказание не оправдалось, то оно сохраняется еще
на одно обращение к команде, а если и повторное предсказание не оправдалось, следующее предсказание будет противоположным. Таким образом, алгоритм принятия решения изменяет характер предсказания только
после двух подряд неудачных попыток.
Нет перехода
Переход
Предсказать
переход
Предсказать
переход
Переход
Нет перехода
Переход
Предсказать
отсутствие
перехода
Нет перехода
Переход
Предсказать
отсутствие
перехода
Нет
перехода
Рис. 4.5. Диаграмма состояний автомата предсказания перехода
При использовании информации о предыстории возникает проблема
определения адреса перехода, который является операндом команды, а
следовательно, не может быть определен до тех пор, пока команда не будет расшифрована. Предсказание же будет эффективным в том случае, если команда, размещенная по адресу перехода, будет извлекаться сразу же
после принятия решения. Поэтому в предыстории желательно хранить не
только информацию о самом факте перехода при выполнении команды, но
и об адресе перехода. Для этого организуется отдельный буфер адресов
переходов или таблица предыстории переходов.
Такая таблица представляет собой блок кэш–памяти небольшого
48
объема, связанный со средствами реализации позиции ИК (извлечь команду) конвейера. Каждый элемент таблицы содержит три поля: адрес
команды перехода, переключатель "принято/не принято" размером в несколько бит (информация о состоянии автомата принятия решения) и поле
с информацией об адресе перехода. В большинстве вариантов реализации
такой таблицы третье поле содержит сам адрес перехода. Другой вариант
– хранить в нем не адрес, а команду, размещенную в основной памяти по
адресу перехода. Понятно, что при выборе варианта следует найти компромисс между желанием максимально повысить скорость обработки (для
этого следует в третьем поле хранить саму команду) и желанием уменьшить объем таблицы, значит и стоимость процессора (для этого следует
хранить адрес).
4.4.5. Задержка выполнения перехода
Задержанный переход – это способ повышения эффективности работы конвейера, заключающийся в том, что переход выполняется после команд, которые в исходной, нереорганизованной программе стояли за командой перехода (отсюда и определение "задержанный"). Команда, следующая в программе сразу же после команды перехода, называется слотом задержки (delay slot). Применение такой реорганизации иллюстрируется в табл. 4.1. В колонке "нормальный переход" представлена исходная
нереорганизованная программа на мнемокоде машинных команд. В этой
программе после выполнения команды, располагающейся по адресу 102,
происходит переход на команду по адресу 105. Чтобы упростить работу
конвейера, исходная программа реорганизуется и в нее включается "холостая" команда NOOP сразу же за командой перехода (колонка "задержанный переход" в табл. 4.1). Еще более увеличится производительность конвейера, если команды в ячейках 101 и 102 поменять местами. Команда
JUMP извлекается перед командой ADD, но выполняется уже после того,
как команда ADD извлечена, а потому изменение состояния счетчика команд не влияет на сохранение исходной последовательности выполнения
операций в алгоритме программы. Поэтому оказывается, что перестановка
команд в исходной программе не влияет на правильность реализации алгоритма, но при этом можно отказаться от включения в программу "холостой" команды NOOP.
Метод перестановки команд можно применять по отношению к командам безусловного перехода, вызова и возврата из подпрограмм. Но по
49
отношению к командам условного перехода его следует несколько видоизменить. Если условие, проверяемое в команде перехода, может быть
изменено командой, непосредственно предшествующей команде условного перехода, компилятор должен вставить между ними команду NOOP и
не должен изменять порядок следования команд. В противном случае
можно вставить подходящую команду после команды условного перехода.
Таблица 4.1
Реорганизация программы и включение задержанного перехода
Адрес
100
101
102
103
104
105
106
Оптимизированный
Нормальный пере- Задержанный перезадержанный переход
ход
ход
LOAD X, A
LOAD X, A
LOAD X, A
ADD 1, A
ADD 1, A
JUMP 105
JUMP 105
JUMP 106
ADD 1, A
ADD A, B
NOOP
ADD A, B
SUB C, B
ADD A, B
SUB C, B
STORE A, Z
SUB C, B
STORE A, Z
STORE A, Z
Аналогичная тактика, названная задержанной загрузкой (delayed
load), может быть применена и в отношении команд LOAD. При этом регистры, используемые в команде LOAD, блокируются процессором. Процессор затем продолжает выполнение потока команд до тех пор, пока не
встретится команда, обращающаяся к данному регистру. В этой точке
процессор будет ждать, пока не завершится выполнение начатой ранее
команды загрузки. Если компилятор может реорганизовать последовательность команд таким образом, что часть операций может быть выполнена конвейером в то время, пока выполняется пересылка данных из памяти в регистр, производительность работы процессора повысится.
50
5. СИММЕТРИЧНЫЕ МУЛЬТИПРОЦЕССОРНЫЕ СИСТЕМЫ
5.1. Отличительные признаки и преимущества симметричных
мультипроцессорных систем
Для класса симметричных мультипроцессорных (SMP – symmetric
multiprocessor) систем характерны следующие отличительные признаки:
 наличие двух или более одинаковых или близких по характеристикам процессоров;
 процессоры имеют доступ к общей памяти, к которой они подсоединены или через общую системную магистраль, или через другой механизм обеспечения взаимодействия, но в любом случае время доступа к ресурсам памяти со стороны любого процессора примерно одинаково;
 процессоры имеют доступ к общим средствам ввода–вывода либо
через один и тот же канал, либо через раздельные каналы;
 все процессоры способны выполнять одинаковый набор функций
(отсюда и определение симметричная система);
 весь комплекс управляется общей операционной системой, которая обеспечивает взаимодействие между процессорами и программами на
уровне заданий, файлов и элементов данных.
Первые четыре признака в этом списке в дальнейших комментариях
вряд ли нуждаются. Что касается пятого признака, то в нем проявляется
наиболее важное отличие SMP–систем от кластерных систем, в которых
взаимодействие между компонентами осуществляется, как правило, на
уровне отдельных сообщений или полных файлов. В SMP–системе возможен обмен информацией между компонентами и на уровне отдельных
элементов данных и, таким образом, можно организовать более тесное
взаимодействие между процессами. В SMP–системе распределение процессов или потоков задач между отдельными процессорами возлагается на
операционную систему.
Наиболее существенные преимущества SMP–систем перед однопроцессорными состоят в следующем.
Повышение производительности. Если отдельные задачи приложения могут выполняться параллельно, система, располагающая множеством процессоров, будет работать быстрее, чем система с одним процес-
51
сором того же типа.
Надежность. Поскольку все процессоры в SMP–системе однотипны
и могут выполнять одни и те же задачи, в случае отказа одного из них запланированную для него задачу можно передать другому процессору.
Следовательно, отказ одного из процессоров не приведет к потере работоспособности всей системы.
Возможность функционального наращивания. Пользователь может
повысить производительность системы, включив в ее состав дополнительные процессоры.
Производство однотипных систем разной производительности. Изготовитель компьютеров может предложить клиентам гамму систем с
одинаковой архитектурой, но разной стоимостью и производительностью,
отличающихся количеством процессоров.
Нужно отметить, что все эти преимущества чаще всего являются потенциальными и далеко не всегда на практике их удается реализовать.
Очень привлекательной для пользователей особенностью SMP–
систем является ее прозрачность. Операционная система берет на себя все
заботы по распределению задач между отдельными процессорами и синхронизации их работы.
5.2. Структурная организация SMP–систем
На рис. 5.1 показана обобщенная блок–схема мультипроцессорной
системы.
Процессор
Процессор
Процессор
Модуль
ввода–
вывода
Подсистема
взаимодействия
Модуль
ввода–
вывода
Модуль
ввода–
вывода
Общая оперативная память
52
Рис. 5.1. Обобщенная схема мультипроцессорной системы
В составе системы имеется два процессора или больше, каждый из
которых располагает всем комплектом необходимых узлов – устройством
управления, АЛУ, регистрами и блоком кэша. Каждый процессор имеет
доступ к главной памяти системы и устройствам ввода–вывода через некоторую подсистему взаимодействия. Процессоры могут обмениваться
данными и сообщениями через главную память (для этого в ней выделяется отдельная область связи). Кроме того, в системе может поддерживаться
и возможность непосредственного обмена сигналами между отдельными
процессорами. Часто общая память организована таким образом, что процессоры могут одновременно обращаться к ее разным блокам. В некоторых вариантах систем процессоры располагают блоками локальной памяти и собственными каналами ввода–вывода помимо ресурсов общего
пользования.
Варианты структурной организации мультипроцессорных систем
можно классифицировать следующим образом:
 системы с общей или разделяемой во времени магистралью;
 системы с многопортовой памятью;
 системы с центральным устройством управления.
5.2.1. Системы с общей магистралью
Использование общей магистрали в режиме разделения времени –
это самый простой способ организации совместной работы процессоров в
SMP–системе (рис. 5.2). Структура магистрали и интерфейс практически
те же, что и в однопроцессорной системе. В составе магистрали предусматриваются линии данных, адреса и управляющих сигналов. Для упрощения работы механизма прямого доступа к памяти со стороны модулей
ввода–вывода принимаются следующие меры.
Адресация организуется таким образом, что по коду адреса можно
различать модули при определении источников и приемников данных.
Арбитраж. Любой модуль ввода–вывода может временно стать задатчиком магистрали. Арбитр с помощью некоторого механизма приоритетов обеспечивает разрешение конфликтов при появлении конкурирующих запросов на управление магистралью.
53
Разделение времени. Когда один из модулей получает право
управления магистралью, остальные модули блокируются и должны, если
в том есть необходимость, приостановить выполнение операций и ожидать, пока им будет предоставлен доступ к магистрали.
Эти функции, обычные для однопроцессорных систем, можно без
особых изменений использовать и в мультипроцессорной системе. Основное отличие в том, что в борьбе за право доступа к блоку памяти принимают участие не только модули ввода–вывода, но и процессоры.
Процессор
Процессор
Процессор
Кэш L1
Кэш L1
Кэш L1
Кэш L2
Кэш L2
Общая
Кэш L2
магистраль
Общая
оперативная память
Подсистема
ввода-вывода
Адаптер
ввода-вывода
Адаптер
ввода-вывода
Рис. 5.2. Организация SMP системы с общей магистралью
Магистральная структура связей имеет несколько преимуществ по
сравнению с другими подходами к реализации подсистемы взаимодействия.
Простота. Этот вариант – самый простой, поскольку физический
интерфейс, схема адресации, механизм арбитража и логика разделения ресурсов магистрали остаются, по существу, такими же, как и в однопроцессорной системе.
Гибкость. Систему с магистральной организацией связей довольно
просто переконфигурировать, добавив в нее новые процессоры.
Надежность. Магистраль является пассивной средой, и отказ любого подключенного к ней устройства не приводит к потере работоспособ-
54
ности системы в целом.
Основной недостаток системы с общей магистралью – ограниченная
производительность. Все операции доступа к главной памяти должны
проходить по единственному пути – через общую магистраль и, следовательно, быстродействие системы ограничено длительностью цикла магистрали. Частично с этой проблемой позволяет справиться оснащение каждого процессора собственным блоком кэш–памяти, что снижает количество обращений к главной памяти. Как правило, применяется двухуровневая организация кэша: кэш уровня L1 размещается в БИС процессора
(внутренний кэш), а кэш уровня L2 – внешний.
Однако применение кэш–памяти в мультипроцессорной системе порождает проблему согласованности или информационной целостности
кэшей отдельных процессоров.
5.2.2. Системы с многопортовой памятью
Использование в SMP–системах многопортовой памяти позволяет
организовать прямое обращение каждого процессора и модуля ввода–
вывода к общему массиву информации, независимо от всех других (рис.
5.3). При этом каждый модуль памяти должен быть оснащен логической
схемой разрешения возможных конфликтов. Для этого чаще всего портам
назначаются определенные приоритеты. Как правило, электрический и
физический интерфейс каждого порта идентичен и по отношению к
устройству, подключенному к этому порту; модуль памяти можно рассматривать как однопортовый. Поэтому в схеме процессора или модуля
ввода–вывода практически не нужно проводить никаких изменений для
подключения к многопортовой памяти.
Блок
памяти
Блок
памяти
Блок
памяти
Процессор
Модуль
ввода–
вывода
Процессор
Модуль
ввода–
вывода
55
Рис. 5.3. Схема многопортовой памяти
Существенно усложняется только схема блока общей памяти, но это
окупается повышением производительности системы в целом, поскольку
каждый процессор имеет свой канал для доступа к информации совместного пользования. Другое преимущество систем с такой организацией —
возможность выделения областей памяти для исключительного использования определенным процессором (или группой процессоров). Это упрощает создание системы защиты информации от несанкционированного
доступа и хранения программ восстановления в областях памяти, недоступных для модификации другими процессорами.
Есть еще один существенный момент при работе с многопортовой
памятью. При обновлении информации в кэше любого процессора необходимо выполнять сквозную запись в главную память, поскольку не существует иного способа оповестить другие процессоры о внесении изменений в данные.
5.2.3. Системы с центральным устройством управления
Центральное устройство управления организует раздельные потоки
данных между независимыми модулями – процессорами, памятью и модулями ввода–вывода. Контроллер может запоминать запросы и выполнять функции арбитра и распределителя ресурсов. На него также возлагаются функции передачи информации о состоянии, управляющих сообщений и оповещения процессоров об изменении информации в кэшах.
Поскольку все логические функции, связанные с координацией работы компонентов системы, реализуются в одном центральном устройстве
управления, интерфейсы процессоров, памяти и модулей ввода–вывода
остаются практически неизменными. Это обеспечивает системе почти такую же гибкость и простоту, как и при использовании общей магистрали.
Основной недостаток такого подхода – существенное усложнение схемы
устройства управления, которое потенциально может привести к снижению производительности.
Структура с центральным устройством управления в свое время была широко распространена при построении многопроцессорных вычислительных комплексов на базе больших машин. В настоящее время они
56
встречаются очень редко.
5.3. SMP–системы на базе больших вычислительных машин
5.3.1. Структура SMP–системы на базе больших
вычислительных машин
В большинстве SMP–систем персонального пользования и рабочих
станций для организации взаимодействия между компонентами используется системная магистраль. В комплексах на базе больших компьютеров
(мейнфреймов) применяется альтернативный подход. Блок–схема подобного комплекса представлена на рис. 5.4. В семейство входят компьютеры
разных классов – от однопроцессорных с единственной платой главной
памяти до высокопроизводительных систем с десятком процессоров и четырьмя блоками главной памяти. В конфигурацию также включены дополнительные процессоры, которые выполняют функции модулей ввода–
вывода. Основные компоненты вычислительных комплексов на базе
больших вычислительных машин следующие.
Процессор ПР — CISC–микропроцессор, в котором управление обработкой наиболее часто используемых команд реализовано аппаратно, а
остальные команды выполняются с помощью микропрограмм. В состав
БИС каждого ПР входит кэш уровня L1 объемом 64 Кбайт, в котором хранятся и команды, и данные.
Кэш уровня L2 объемом 384 Кбайт. Блоки кэша L2 объединены по
два в кластеры, причем каждый кластер поддерживает работу с тремя
процессорами и обеспечивает доступ ко всему адресному пространству
основной памяти.
Адаптер переключения магистрали — BSN (bus–switching network
adapter), который организует связь блоков кэша L2 с одним из четырех
блоков главной памяти. В состав BSN входит и кэш уровня L3 объемом 2
Мбайт.
Одноплатный блок главной памяти объемом 8 Гбайт. В состав комплекса входят четыре таких блока, обеспечивая общий объем главной памяти 32 Гбайт.
В этой структуре есть несколько особенностей, на которых стоит
остановиться подробнее:
57
 переключаемая подсистема взаимосвязей;
 совместно используемый кэш уровня L2;
 кэш уровня L3.
Пр
Пр
L2
Пр
L2
Пр
Пр
L2
Пр
L2
Пр
Пр
L2
Пр
L2
Пр
Пр
L2
Пр
L2
BSN
магистраль 0
BSN
магистраль 1
BSN
магистраль 2
BSN
магистраль 3
Память
блок 0
Память
блок 1
Память
блок 2
Память
блок 3
Рис.5.4. Блок–схема SMP–системы на базе больших машин
5.3.2. Переключаемая подсистема взаимосвязей
В SMP–системах персонального пользования и рабочих станциях
общепринятой является структура с единственной системной магистралью. В этом варианте магистраль может стать со временем узким местом,
препятствующим дальнейшему наращиванию системы – добавлению в нее
новых компонентов. Проектировщики SMP–систем на базе больших машин попытались справиться с этой проблемой двумя способами.
Во–первых, они разделили подсистему главной памяти на четыре
одноплатных блока, оснастив каждый из них собственным контроллером,
который способен с высокой скоростью обрабатывать запросы к памяти. В
результате суммарная пропускная способность канала доступа к памяти
увеличилась вчетверо.
58
Во–вторых, связь между каждым процессором (фактически, между
его кэшем уровня L2) и отдельным блоком памяти реализована не в форме
магистрали совместного пользования, а, скорее, в форме двухточечного
соединения – каждая связь подключает группу из трех процессоров через
кэш L2 к модулю BSN. В свою очередь, BSN выполняет функцию переключителя, который объединяет пять каналов связи (четыре с кэшами L2
и один с блоком памяти) – связывает четыре физических канала в одну логическую магистраль передачи данных. Таким образом, сигнал, поступающий по любому из четырех каналов, подключенных к кэшам L2, дублируется по остальным трем каналам, и тем самым обеспечивается информационная целостность кэшей.
Не смотря на то, что в системе имеется четыре отдельных блока памяти, каждый процессор и каждый блок кэша L2 оснащен только двумя
физическими портами, через которые они связываются с подсистемой
главной памяти. Такое решение выбрано, потому что каждый блок кэша
L2 может хранить данные только из половины всего адресного пространства памяти. Для обслуживания запросов ко всему адресному пространству используется пара блоков кэша, и каждый процессор должен иметь
доступ к обоим блокам в паре.
5.3.3. Совместное использование блоков кэша уровня L2
В типовой структуре SMP–системы каждый процессор имеет собственные блоки кэша (как правило, двух уровней). В последние годы все
больший интерес у разработчиков систем вызывает концепция совместного использования блоков кэша уровня L2. В ранней версии SMP–системы
на базе большой машины использовались 12 блоков кэша L2, каждый из
которых "находился в распоряжении" одного определенного процессора.
В более поздних версиях блоки кэшей L2 используются совместно несколькими процессорами. Это было сделано исходя из следующих соображений.
В новых версиях используются процессоры, быстродействие которых увеличилось вдвое по сравнению с процессорами первой версии. Если
при этом оставить прежнюю структуру блоков кэша, поток информации
через подсистему магистрали значительно возрастет. В то же время перед
конструкторами была поставлена задача в максимальной степени использовать готовые блоки, разработанные для старой версии. Если не модернизировать подсистему магистрали, то блоки BSN в новой версии могут
59
стать со временем узким местом.
Анализ типичных приложений, выполняемых в системе, показал, что
достаточно большая часть команд и данных совместно используется разными процессорами.
Поэтому разработчики новой версии системы рассмотрели вариант
совместного использования одного или нескольких блоков кэша L2 несколькими процессорами (при этом по–прежнему каждый процессор имеет собственный внутренний блок кэша уровня L1). На первый взгляд идея
совместного использования кэша L2 выглядит малопривлекательной, поскольку процессор дополнительно должен добиваться права доступа к
нему, а это может повлечь за собой снижение производительности. Но если значительная часть данных и команд, находящихся в кэше, нужна нескольким процессорам, то кэш совместного пользования сможет скорее
повысить пропускную способность системы, чем снизить ее. Данные, которые нужны нескольким процессорам, будут найдены в кэше совместного пользования быстрее, чем если их придется передавать через подсистемы магистрали.
Разработчики новой версии системы просматривали также и вариант
включения в систему единственного кэша большого объема, совместно
используемого всеми процессорами. Хотя такая структура системы и сулила еще большее повышение производительности, от нее пришлось отказаться, поскольку в этом варианте требовалась полная переделка всей существующей организации связей. Анализ потоков данных в системе показал, что внедрение совместного использования блоков кэша, связанных с
каждым из имеющихся BSN, уже позволит добиться весьма ощутимого
повышения производительности системы. При этом, по сравнению с
кэшами индивидуального пользования, значительно увеличивается процент попадания при обращении к кэшу и, соответственно, снижается количество обращений к главной памяти.
5.3.4. Кэш уровня L3
Еще одна особенность SMP–системы на базе большой машины –
включение в ее структуру кэша третьего уровня, L3. Кэш L3 входит в состав каждого блока BSN и, следовательно, является буфером между
кэшами L2 и одним из блоков главной памяти. Применение этого кэша
позволяет уменьшить задержку поступления данных, которые отсутствуют в кэшах L1 и L2. Если эти данные ранее потребовались какому–либо из
60
процессоров, то они присутствуют в кэше L3 и могут быть переданы
новому процессору. Время извлечения данных из кэша L3 меньше времени обращения к блоку главной памяти, что и обеспечивает выигрыш в
быстродействии.
В табл. 5.1 показаны данные, полученные при исследовании производительности типичной SMP–системы на базе IBM S/390 [4]. Показатель
"задержка доступа" характеризует время, необходимое для извлечения
данных процессором в случае, если они присутствуют в том или ином
структурном элементе подсистемы памяти. При запросе процессором новой информации в 89% случаев она отыскивается в его собственном кэше
L1. В остальных 11% случаев приходится обращаться к кэшам следующих
уровней или к блоку главной памяти. В 5% случаев необходимая информация отыскивается в кэше L2 и т.д. Только в 3% случаев приходится в
конце концов обращаться к блоку главной памяти. Без кэша третьего
уровня этот показатель был бы в два раза больше.
Таблица 5.1
Показатели эффективности элементов подсистемы памяти
в SMP–системе на базе IBM S/390
Подсистема памяти
Задержка доступа
(циклов работы
процессора)
Объем
Процент попаданий
Кэш L1
1
32 Кбайт
89
Кэш L2
5
256 Кбайт
5
Кэш L3
14
2 Мбайт
3
Главная память
32
8 Гбайт
3
5.4. Информационная целостность кэшей и протокол MESI
5.4.1. Способы решения проблемы информационной
целостности
В современных вычислительных системах стало нормой использование блоков кэша одного или двух уровней, связанных с каждым про-
61
цессором. Такая организация позволяет добиться высокой производительности системы, но порождает проблему информационной целостности данных в кэшах разных процессоров. Суть ее состоит в том, что в
кэшах разных процессоров возможно хранение копий одних и тех же
данных из главной памяти. Если при этом некоторый процессор обновляет какой–либо из элементов таких данных в своей копии, то копии, с которыми имеют дело остальные процессоры, становятся недостоверными, как и содержимое главной памяти. Возможно применение
двух вариантов методики дублирования внесенных изменений в главной памяти:
Обратная запись (write back). В этом варианте процессор вносит
изменения только в содержимое своего кэша. Содержимое строки переписывается в главную память, когда возникает необходимость очистить
измененную строку кэша для приема нового блока данных.
Сквозная запись (write through). Все операции записи в кэш сразу
же дублируются в главной памяти, не дожидаясь момента, когда нужно будет заменить содержимое соответствующей строки кэша. В результате можно всегда быть уверенным в том, что в оперативной памяти хранится самая свежая, а значит, в любой момент времени достоверная, информация.
Очевидно, что применение методики обратной записи может привести к нарушению информационной целостности данных в кэшах, поскольку до тех пор, пока обновленные данные не будут переписаны в
главную память, кэши остальных процессоров будут содержать недостоверные данные. Даже при применении методики сквозной записи
информационная целостность не гарантируется, поскольку внесенные
изменения нужно дублировать не только в главной памяти, но и во
всех блоках кэша, содержащих первоначальные копии этих данных.
Способы решения проблемы информационной целостности данных
в кэшах принято разделять на программные и аппаратные. Иногда можно встретить системы, в которых она решается частично аппаратными
средствами, а частично – программными.
5.4.2. Программные методы
Суть программных методов решения проблемы информационной целостности данных в кэшах состоит в том, что такая задача возлагается на
компилятор и операционную систему. Это позволяет перенести основ-
62
ную тяжесть решения задачи на этап компиляции, но может привести к
неэффективному использованию кэшей.
При выполнении компиляции анализируется, какие элементы
данных могут совместно использоваться разными процессами и потенциально послужить причиной нарушения информационной целостности. Эти данные соответствующим образом помечаются как не подлежащие кэшированию. На этапе выполнения программы операционная
система и аппаратные средства следят за тем, чтобы эти данные не передавались в кэш.
Самый простой подход – пометить таким образом все данные, совместно используемые разными процессорами. Но подобный подход слишком консервативен, поскольку совместно используемые структуры данных могут на определенных этапах находиться в исключительном пользовании одного процесса, а на других этапах – считываться без внесения
изменений другими процессами. Поэтому блокировать кэширование следует только на то время, когда хотя бы один процесс может внести изменения в эти данные, а другие процессы могут к ним обратиться.
Поэтому более эффективные алгоритмы компиляции выявляют этапы выполнения программы, "безопасные" с точки зрения информационной
целостности совместно используемых переменных, а в участки программы, соответствующие критическим периодам, включаются специальные
команды, обеспечивающие поддержание информационной целостности.
5.4.3. Аппаратные методы
Аппаратные методы решения проблемы часто называют реализацией протокола обеспечения информационной целостности. Их объединяет то, что все действия осуществляются в процессе выполнения программ, т.е. с учетом реальной, динамически изменяющейся обстановки.
При этом обеспечивается более эффективное использование кэшей и,
следовательно, более высокая производительность системы в целом,
чем при использовании программных методов. Кроме того, аппаратный
подход освобождает от соответствующих забот разработчиков компиляторов и прикладных программистов, снижая таким образом затраты на
создание программного обеспечения.
Варианты аппаратных методов имеют множество нюансов, касающихся места хранения информации о распределении данных между
кэшами, способов организации этой информации и механизма дублиро-
63
вания измененных данных. Множество существующих вариантов
принято делить на две категории – централизованные протоколы и распределенные отслеживающие протоколы.
5.4.3.1. Централизованные протоколы
Основная особенность централизованных протоколов состоит в
том, что информация о кэшах, в которых дублируются те или иные
блоки данных, собирается, хранится и обрабатывается в одном месте,
централизованно. Как правило, в составе системы имеется специализированный контроллер, который является частью контроллера главной
памяти, а в главной памяти выделяется специальный каталог для хранения этой информации. В каталоге собирается информация о содержимом локальных кэшей, точнее о состоянии блоков данных, переданных
в кэши. Когда локальный контроллер какого–либо кэша присылает запрос на передачу ему данных, этот запрос обрабатывается центральным
контроллером, организующим пересылку запрошенного блока данных
из главной памяти или из другого блока кэша. Одновременно этот контроллер обновляет информацию о состоянии блоков данных, находящихся в кэшах. Поэтому каждый запрос, который может изменить состояние какого–либо блока данных, должен обрабатываться центральным контроллером.
Как правило, контроллер ведет учет информации о том, какой процессор располагает копией какого блока данных. Прежде чем процессор
выполнит операцию записи в свою локальную копию блока данных, он
должен получить от центрального контроллера право на исключительный
доступ к этому блоку. Последний же посылает всем процессорам, располагающим копией этого блока данных, извещение о том, что нужно пометить данный блок как недостоверный. После подтверждения выполнения описанной выше операции контроллер посылает запросившему процессору разрешение на изменение информации в этом блоке данных. В
дальнейшем если какому–либо из процессоров, располагающему недостоверной копией обновленного блока данных, потребуется прочесть их, он
первым делом обращается к центральному контроллеру. Последний
направляет сообщение процессору, обновившему информацию, с требованием выполнить обратную запись этого блока в главную память, после чего обновленный блок данных может быть продублирован во всех кэшах,
где имеются его недостоверные копии.
64
Естественно, что централизованная схема поддержания информационной целостности имеет недостаток, присущий любым централизованным схемам обработки, – необходимость вести "оживленный" обмен сообщениями между центральным компонентом и локальными блоками, что потенциально чревато появлением задержки. Однако использование централизованных протоколов оказалось достаточно эффективным в больших мультипроцессорных системах, имеющих сложные
связи между компонентами.
5.4.3.2. Распределенные отслеживающие протоколы
Протоколы этого типа предполагают распределение операций, необходимых для поддержания информационной целостности данных в
кэшах, между их локальными контроллерами. Отдельный кэш должен
самостоятельно следить за тем, используется ли хранящийся в нем блок
данных каким–либо другим процессором. Если необходимо внести изменения в такой блок данных, контроллер должен оповестить об этом
событии контроллеры тех кэшей, в которых имеется копия блока данных. Для этого имеется специальный механизм обмена сообщениями
между контроллерами кэшей, каждый из них следит за появлением сообщений и соответственно реагирует.
Подобные протоколы хорошо сочетаются с применением единой
системной магистрали в SMP – системе, поскольку такая магистраль
представляет собой идеальную среду для передачи сообщений между
локальными контроллерами кэшей. Но при этом существует опасность,
что поток подобных сообщений по магистрали сведет на нет преимущество от использования локальных кэшей, которые и задумывались для
того, чтобы избавить каждый отдельный процессор от необходимости
часто обращаться к системной магистрали.
При реализации распределенных протоколов используются два
подхода:
 запись с оповещением о недостоверности (write –invalidate);
 запись с обновлением (write –update).
В первом случае из всех держателей копий определенного блока
данных в отдельный момент времени только один может иметь право на
запись в него информации, а все остальные – только на чтение. Тот держатель, который собирается внести изменение в блок, оповещает всех
остальных о том, что впредь их копии будут недостоверны. В результате
65
он становится исключительным владельцем обновленного блока данных. Когда какому–либо из других владельцев потребуется этот блок, он
должен будет продублировать у себя обновленную копию.
Во втором случае может существовать одновременно несколько
владельцев, обладающих правом записи. Когда один из них желает внести изменение в блок, он распространяет изменяемый элемент данных
среди всех остальных процессоров, которые обладают копиями этого
блока. В результате все процессоры получают возможность постоянно
иметь достоверную информацию.
Ни один из этих подходов не имеет решающего преимущества в любых ситуациях. Производительность всей системы зависит от количества
локальных кэшей и статистики операций чтения и записи в блоки, хранящиеся в кэшах. Встречаются системы, в которых используется адаптивный механизм обновления, который в зависимости от ситуации переключается с одного алгоритма на другой.
При использовании подхода на основе записи с оповещением о недостоверности состояние каждой строки в кэше маркируется с помощью
двух дополнительных битов в поле тэга. Строка может находиться в одном
из четырех состояний: modified (изменена), exclusive (эксклюзивная),
shared (разделяемая) или invalid (недостоверная), откуда и произошло
наименование соответствующего протокола MESI.
5.4.4. Протокол MESI
5.4.4.1. Изменение состояния строки кэша
Для реализации протокола MESI каждая строка кэша может находиться в одном из четырех состояний, которые фиксируются в двух дополнительных битах:
 Modified (изменена). Данная строка кэша была изменена, причем изменения не отражены в оперативной памяти; эта строка достоверна только в пределах кэша;
 Exclusive (эксклюзивная). Эта строка содержит те же данные,
что и соответствующий блок в оперативной памяти, причем они присутствуют только в данном кэше и отсутствуют во всех прочих;
 Shared (разделяемая). Эта строка содержит те же данные, что
и соответствующий блок в оперативной памяти, причем они присутствуют не только в данном кэше, но и в каких–то других;
66
 Invalid (недостоверная). Эта строка содержит недостоверные
(необновленные) данные.
На рис. 5.5,а [ 4 ] представлена диаграмма изменения состояния
строки кэша в соответствии с протоколом MESI вследствие операций,
выполняемых процессором, инициирующим внесение изменений, а на
рис.5.5,б – аналогичная диаграмма, но отражающая операции, выполняемые механизмом управления магистралью в кэшах, содержащих дубликат блока данных.
Переход из одного состояния в другое вызывается определенными
событиями, которые мы и рассмотрим ниже.
Invalid
RMS
Shared
RH
Exclusive
RH
Shared
SHR
WM
RME
WH
WH
WH
а)
Invalid
Modified
SHW
SHR
SHW
SHR
Modified
SHW
RH
Exclusive
67
б)
Рис.5.5. Диаграмма изменения состояния строки кэша при реализации
протокола MESI:
а – строка кзша в процессоре – инициаторе;
б – строка кзша в отслеживающем процессоре
RH – попадание при чтении;
RMS – промах при чтении, shared;
RME – промах при чтении, exclusive;
WH – попадание при записи;
WM – промах при записи;
SHR – попадание при чтении, отслеживающий модуль;
SHW – попадание при записи или чтении с намерением модифицировать, отслеживающий модуль;
– запись модифицированной строки в главную память;
– передача сигнала недостоверности прочих копий строки;
– чтение с намерением модифицировать;
– заполнение строки кэша.
Следует помнить, что термины "промах" и "попадание" относятся к выполнению запроса к определенному элементу данных со стороны
процессора. Если этот элемент имеется в кэше, считается, что произошло попадание, в противном случае – промах. Кроме того, промах возникает и в том случае, если строка данных в кэше, в которой находится
нужный элемент данных, имеет состояние invalid.
5.4.4.2. Промах при чтении
Когда в локальном кэше происходит промах при запросе чтения,
процессор инициирует операцию чтения из главной памяти блока данных, содержащего нужный элемент. При этом процессор выставляет на
одну из линий магистрали специальный сигнал, извещающий все
остальные модули процессор/кэш о необходимости отследить эту транзакцию. Возможно несколько вариантов исхода операции:
 если в каком–либо из модулей окажется "чистая" (не модифицированная со времени извлечения из главной памяти) копия этого
блока данных, причем соответствующая строка кэша имеет состо яние
68
exclusive, модуль выставляет сигнал, что он также использует данный блок. После этого модуль изменяет состояние строки в своем
кэше с exclusive на shared. Процессор, инициировавший операцию,
считывает блок данных из главной памяти и изменяет состояние соответствующей строки кэша с invalid на shared;
 если в нескольких модулях окажется "чистая" копия этого блока
данных, соответствующие строки кэша в них будут иметь состояние
shared. Каждый из этих модулей выставит сигнал, что он также использует данный блок, причем состояние строки кэша не изменяется.
Процессор, инициировавший операцию, считывает блок данных из
главной памяти и изменяет состояние соответствующей строки кэша с
invalid на shared;
 если в каком–либо из модулей окажется модифицированная со
времени извлечения из главной памяти копия этого блока данных, соответствующая строка кэша будет иметь состояние modified. Этот модуль
заблокирует операцию чтения из памяти и обеспечит передачу собственной копии блока данных через системную магистраль. После этого он
изменит состояние строки в своем кэше с modified на shared;
 если ни в одном из модулей не окажется копии этого блока данных, никаких ответных сигналов на линиях магистрали не появится.
Процессор, инициировавший операцию, считывает блок данных из
главной памяти и изменяет состояние соответствующей строки кэша с
invalid на exclusive.
5.4.4.3. Попадание при чтении
Когда необходимый процессору элемент данных обнаруживается
в локальном кэше, он передается процессору, а строка кэша не изменяет своего состояния.
5.4.4.4. Промах при записи
Когда в локальном кэше возникает промах при записи, процессор
инициирует операцию чтения из главной памяти. Для этого он выставляет на управляющие линии магистрали сигнал RWITM, который расшифровывается как read –with –intent –to –modify (чтение с намерением внести
изменение). После записи блока данных в кэш соответствующая строка
кэша получает состояние modified. Существует два варианта сценария
69
дальнейших операций в остальных модулях процессор/кэш системы.
Первый вариант – в одном из остальных модулей уже имеется модифицированная копия этой строки (она имеет код состояния modified). Модуль, располагающий такой копией, выставляет сигнал, предупреждающий
модуль–инициатор операции о том, что другой процессор располагает
модифицированной копией этой строки. Модуль–инициатор в ответ прекращает операцию с системной магистралью и ждет дальнейших сигналов.
Процессор, обладающий модифицированной копией, захватывает управление магистралью, организует перезапись модифицированного блока в
главную память и изменяет состояние соответствующей строки кэша на
invalid, поскольку процессор–инициатор собирается внести в этот блок
изменение. Далее процессор–инициатор вновь выставляет на управляющие
линии магистрали сигнал RWITM, считывает блок из главной памяти в
свой кэш, модифицирует строку кэша и помечает ее как имеющую состояние modified.
Второй вариант – ни один из остальных модулей не имеет модифицированной копии этой строки, никаких ответных сигналов после формирования процессором–инициатором сигнала RWITM не появляется. Процессор считывает блок из главной памяти в свой кэш, модифицирует
строку кэша и помечает ее как имеющую состояние modified. В это же
время те модули, которые располагают немодифицированной копией этого блока (если таковые имеются), изменяют состояние соответствующих
строк своего кэша с shared на invalid. Если немодифицированная копия
имеется только в одном модуле, то состояние соответствующей строки в
его кэше изменяется с exclusive на invalid.
5.4.4.5. Попадание при записи
Когда элемент данных, в который требуется внести изменение, находится в одной из строк локального кэша, дальнейшие события зависят от
текущего состояния этой строки:
 состояние shared. Прежде чем вносить изменение в строку,
процессор должен получить право исключительного владения ею. Это
означает, что все остальные модули, располагающие копией данной
строки, должны пометить ее как invalid. Для этого процессор–
инициатор извещает о своем намерении внести изменение в строку
сигналом на управляющих линиях магистрали. Теперь можно обновить
содержимое строки, а потом изменить ее состояние с shared на modified;
70
 состояние exclusive. Процессор уже имеет исключительное
право владения строкой кэша и поэтому может сразу же обновить ее содержимое и изменить состояние с exclusive на modified;
 состояние modified. Процессор уже имеет исключительное право владения строкой кэша и поэтому может сразу же обновить ее содержимое, оставив прежним код состояния modified.
5.5. Согласование данных в кэшах уровней L1 и L2
Ранее были рассмотрены протоколы поддержания информационной
целостности данных в блоках кэшей разных процессоров, связанных в
SMP – системе через общую магистраль данных. Как правило, на магистраль имеют выход кэши уровня L2, а кэш уровня L1 напрямую с магистралью не связан. Следовательно, необходимы специальные средства,
обеспечивающие согласованность данных в кэшах обоих уровней.
Такие средства, по существу, представляют собой расширение протокола MESI или другого, аналогичного по назначению. Предусматривается, что каждая строка в кэше L1 включает биты состояния. Для любой
строки, присутствующей и в кэше L2, и в соответствующем ему кэше L1,
механизм согласования кэшей должен обеспечить отслеживание в L1 изменения кода состояния в L2. Проще всего это сделать, воспользовавшись
методикой сквозной записи в L1, но в этом случае сквозная запись означает
дублирование изменений, внесенных в стоку L1, не в главной памяти, а в
кэше L2. В результате эти изменения становятся "видимыми" для всех
остальных кэшей L2 в SMP – системе, Для того чтобы можно было использовать эту методику, информация, хранимая в L1, должна быть
подмножеством информации, хранящейся в L2.
Если в кэше L1 использовать методику обратной записи, то взаимодействие между кэшами двух уровней значительно усложняется.
71
6. КЛАСТЕРЫ
6.1. Преимущества кластеров
В последнее время внимание разработчиков мультипроцессорных
систем все больше привлекает идея кластеризации. Кластеризация является альтернативой построению симметричных мультипроцессорных систем
и предполагает более высокую производительность и "живучесть" вычислительных комплексов. Поэтому применение такой структуры является
особенно привлекательным при создании серверных приложений.
Кластер можно определить как группу взаимосвязанных полноценных компьютеров, выполняющих совместно некоторую работу таким образом, что со стороны она воспринимается как единый вычислительный
ресурс. Термин "полноценный" в данном случае означает, что такой компьютер может работать и как автономный, отдельно от кластера. В литературе отдельные компьютеры в составе кластера обычно называются
узлами (nodes).
Кластеризация вычислительного комплекса сулит следующие преимущества, которые можно рассматривать как цели проектирования подобного рода
систем:
 Абсолютная масштабируемость. Возможно создание кластеров,
которые по своим характеристикам оставят далеко позади даже самые
мощные автономные вычислительные машины. Кластер может включать в
свой состав десятки машин, каждая из которых, в свою очередь, может
иметь мультипроцессорную структуру.
 Наращивание в процессе эксплуатации. Кластер организуется таким образом, что в процессе его эксплуатации можно добавлять в него новые узлы, не модифицируя уже существующие.
 Высокая надежность. Поскольку каждый узел в кластере является
компьютером, способным работать автономно, отказ одного узла не приводит к потере работоспособности всего комплекса. В большинстве систем такого типа работоспособность комплекса при отказе одного из узлов
поддерживается соответствующими программами автоматически.
 Снижение соотношения цена/производительность. Используя при
72
построении кластера в качестве строительных блоков продукцию массового производства, можно создать комплекс, имеющий производительность, такую же (или даже более высокую), как и самая большая отдельная вычислительная машина. Он будет при этом стоить намного дешевле.
6.2. Структуры кластеров
В литературе можно встретить довольно много разнообразных систем классификации кластеров. Возможно, самая простая из них – классификация по совместному использованию одних и тех же дисков отдельными узлами. На рис. 6.1,а показан кластер, состоящий из двух узлов, в
котором единственным средством обмена информацией между узлами является высокоскоростной канал связи. По этому каналу производится обмен сообщениями, с помощью которых координируется работа узлов.
Этот канал связи может быть либо составной частью локальной сети, к
которой подключены и другие компьютеры, не входящие в состав кластера, либо специализированным каналом. В последнем случае один или несколько узлов кластера могут быть подключены к локальной или глобальной вычислительной сети, и через нее кластер, который выполняет роль
сервера, может связываться с удаленными клиентскими системами. На
этой схеме каждый узел кластера является, в свою очередь, мультипроцессорной системой. Это не обязательно, но такая структура узлов обеспечивает более высокую производительность и надежность комплекса.
Альтернативой структуре кластера с единственным каналом связи
является совместное использование дисковой памяти. В этом случае канал
связи между узлами кластера, как правило, сохраняется, но основной обмен данными между узлами происходит через общую дисковую память
(рис. 6.1,б). Наиболее целесообразно использовать в качестве такой памяти RAID–системы (Redundant Array of Independent Disks – избыточный
массив независимых дисков) или другие многодисковые системы с избыточностью. Это позволяет обеспечить высокую надежность комплекса,
поскольку его самым уязвимым звеном является именно общая дисковая
память.
Вероятно, самыми ранними комплексами с кластерной организацией
были системы с пассивным резервированием (passive standby). Такой комплекс состоит из двух узлов, один из которых выполняет всю работу, а
другой находится в пассивном резерве на случай, если произойдет отказ
работающего узла. Для координирования работы активный узел время от
времени посылает пассивному узлу сообщение, которое является свиде-
73
тельством его работоспособности. Если такое сообщение перестает поступать, пассивный узел расценивает это как признак отказа активного узла и вступает в работу. Такая конструкция комплекса повышает его
надежность по сравнению с единственной машиной, но никак не сказывается на производительности. Более того, если единственная информация,
которая передается от активного узла пассивному, – сообщение о работоспособности, и в комплексе отсутствует возможность обращения узлов к
общей дисковой памяти, то пассивный узел при включении дублирует
функции отказавшего активного, но не располагает данными о текущем
состоянии процесса, которые были сформированы ранее активным узлом.
В англоязычной литературе для такого сообщения применяется специальный термин "heartbeat message" – сообщение о том, что сердце еще бьется.
Пр
Пр
Пр
Пр
Канал
ОП
В/В
В/В
В/В
В/В
ОП
В/В
Пр
Пр
В/В
В/В
ОП
передачи
сообщений
а)
Канал
Пр
Пр
В/В
передачи
сообщений
ОП
В/В
В/В
б)
Рис. 6.1. Структуры кластеров:
а – сервер с резервированием без общей дисковой памяти;
б – система с общей дисковой памятью
В настоящее время комплекс с пассивным резервированием больше
74
не считается кластером. Этим термином сейчас принято обозначать
комплексы с множеством работающих узлов, совместно решающих поставленную задачу. Часто их называют комплексами с активными вторичными узлами (active secondary). Они, в свою очередь, делятся на три вида:
 раздельные серверы,
 серверы, подключенные к дискам,
 серверы с общей дисковой памятью.
Раздельные серверы имеют структуру, аналогичную той, что показана на рис. 6.1,а. В этой структуре необходима специальная программа
планирования и управления узлами, которая распределяет между ними запросы клиентов, балансирует загрузку отдельных узлов и обеспечивает
высокую степень использования вычислительных ресурсов комплекса.
Весьма желательно, чтобы специальная программа обеспечивала живучесть комплекса при выходе из строя одного из узлов, т.е. перераспределяла возложенные на него функции между оставшимися узлами. Для этого
приходится постоянно копировать данные с одного узла на остальные,
чтобы в случае необходимости они могли "подхватить" его работу. Таким
образом, в этой структуре за повышение надежности приходится платить
снижением производительности.
Чтобы избавиться от необходимости постоянного копирования оперативных данных с одного узла на другие, большинство современных кластеров позволяют отдельным серверам (узлам) подключаться к дискам
общего пользования. Существует вариант такого подхода, в котором диски общего пользования разделены на тома, причем каждый том находится
в ведении определенного узла. При отказе одного из узлов кластер переконфигурируется таким образом, что право "владения" его томом передается какому–либо другому узлу.
В ином варианте все узлы имеют равные права доступа ко всем дискам общего пользования. Этот подход требует использования специального
механизма взаимных блокировок, который исключил бы возможность одновременной модификации данных разными узлами.
Особенности разных описанных вариантов структур суммированы в
табл. 6.1.
Таблица 6.1
Варианты структур кластерных систем
Структура
Описание
Преимущества
Ограничения
Пассивное ре- Вторичный сер- Легко реализу- Высокая стоимость
зервирование
вер включается в ется
эксплуатации, по-
75
работу в случае
отказа первичного сервера
скольку
вторичный сервер большую часть времени простаивает
Продолжение табл.6.1
Активные вто- Вторичные сер- Снижение
из- Возросшая сложричные узлы
веры все время держек,
по- ность
активны наряду скольку вторичс первичным
ные серверы не
простаивают
Раздельные сер- Каждый сервер
веры
имеет собственные диски. Оперативные данные время от
времени копируются с одного
диска на другие
Серверы,
под- Серверы связаключенные
к ны со всеми
множеству дис- дисками, хотя
ков
каждый работает со своим. Если происходит
отказ одного из
серверов,
его
диски
передаются
другому
серверу
Серверы,
сов- Все
серверы
местно исполь- имеют постоянзующие диски ный доступ ко
всем дискам
Высокая надеж- Большая нагрузка
ность
на каналы связи
из–за необходимости выполнять копирование
Снижение потока информации
по каналам связи
Требует использования технологии
RAID для обеспечения работоспособности комплекса при выходе из
строя одного из
дисков
Снижение времени восстановления системы
при отказе одного из дисков
Требует специальных программ взаимной блокировки
и
использования
технологии RAID
для
обеспечения
работоспособности
комплекса при вы-
76
ходе из строя одного из дисков
6.3. Специальные требования к операционным системам
Для того чтобы в полной мере реализовать потенциальные возможности кластерных комплексов, они должны быть оснащены операционными системами, имеющими функции, которые отсутствуют в операционных системах автономных компьютеров:
 обеспечение отказоустойчивости;
 балансирование загрузки.
Методика обеспечения отказоустойчивости определяется структурой
вычислительного комплекса (см. табл. 6.1). Относительно возможности
восстановления работоспособности комплекса при выходе из строя одного
из узлов или одного из дисков совместного пользования различают системы с высокой загрузкой и системы с избыточностью.
В первом случае высока вероятность того, что в момент отказа все ресурсы комплекса будут уже задействованы. Поэтому запрос, который обрабатывался отказавшим узлом, будет утерян. При повторении запроса он
будет обслужен другим узлом кластера. Однако операционная система не
дает никакой гарантии относительно того, что произойдет с частично выполненной транзакцией. Обработка такой ситуации целиком возлагается
на прикладные программы.
Во втором случае обеспечивается доступность в любой момент времени всех ресурсов. Это достигается за счет использования дисковых систем
с избыточностью и механизма резервного копирования незафиксированных транзакций и фиксирования завершенных транзакций.
Производительность кластера во многом зависит от способности операционной системы оптимально распределить нагрузку между узлами. На
нее же возлагается и функция учета включения в комплекс новых узлов и
соответствующей перестройки функции планирования. Эти задачи возлагаются на механизм среднесрочного планирования. Он должен определить, какие функции обслуживания освобождаются или появляются на
разных узлах кластера, и, соответственно, передать им на выполнение
определенные задачи.
77
6.4. Сравнение кластеров и SMP–систем
И кластеры, и SMP–системы обладают возможностью распараллеливания нагрузки и распределения ее между множеством процессоров и, таким образом, могут обеспечить эффективное выполнение особо сложных
приложений. Системы и того и другого класса имеются на компьютерном
рынке.
Основное достоинство SMP–систем в том, что их легче обслуживать
и эксплуатировать, чем кластеры. SMP–системы по своей сути гораздо
ближе к привычным однопроцессорным системам, для которых разработано подавляющее большинство существующих приложений. Принципиальное изменение при переходе от однопроцессорных систем к
SMP–системам – внедрение функции планирования. Другое преимущество SMP–систем по сравнению с кластерами – меньшие физические
размеры и потребляемая мощность. Не следует забывать и то, что
SMP–системы уже достаточно укоренились в практике и их производство хорошо отлажено.
Но в группе высокопроизводительных серверных систем кластеры
имеют определенное преимущество перед SMP–системами. Это связано в
первую очередь с возможностью наращивания структуры комплекса уже в
период его эксплуатации и более высокой надежностью.
78
7. СИСТЕМЫ С ПЕРЕМЕННЫМ ВРЕМЕНЕМ
ОБРАЩЕНИЯ К ПАМЯТИ
7.1. Основные понятия и определения
На рынке мультипроцессорных вычислительных средств до последнего времени предлагались системы только двух классов – кластеры и
SMP – системы. В последние годы большой интерес вызывает новое
направление в создании подобного рода средств – системы с переменным
временем обращения к памяти (NUMA – системы – nonuniform memory
access).
Прежде чем перейти к их рассмотрению, объясним смысл некоторых
терминов, часто встречающихся в литературе о NUMA–системах.
 UMA – системы (uniform memory access) – мультипроцессорные
системы, в которых все процессоры имеют доступ ко всему адресному
пространству главной памяти и могут выполнять как операции чтения, так
и записи. Время обращения какого–либо процессора к любой ячейке памяти одно и то же, причем все процессоры имеют одинаковое время обращения к памяти. Именно к этой группе относятся рассмотренные выше
SMP–системы.
 NUMA–системы – мультипроцессорные системы, в которых все
процессоры имеют доступ ко всему адресному пространству главной памяти и могут выполнять как операции чтения, так и записи. Время обращения процессора к ячейке памяти зависит от того, в каком адресном
подпространстве она находится. Для разных процессоров "быстрые" и
"медленные" подпространства главной памяти могут отличаться.
 CC–NUMA системы (cache–coherent NUMA) – NUMA система, в
которой обеспечивается поддержание информационной целостности данных в кэшах всех процессоров.
NUMA системы без поддержания информационной целостности
данных в кэшах во многом сходны с кластерами, но в последнее время
большое внимание привлекают коммерческие CC–NUMA системы, которые во многом отличаются как от кластеров, так и от SMP–систем. К сожалению, в литературе они не всегда называются CC–NUMA системами,
79
что создает известную путаницу. В данном разделе мы будем рассматривать именно этот класс мультипроцессорных систем.
В многопроцессорных комплексах, построенных по типу SMP–
системы, на практике существует ограничение на количество процессоров
в составе одного комплекса. Применение эффективной схемы кэширования позволяет сократить поток информации, циркулирующей по системной магистрали между отдельным процессором и главной памятью. Но по
мере увеличения количества процессоров этот поток все же возрастает.
Кроме того, по управляющим линиям магистрали активно передаются
сигналы, необходимые для работы механизма поддержания информационной целостности данных в многочисленных кэшах, и в конце концов
системная магистраль становится узким местом комплекса. В настоящее
время считается, что количество процессоров в SMP–системе должно
быть в диапазоне от 16 до 64. Как показали эксперименты, дальнейшее
увеличение количества процессоров приводит не к повышению, а к снижению производительности.
Именно ограничение на количество процессоров в SMP–системе и
было одной из главных причин возрождения интереса к кластерным комплексам. Но каждый узел кластера имеет собственный блок памяти, и
приложение не располагает большим глобальным пространством памяти.
Информационная целостность поддерживается программными, а не аппаратными средствами. Такое дробление глобальной памяти отрицательно
сказывается на производительности, а для получения максимальной производительности необходимо очень тщательно настраивать программное
обеспечение на особенности вычислительной среды. Стремление повысить количество процессоров в комплексе, сохранив при этом привлекательные качества SMP–системы, и привело к идее создания NUMA–
системы.
Цель создания NUMA–систем – обеспечить возможность работы с
главной памятью большого объема множеству микропроцессорных узлов,
каждый из которых имеет собственную магистраль или другую систему
взаимных связей.
7.2. Структура CC–NUMA системы
Типичная структура CC–NUMA системы представлена на рис.7.1. В
системе имеется множество независимых узлов, каждый из которых может быть самостоятельной SMP–системой. Узел содержит несколько про-
80
цессоров, каждый с блоком кэша уровней L1 и L2, и единый для всех
процессоров узла блок памяти. Узел является базовым компонентом всей
структуры CC–NUMA системы. Узлы связаны между собой какой–либо
подсистемой взаимодействия, например кольцевой или сетевой.
Каждый узел CC–NUMA системы имеет блок памяти. Но для отдельного процессора существует общее глобальное адресное пространство, в которое входят блоки памяти всех узлов, причем каждая ячейка
этой глобальной памяти имеет уникальный адрес, единый для всех процессоров. Когда процессор обращается к ячейке по некоторому адресу, то
первым делом просматриваются его собственные кэши L1 и L2. Если искомый элемент данных в них отсутствует, кэш L2 инициирует операцию
извлечения из глобальной памяти. Если искомый блок данных находится в
той части глобальной памяти, которая входит в состав узла, блок данных
(строка кэша) извлекается из него через локальную магистраль узла. Если
же она находится в блоке памяти какого–либо другого узла, автоматически формируется запрос к подсистеме связи, которая транслирует запрос к
соответствующей локальной магистрали. Весь этот механизм работает автоматически и для процессора, обратившегося к памяти, совершенно прозрачен.
Процессор
1–1
Кэш L1
Процессор
1– m
Кэш L1
Кэш L2
Кэш L2
Главная
память 1
Процессор
N–1
Кэш L1
Кэш L2
Главная
память N
Процессор
2–1
Кэш L1
Справочник Кэш L2
Подсистема
ввода-вывода
Процессор
N– m
Кэш L1
Кэш L2
Процессор
2– m
Кэш L1
Кэш L2
Главная
память 2
Подсистема
ввода-вывода
Подсистема
связи
Подсистема
ввода-вывода
Справочник
Справочник
81
Рис.7.1. Структура CC–NUMA системы
Основная проблема в такой структуре – информационная целостность данных в кэшах. Хотя варианты реализации механизма поддержания отличаются в деталях, основная его особенность в том, что каждый
узел должен располагать некоторым справочником, в котором отслеживается информация о размещении порций адресного пространства и о состоянии строк кэшей узла. Продемонстрируем, как работает такая схема, на
следующем примере. Предположим, что процессор 3 узла 2 (процессор
Пр2–3) обращается к ячейке памяти по адресу 798, которая находится в
блоке памяти узла 1. Далее последуют такие операции:
1. Процессор Пр2–3 передает в магистраль узла 2 запрос чтения содержимого ячейки по адресу 798.
2. Справочник узла 2 анализирует запрос и выясняет, что ячейка
798 находится в блоке главной памяти, подключенном к узлу 1.
3. Справочник узла 2 посылает запрос узлу 1, который принимается
справочником этого узла.
4. Справочник узла 1, действуя от имени процессора Пр2–3, выставляет на линии магистрали запрос чтения содержимого ячейки 798
точно так же, как это делает процессор.
5. В ответ блок памяти узла 1 выставляет на линии магистрали запрашиваемые данные.
6. Справочник узла 1 считывает данные с линий магистрали.
7. Данные передаются справочнику узла 2.
8. Справочник узла 2 помещает данные на линии магистрали узла 2
точно так же, как это сделал бы блок памяти.
9. Данные считываются с магистрали, помещаются в кэш процессора Пр2–3 и далее обрабатываются по обычной схеме.
Описанная последовательность операций выполняется аппаратными
средствами, и процесс передачи данных прозрачен для процессора. Для
надежной работы этого механизма в нем должен быть реализован какой–
либо протокол поддержания информационной целостности данных в
кэшах. В существующих системах используются разные модификации таких протоколов, и мы не будем на них подробно останавливаться. Сделаем только несколько замечаний. В той последовательности, которую мы
82
представили выше, справочник узла 1 должен хранить информацию о
тех кэшах, в которых имеется копия строки, включающей ячейку 798. Тогда на основании этой информации можно отслеживать внесение в одном
из кэшей изменений в строку. О внесении изменений оповещаются все узлы, и соответствующие справочники модифицируют код состояния копии
строки в кэшах своего узла. Если ячейка, содержимое которой изменено,
находится в блоке памяти данного узла, то в справочнике также отмечается, что эта ячейка содержит недостоверные данные. Достоверным содержимое ячейки станет только после выполнения обратной записи. Если какой–либо процессор (находящийся в этом же узле или в другом) обратится
к ячейке, помеченной как недостоверная, справочник узла инициирует
операцию обратной записи и только после этого разрешает выполнение
чтения содержимого ячейки.
7.3. Достоинства и недостатки NUMA–систем
Главным преимуществом CC–NUMA–систем является то, что они
позволяют реализовать более высокий уровень параллелизма при выполнении приложений, чем SMP–системы, не требуя при этом внесения существенных изменений в программное обеспечение. Опасение вызывает
только возможное снижение производительности системы при большом
количестве обращений от процессоров одних узлов к блокам памяти, расположенным в других узлах (по отношению к данному процессору эти узлы будут удаленными). Но есть основания рассчитывать, что эти опасения
не оправдаются. Во–первых, широкое использование кэшей двух уровней
должно минимизировать количество обращений к памяти, в том числе и к
блокам памяти, присоединенным к удаленным узлам. Если большая часть
данных, используемых в программах, характеризуется высоким уровнем
временной локализации, то поток обращений к удаленным блокам памяти
вряд ли будет интенсивным. Во–вторых, если программное обеспечение
приложений характеризуется высоким уровнем пространственной локализации и используется механизм виртуальной памяти, то информация, необходимая для работы приложения, будет размещаться в ограниченном
количестве часто используемых страниц. Эти страницы с самого начала
можно загрузить в блок памяти того узла, в котором реализуется основная
часть приложения, и таким образом существенно снизить поток информации между узлами. Кроме того, можно применить усовершенствованный
механизм виртуальной памяти, который позволяет переносить виртуаль-
83
ную страницу в тот узел системы, который ее чаще использует.
Но существуют и определенные недостатки, присущие CC–NUMA–
системам. Во–первых, CC–NUMA–системы не обладают такой прозрачностью, как SMP–системы. Необходима определенная модификация программного обеспечения приложения при переносе его с SMP–системы на
СС–NUMA–систему. Это касается механизма распределения памяти, о котором мы уже говорили, распределения процессов между узлами и балансирования загрузки узлов. Данный механизм должен быть включен в состав модифицированной операционной системы. Другая проблема, которая вызывает беспокойство у специалистов, – это проблема надежности.
84
ЗАКЛЮЧЕНИЕ
Цель, которая стояла перед автором данного учебного пособия, - изложение основ построения современных архитектур вычислительных систем, типичных для большинства существующих ВС.
Безусловно, рамки учебного пособия не позволяют осветить материал в полном объеме. Оказались нерассмотренными вопросы проектирования вычислительных систем с программируемой структурой, транспьютерных вычислительных систем, промышленной реализации ВС различной архитектуры.
85
ЛИТЕРАТУРА
1. Архитектура компьютерных систем и сетей: Учеб. пособие /
Т.П.Барановская, В.И.Лойко, М.И.Семенов, А.И.Трубилин; Под ред.
В.И.Лойко. – М.: Финансы и статистика, 2003. – 256 с.
2. Барский А. Б. Параллельные процессы в вычислительных системах. –
М.: Радио и связь, 1990. – 256 с.
3. Бройдо В.Л. Вычислительные системы, сети и телекоммуникации./
Учеб. пособие – СПб.: ПИТЕР, 2003. – 688 с.
4. Столлингс В. Структурная организация и архитектура компьютерных
систем.: Пер. с англ. – М.: Издательский дом "Вильямс", 2002. – 896 с.
5. Хокни О., Джезхоуп К. Параллельные ЭВМ. – М.: Радио и связь, 1986. –
396 с.
6. Хорошевский В.Г. Архитектура вычислительных систем: Учеб. пособие
для вузов. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2005. – 512 с.
7. www.wl.unn.ru
8. http://parallel.ru Информационно-аналитический сервер Лаборатории
Параллельных Информационных Технологий НИВЦ МГУ.
86
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ
1. КЛАССИФИКАЦИИ АРХИТЕКТУР ВЫЧИСЛИТЕЛЬНЫХ
СИСТЕМ
1.1. Классификация Флинна
1.2. Классификация Фенга
3
1.3. Классификация Хокни
1.4. Классификация Шнайдера
1.5. Классификация Дункана
5
5
10
11
13
16
2. МАТРИЧНЫЕ СИСТЕМЫ
2.1. Структура матричных систем и принципы их работы
2.2. Быстродействие матричных систем
19
19
21
3. АССОЦИАТИВНЫЕ ПРОЦЕССОРЫ
3.1. Доступ к ассоциативной памяти
3.2. Структура ассоциативных процессоров
3.3. Быстродействие и применение ассоциативных процессоров
25
25
26
30
4. КОНВЕЙЕРНЫЕ МНОГОПРОЦЕССОРНЫЕ СИСТЕМЫ
4.1. Основы конвейерной организации обработки
4.2. Структура конвейерных систем и принципы их работы
4.3. Быстродействие конвейерных систем
4.4. Обработка команд перехода
4.4.1. Организация множества потоков
4.4.2. Предварительное извлечение команды в точке перехода
4.4.3. Организация буфера цикла
4.4.4. Предсказание перехода
4.4.5. Задержка выполнения перехода
32
32
38
40
43
43
44
44
45
48
5. СИММЕТРИЧНЫЕ МУЛЬТИПРОЦЕССОРНЫЕ СИСТЕМЫ
5.1. Отличительные признаки и преимущества симметричных
50
87
мультипроцессорных систем
5.2. Структурная организация SMP–систем
5.2.1. Системы с общей магистралью
5.2.2. Системы с многопортовой памятью
5.2.3. Системы с центральным устройством управления
5.3. SMP–системы на базе больших вычислительных машин
5.3.1. Структура SMP–системы на базе больших
вычислительных машин
5.3.2. Переключаемая подсистема взаимосвязей
5.3.3. Совместное использование блоков кэша уровня L2
5.3.4. Кэш уровня L3
5.4. Информационная целостность кэшей и протокол MESI
50
51
52
54
55
56
5.4.4.3. Попадание при чтении
5.4.4.4. Промах при записи
5.4.4.5. Попадание при записи
5.5. Согласование данных в кэшах уровней L1 и L2
56
57
58
59
60
60
61
62
63
64
65
65
67
68
68
69
70
6. КЛАСТЕРЫ
6.1. Преимущества кластеров
6.2. Структуры кластеров
6.3. Специальные требования к операционным системам
6.4. Сравнение кластеров и SMP–систем
71
71
72
76
76
7. СИСТЕМЫ С ПЕРЕМЕННЫМ ВРЕМЕНЕМ
ОБРАЩЕНИЯ К ПАМЯТИ
7.1. Основные понятия и определения
7.2. Структура CC–NUMA системы
7.3. Достоинства и недостатки NUMA–систем
78
78
79
82
ЗАКЛЮЧЕНИЕ
84
5.4.1. Способы решения проблемы информационной целостности
5.4.2. Программные методы
5.4.3. Аппаратные методы
5.4.3.1. Централизованные протоколы
5.4.3.2. Распределенные отслеживающие протоколы
5.4.4. Протокол MESI
5.4.4.1. Изменение состояния строки кэша
5.4.4.2. Промах при чтении
88
ЛИТЕРАТУРА
85
Download