Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ВС для ГОС (ПИ) / Орлов, Цилькер - Организация ЭВМ (2004)

.pdf
Скачиваний:
458
Добавлен:
25.04.2015
Размер:
9.6 Mб
Скачать

4 6 6 Глава9. Основныенаправления вархитектуре процессоров

R1 и R2. Поскольку последнее переименование регистра R1 достоверно, выборка содержащегося в регистре значения может быть произведена так, как это было описано выше. Однако значение R2 еще не вычислено, поэтому вместо него в исполнительную часть процессора, где будет выполняться команда ADD, пересылается номер соответствующего-входа буфера переименования (в нашем примере это 3).

Теперь в буфере переименования имеется несколько входов, ссылающихся на один и тот же регистр. Так, на рис. 9.50, е показана ситуация, когда команда SUB выдана до завершения команды MUL. В этом случае под регистр R2 выделен еще один вход (вход 5), в котором установлены соответствующие значения в полях ЗД и ПП. Одновременно содержимое поля ПП входа 3, где хранилось предыдущееописание регистра R2, изменено на 0. Таким образом, с данного момента все последующие команды, ссылающиеся на регистр R2 как источник операнда, будут переадресовываться на вход 5. Это будет продолжаться до появления новой команды, с регистром результата R2.

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

Последний момент — это освобождение входа буфера переименования (рисунок 9.50, з). Критерий освобождения входа будет рассмотрен позже.

Переупорядочивание команд

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

Централизованное окно команд. Данное окно реализуется в виде так называемого табло (Scoreboard). Техника табло впервые была предложена в 1964 году фирмой Cray и реализована в ЭВМ CDC 6600.

Суперскалярные процессоры 4 6 7

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

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

- поля операции, где хранится дешифрированный код операции;

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

-поля результата, указывающего регистру, куда должен быть помещен результат выполнения данной команды;

-поля битов достоверности.

Втабло также хранится текущая информация о доступности устройств обработки (функциональных блоков).

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

Обновление информациио готовности операндов и доступности функциональных устройств выполняется в каждом цикле процессора.

4 6 8 Глава 9. Основные направления в архитектуре процессоров

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

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

В примере, приведенном на рис. 9.51, для команд I1, I2,I3 и I5 известны значения одного из операндов, и они вынуждены ожидать значения второго операнда. Команде I4 известны оба операнда, и при условии доступности ФБ, требуемого для ее исполнения, она вправе быть выдана из окна команд.

ОП - дешифрированный код операции; ИД - идентификатор регистра;

ЗН - значение операнда; ЗД - значение достоверно Рис.9.51.Содержимоетабло

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

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

Суперскалярные процессоры

4 6 9

редь типа FIFO, но производится общий сдвиг вниз, включая и освободившиеся позиции. Это упрощает логику работы централизованного окна.

Распределенное окно команд. В варианте распределенного окна команд на входе каждого функционального блока размещается буфер декодированных команд, называемый накопителем команд или схемой резервирования (reservation station). Метод резервирования был разработан Р. Л. Томасуло в 1967 году и впервые воплощен в вычислительной системе IBM 360/91. После выборки и декодирования команды распределяются по схемам резервирования тех ФБ, где команда будет исполняться. В буфере командазапоминается и по готовности выдается в связанный с данным пунктом функциональный блок. Логика работы каждого накопителя аналогична централизованному окну команд. Выдача происходит только после того, как команда получит все необходимые операнды, и при условии, что ФБ свободен. При обновлении содержимого буфера переименования файла производится доступ ко всем накопителям команд, и в них идентификаторы обновленных входов заменяются хранящимися в этих входах значениями операндов.

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

Число независимых команд, которые могут выполняться одновременно, варьируется от программы к программе, а также в пределах каждой программы. В среднем число таких команд равно 1 -3, временами возрастая до 5-6. Механизм резервирования ориентирован на одновременную выдачу нескольких команд, что, как правило, легче реализовать с распределенным, а не централизованным окном команд, поскольку темп загрузки распределенных буферов обычно меньше, чем потенциальный темп выдачи команд. Пропускная способность линии связи между централизованнымокном команди функциональнымиблокамидолжнабытъ выше, чем в случае распределенного окна. Однако для централизованного окна характерно более эффективное задействование емкости буфера.

Емкость накопителя команд в каждом функциональном блоке зависит от ожидаемого числа команд для этого блока. Типичный накопитель рассчитан на 1-3 команды. Если в одной из них одновременно готовы несколько команд, выдача их в ФБ производится в порядке занесения этих команд в накопитель.

Для более детального пояснения процессов, происходящих в технологии накопителей, рассмотрим следующий пример. На рис. 9.52 показана схема передачи декодированных команд с переименованными регистрами в накопитель команд. Предполагается, что в рамках одного цикла в накопитель могут быть выданы до двух команд. Буфер переименования представлен регистровым файлом (РгФ). Из РгФ позволено одновременно выбрать подваоперанда(RS1 ,RS2)для каждой из двух команд. Каждый регистр РгФ имеетдополнительный бит достоверности (V), единичное состояние которого свидетельствует о корректности содержимого регистра. Доступные операнды (OS1,0S2) переписываются в соответствующие поля ячеек накопителя (OS1/ISI, OS 2 /IS 2 ), при этом биты достоверности этих полей (VS1, VS2) устанавливаются в единицу. Если значение операнда в РгФ недоступно, то в поля (OSI/ IS1,OS2/IS2)заноситсяпорядковый номертогорегистра, откудаоперанддолжен быть

4 7 0 Глава 9. Основные направления в архитектуре процессоров

Рис. 9.52. Общая схема шелвинга кпримеру

После передачи команд в накопитель там производится проверка на наличие команд, для исполнения которых есть все необходимые операнды. Поиск таких команд выполняется путем анализа битов VS1 и VS2.Если у команды оба бита в единичном состоянии, то она готова к выдаче в ФБ. При наличии в накопителе только одной команды она сразу выдается в ФБ. Если готовых команд несколько, из них в ФБ пересылается наиболее «старая», то есть поступившая в накопитель первой. После завершения команды ее результат совместно с идентификатором регистра результата (Ro) выдается в РгФ и в накопитель для обновления их содержимого. В ходе обновления РгФ вычисленное значение заносится в RD, а бит достоверности регистра результата устанавливается в единицу. С этого момента значение RO доступно в качестве операнда для последующих команд. В накопителе производятся поиск идентификатора RO, в полях (OS1/ISI, OS2/IS2) всех команд и их замена на вычисленное значение. Одновременно состояние бита VS1 (VS1) изменяется на единицу. Далее выполняются очередной поиск готовых к исполнению команд и их выдача в ФБ.

Суперскалярные процессоры 4 7 1

Теперь рассмотрим технику переупорядочивания команд с использованием накопителей на примере следующей последовательности команд:

После декодирования и переименования регистров команда MUL в цикле г выдается в накопитель (рис. 9.53, а). Одновременно с этим из РгФ выбираются операнды этой команды (Rl и R2). Поскольку биты достоверности регистров операндов (V-биты) показывают, что значения операндов доступны (R1 - 10, R2 - 20), то эти значения будут переданы в накопитель, а биты наличия операндов в накопителе (VS1 и Va) будут установлены в единицу. Бит достоверности регистра назначения R3 в РгФ сбрасывается с тем, чтобы не допустить доступ к этому регистру последующих команд до тех пор, пока в него не будет помещен результат операцииMUL.

Рис.9.53.Кпримерутехникипереупорядочиваниякомандсиспользованиемнакопителей:

а— выдача команды MUL в накопитель в цикле i и выборка соответствующих операндов;

бпоиск выполнимых команд и диспетчеризация команды MUL в цикле i +1

Вследуюшем(* + 1)-м цикле происходит передача команды из накопителя (этот этап принято называть диспетчеризацией) в функциональный блок (ФБ) и выдача в накопитель двух очередных команд ADD. Сначала делается проверка битов наличия операндов (VS1 и VSJ) у всех находящихся в накопителе команд (в нашем примере здесь только одна команда MUL), Поскольку оба операнда доступны (VS1 - 1 и VS2 - 1), команда MUL пересылается в ФБ на исполнение. Это иллюстрируетрис.9.53,6.

Метрики параллельных вычислений 4 8 1

Общая форма параллелизма на уровне программ проистекает из разбиения программируемых данных на подмножества. Это разделение называют декомпозицией области (domain decomposition), а параллелизм, возникающий при этом, носит название параллелизма данных. Подмножества данных назначаются разным вычислительным процессам, и называется этот процесс распределением данных (data distribution). Процессоры выделяются определенным процессам либо по инициативе программы, либо в процессе работы операционной системой. На каждом процессоре может выполняться более чем один процесс.

Параллелизм уровня команд

Параллелизм на уровне команд имеет место, когда обработка нескольких команд или выполнение различных этапов одной и той же команды может перекрываться во времени. Разработчики вычислительной техники издавна прибегали к методам, известным под общим названием «совмещения операций*-, при котором аппаратура ВМ в любой момент времени выполняет одновременно более одной операции. Этотобщий принцип включает в себя два понятия: параллелизм и конвейеризацию. Хотя у них много общего и их зачастую трудно различать на практике, термины эти отражают два принципиально различных подхода.

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

Метрики параллельных вычислений

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

Профиль параллелизма программы

Число процессоров многопроцессорной системы, параллельно участвующих в выполнении программы в каждый момент времени t, определяют понятием степень параллелизма D(t) (DOP, Degree Of Parallelism). Графическое представление параметраD(t) какфункциивремениназываютпрофилем параллелизма программы.

Изменения в уровне загрузки процессоров за время наблюдения зависят от многих факторов (алгоритма, доступных ресурсов, степени оптимизации, обеспечиваемой компилятором и т. д.). Типичный профиль параллелизма для алгоритма декомпозиции (divide-and-conquer algorithm) показан на рис. 10.1.

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

16Заk.470

4 8 2 Глава 10. Параллелизм какосновaвысокопроизводительных вычислений

Рис. 10 . 1 . Профиль параллелизма

Общий объем вычислительной работы W (команд или вычислений), выполненной начиная со стартового момента ts до момента завершения tc, пропорционален площади под кривой профиля параллелизма:

Интеграл часто заменяют дискретным эквивалентом:

СреднийпараллелизмА

В дискретной форме это можн

:

Профиль параллелизма на рисунке за время наблюдения (ts, tc) возрастает от 1 до пикового значения т = 8, азатем спадает до 0. Средний параллелизм A = (1x5 + + 2 x 3 + 3 x 4 + 4 x 6 + 5 x 2 + 6x2 + 8x3) / (5+ 3 + 4 + 6 + 2 + 2 + 3) - 93/25- = 3,72. Фактически общая рабочая нагрузка и А представляют собой нижнюю границу асимптотического ускорения.

Будем говорить, что параллельная программа выполняется в режиме i, если для ее исполнения задействованы i процессоров. Время, на продолжении которого система работает в режиме i, обозначим через ti а объем работы, выполненной в ре-

Метрики параллельных вычислений 4 8 3

Асимптотическое повышение быстродействия 5_ определяется как отношение

Сравнивая это выражение и предыдущие уравнения, можно констатировать, что в идеальном варианте Soo = А. В общем случае нужно учитывать коммуникационные задержки и системные издержки. Отметим, что какSoo,так и А были определены в предположении, что п >> т.

В прикладных программах имеется широкий диапазон потенциального параллелизма. М. Кумар в своей статье [146] приводил данные, что в вычислительно интенсивных программах в каждом цикле параллельно могут выполняться от 500 до 3500 арифметических операций, если для этого имеется существующая вычислительная среда. Однако даже правильно спроектированный суперскалярный процессор способен поддерживать выполнение от 2 до 5,8 команды за цикл. Эти цифры дают пессимистическую картину возможного параллелизма.

Ускорение, эффективность, загрузка и качество

Рассмотрим параллельное выполнение программы со следующими характеристи-

-0(n) — общее число операций (команд), выполненных на «-процессорной системе;

-Т(п) — время выполнения О(п) операций на n-процессорной системе в виде числа квантов времени.

Вобщем случае Т(п) < О(п), если в единицу времени п процессорами выполняется более чем одна команда, где « > 2. Примем, что в однопроцессорной системе T(1)=о(1).

Ускорение (speedup), или точнее, среднее ускорение за счет параллельного выполнения программы — это отношение времени, требуемогодля выполнения наилучшего из последовательных алгоритмов на одном процессоре, и времени параллельного вычисления на п процессорах. Без учета коммуникационных издержек ускорение S(n) определяется как

Как правило, ускорение удовлетворяет условию S(n)<=п.

Эффективность (efficiency) n-процессорной системы — это ускорение на один процессор, определяемое выражением

4 8 4 Глава 10. Параллелизм как основа высокопроизводительныхвычислений

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

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

Это отношение отражает степень соответствия между программным и аппаратнымпараллелизмом.Очевидно,что1<=R(n)<=п.

Определимещеоднопонятие,коэффициентполезногоиспользованияилиутилизации (utilization), как

Тогда можно утверждать, что

Рассмотрим пример. Пусть наилучший из известных последовательных алгоритмов занимает 8 с, а параллельный алгоритм занимает на пяти процессорах 2 с Тогда:

-S(n) =8/2 = А; - E(n)=4/5 = 0,8;

-R(n)= 1/0,8- 1=0,25.

Собственноеускорениеопределяетсяпутемреализациипараллельногоалгоритма на одном процессоре.

Если ускорение, достигнутое на п процессорах, равно и, то говорят, что алгоритм показываетлинейноеускорение.

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

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

-Другая причина повышенного ускорения иллюстрируется примером. Пусть нам

нужно выполнить логическую операцию А1 v A2 где как А1, так и А2 имеют значение «Истина» с вероятностью 50%, причем среднее время вычисленияАi, обо-