ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.12.2021

Просмотров: 12175

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Увеличение производительности

293

Мы начали с микроархитектуры Mic-1 и, пройдя довольно долгий путь, закон-

чили микроархитектурой Mic-4. Микроархитектура Mic-i представляла собой
очень простой вариант аппаратного обеспечения, поскольку практически все
управление осуществлялось программным обеспечением. Микроархитектура

Mic-4 является конвейеризированной структурой с семью стадиями и более слож-
ным аппаратным обеспечением. Данный конвейер изображен на рис. 4.24. Цифры
в кружочках соответствуют компонентам рис. 4.23. Микроархитектура Mic-4 авто-
матически вызывает заранее поток байтов из памяти, декодирует его в команды
IJVM, превращает их в последовательность операций с помощью ПЗУ и применя-

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

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

команды IJVM занимает несколько циклов и очередь быстро переполнится.

Блок

выборки

команд

Декодер

Очередь

Операнды

Выполнение

Обратная

запись

Память

Рис. 4.24.

 Конвейер Mic-4

В каждом цикле значения регистров MIR перемещаются, а микрооперация,

находящаяся в начале очереди, копируется в регистр MIR1. Затем сигналы управле-

ния из всех четырех регистров MIR передаются по тракту данных, вызывая опре-

деленные действия. Каждый регистр MIR контролирует отдельную часть тракта
данных и, следовательно, различные микрошаги.

В данной разработке содержится конвейеризированный процессор. Благодаря

этому отдельные шаги становятся очень короткими, а тактовая частота — высо-

кой. Многие процессоры проектируются именно таким образом, особенно те, ко-
торым приходится выполнять старый набор команд (CISC). Например, процессор

Pentium II в некоторых аспектах сходен с микроархитектурой Mic-4, как мы уви-

дим позднее в этой главе.

Увеличение производительности

Все производители компьютеров хотят, чтобы их системы работали как можно

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

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

Усовершенствования, которые мы будем обсуждать, распадаются на две кате-

гории: усовершенствование реализации и усовершенствование архитектуры.


background image

294 Глава 4. Микроархитектурный уровень

Усовершенствования реализации — это такие способы построения нового процес-
сора и памяти, после применения которых система работает быстрее, но архитек-

тура при этом не меняется. Изменение реализации без изменения архитектуры

означает, что старые программы будут работать на новой машине, а это очень важно

для успешной продажи. Чтобы усовершенствовать реализацию, можно, например,

использовать более быстрый задающий генератор, но это не единственный способ.
Отметим, что улучшение производительности от компьютера 80386 к 80486, Pentium,

Pentium Pro, а затем Pentium II происходило без изменения архитектуры.

Однако некоторые типы усовершенствований можно осуществить только пу-

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

новых моделях. В этом случае для достижения полной производительности про-

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

Однако один раз в несколько десятилетий разработчики понимают, что старая

архитектура уже никуда не годится и что единственный способ развивать техно-
логии дальше — начать все заново. Таким революционным скачком было появле-

ние RISC в 80-х годах, и следующий прорыв уже приближается. Мы рассмотрим

наш пример (Intel IA-64) в главе 5.

Далее в этом разделе мы расскажем о четырех различных технологиях увеличе-

ния производительности процессора. Начнем мы с трех установившихся способов

усовершенствования реализации, а затем перейдем к методу, для которого требу-

ется поддержка архитектуры. Это кэш-память, прогнозирование ветвления, испол-

нение с изменением последовательности, подмена регистров и спекулятивное ис-

полнение.

Кэш-память

Одним из самых важных вопросов при разработке компьютеров было и остается

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

работы процессора, к сожалению, не сопровождается столь же высоким ростом

скорости работы памяти. Относительно процессора память работает все медлен-

нее и медленнее с каждым десятилетием. С учетом огромной важности основной

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

Современные процессоры предъявляют определенные требования к системе

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

Обычно с увеличением пропускной способности увеличивается время ожидания.

Например, технологии конвейеризации, которые используются в микроархитек-

туре Mic-З, можно применить к системе памяти, при этом запросы памяти будут


background image

Увеличение производительности 295

обрабатываться более рационально, с перекрытием. Но, к сожалению, как и в мик-

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

сложнее обеспечить такую систему памяти, которая может передавать операнды

за один или два цикла.

Один из способов решения этой проблемы — добавление кэш-памяти. Как мы

говорили в разделе «Кэш-память» главы 2, кэш-память содержит наиболее часто
используемые слова, что повышает скорость доступа к ним. Если достаточно боль-

шой процент нужных слов находится в кэш-памяти, время ожидания может силь-

но сократиться.

Одной из самых эффективных технологий одновременного увеличения про-

пускной способности и уменьшения времени ожидания является применение не-
скольких блоков кэш-памяти. Основная технология — введение отдельной кэш-

памяти для команд и отдельной для данных

 (разделенной

 кэш-памяти). Такая

кэш-память имеет несколько преимуществ. Во-первых, операции могут начинать-

ся независимо в каждой кэш-памяти, что удваивает пропускную способность си-

стемы памяти. Именно по этой причине в микроархитектуре Mic-1 нам понадоби-

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

В настоящее время многие системы памяти гораздо сложнее этих. Между

разделенной кэш-памятью

 и

 основной памятью часто помещается

 кэш-память

второго уровня.

 Вообще говоря, может быть три и более уровней кэш-памяти,

поскольку требуются более продвинутые системы. На рис. 4.25 изображена систе-

ма с тремя уровнями кэш-памяти. Прямо на микросхеме центрального процессора

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

данных. Эта кэш-память обычно не является разделенной и содержит смесь дан-

ных и команд. Ее размер — от 512 Кбайт до 1 Мбайт. Кэш-память третьего уровня
находится на той же плате, что

 и

 процессор,

 и

 обычно состоит из статического ОЗУ

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

уровня находится в кэш-памяти третьего уровня.

Существует два типа локализации адресов. Работа кэш-памяти зависит от этих

типов локализации.

 Пространственная локализация

 основана на вероятности, что

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

Временная локализация

 имеет место, когда недавно запрашиваемые ячейки за-

прашиваются снова. Это может происходить, например, с ячейками памяти, нахо-

дящимися рядом с вершиной стека или с командами внутри цикла. Принцип вре-

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


background image

296

Глава 4. Микроархитектурный уровень

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

Корпус

процессора

Плата ,

процессора

Микросхема

процессора

Кэш-память

первого уровня

для команд

Кэш-память

первого уровня

для данных

Объединенная

кэш-память

второго уровня

Объединенная

кэш-память

третьего уровня

Контроллер

клавиатуры

Графический

контроллер

Контроллер

диска

Основная

память

(динамическое

ОЗУ)

Разделенная кэш-память первого уровня

Кэш-память в плате процессора

(статическое ОЗУ)

Рис.

 4.25. Система с тремя уровнями кэш-памяти

Во всех типах кэш-памяти используется следующая модель. Основная память

разделяется на блоки фиксированного размера, которые называются

 строками кэш-

памяти.

 Строка кэш-памяти состоит из нескольких последовательных байтов (обыч-

но от 4 до 64). Строки нумеруются, начиная с 0, то есть если размер строки со-

ставляет 32 байта, то строка 0 — это байты с 0 по 31, строка 1 — байты с 32 по 63

и т. д. В любой момент несколько строк находится в кэш-памяти. Когда происхо-

дит обращение к памяти, контроллер кэш-памяти проверяет, есть ли нужное слово

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

данной схемы, но в их основе всегда лежит идея держать в кэш-памяти как можно

больше часто используемых строк, чтобы число успешных обращений к кэш-па-
мяти было максимальным.

Кэш-память прямого отображения

Самый простой тип кэш-памяти — это

 кэш-память прямого отображения.

 При-

мер одноуровневой кэш-памяти прямого отображения показан на рис. 4.26,

 а.

 Дан-

ная кэш-память содержит 2048 элементов. Каждый элемент (ряд) может вмещать

ровно одну строку из основной памяти. Если размер строки кэш-памяти 32 байта


background image

Увеличение производительности

297

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

1. Бит достоверности указывает, есть ли достоверные данные в элементе или нет.

Когда система загружается, все элементы маркируются как недостоверные.

2. Поле «Тег» состоит из уникального 16-битного значения, указывающего

соответствующую строку памяти, из которой поступили данные.

3. Поле «Данные» содержит копию данных памяти. Это поле вмещает одну

строку кэш-памяти в 32 байта.

Бит

достоверности

Элемент •

  Т е г

  Д

а н н ы е

2047

7

'-

7

6
5

4

3

2

1

0

-

 -

Адреса, которые используют этот элемент

65504-65535, 131040-131072,...

96-127, 65632-65663, 131068-131099

64-95, 65600-65631, 131036-131067,...

32-63, 65568-65599, 131004-131035,...

0-31, 65536-65567, 131072-131003,...

Биты

16

11

ТЕГ

СТРОКА

СЛОВО

БАЙТ

Рис. 4.26.

 Кэш-память прямого отображения (а); 32-битный виртуальный адрес (б)

В кэш-памяти прямого отображения данное слово может храниться только в од-

ном месте. Если дан адрес слова, то в кэш-памяти его можно искать только в одном

месте. Если его нет на этом определенном месте, значит, его вообще нет в кэш-
памяти. Для хранения и удаления данных из кэш-памяти адрес разбивается на
4 компонента, как показано на рис. 4.26,

 б:

1. Поле «ТЕГ» соответствует битам, сохраненным в поле «Тег» элемента кэш-

памяти.

2. Поле «СТРОКА» указывает, какой элемент кэш-памяти содержит соответ-

ствующие данные, если они есть в кэш-памяти.

3. Поле «СЛОВО» указывает, на какое слово в строке производится ссылка.

4. Поле «БАЙТ» обычно не используется, но если требуется только один байт,

поле сообщает, какой именно байт в слове нужен. Для кэш-памяти, поддер-
живающей только 32-битные слова, это поле всегда будет содержать 0.