ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 12175
Скачиваний: 10

Увеличение производительности
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, как мы уви-
дим позднее в этой главе.
Увеличение производительности
Все производители компьютеров хотят, чтобы их системы работали как можно
быстрее. В этом разделе мы рассмотрим ряд передовых технологий для повыше-
ния производительности системы (в первую очередь процессора и памяти), кото-
рые исследуются в настоящее время. Поскольку в компьютерной промышленнос-
ти наблюдается огромное количество конкурентов, между появлением новой идеи
о том, как повысить скорость работы компьютера, и воплощением этой идеи обыч-
но проходит очень небольшой период времени. Следовательно, большинство идей,
которые мы сейчас будем обсуждать, уже применяются в производстве.
Усовершенствования, которые мы будем обсуждать, распадаются на две кате-
гории: усовершенствование реализации и усовершенствование архитектуры.

294 Глава 4. Микроархитектурный уровень
Усовершенствования реализации — это такие способы построения нового процес-
сора и памяти, после применения которых система работает быстрее, но архитек-
тура при этом не меняется. Изменение реализации без изменения архитектуры
означает, что старые программы будут работать на новой машине, а это очень важно
для успешной продажи. Чтобы усовершенствовать реализацию, можно, например,
использовать более быстрый задающий генератор, но это не единственный способ.
Отметим, что улучшение производительности от компьютера 80386 к 80486, Pentium,
Pentium Pro, а затем Pentium II происходило без изменения архитектуры.
Однако некоторые типы усовершенствований можно осуществить только пу-
тем изменения архитектуры. Иногда, например, нужно добавить новые команды
или регистры, причем таким образом, чтобы старые программы могли работать на
новых моделях. В этом случае для достижения полной производительности про-
граммное обеспечение должно быть изменено или, по крайней мере, заново ском-
пилировано на новом компиляторе.
Однако один раз в несколько десятилетий разработчики понимают, что старая
архитектура уже никуда не годится и что единственный способ развивать техно-
логии дальше — начать все заново. Таким революционным скачком было появле-
ние RISC в 80-х годах, и следующий прорыв уже приближается. Мы рассмотрим
наш пример (Intel IA-64) в главе 5.
Далее в этом разделе мы расскажем о четырех различных технологиях увеличе-
ния производительности процессора. Начнем мы с трех установившихся способов
усовершенствования реализации, а затем перейдем к методу, для которого требу-
ется поддержка архитектуры. Это кэш-память, прогнозирование ветвления, испол-
нение с изменением последовательности, подмена регистров и спекулятивное ис-
полнение.
Кэш-память
Одним из самых важных вопросов при разработке компьютеров было и остается
построение такой системы памяти, которая могла бы передавать операнды про-
цессору с той же скоростью, с которой он их обрабатывает. Быстрый рост скорости
работы процессора, к сожалению, не сопровождается столь же высоким ростом
скорости работы памяти. Относительно процессора память работает все медлен-
нее и медленнее с каждым десятилетием. С учетом огромной важности основной
памяти эта ситуация сильно ограничивает развитие систем с высокой производи-
тельностью и направляет исследование таким путем, чтобы обойти проблему очень
низкой по сравнению с процессором скорости работы памяти. И, откровенно гово-
ря, эта ситуация ухудшается с каждым годом.
Современные процессоры предъявляют определенные требования к системе
памяти и относительно времени ожидания (задержки в доставке операнда), и от-
носительно пропускной способности (количества данных, передаваемых в едини-
цу времени). К сожалению, эти два аспекта системы памяти сильно расходятся.
Обычно с увеличением пропускной способности увеличивается время ожидания.
Например, технологии конвейеризации, которые используются в микроархитек-
туре Mic-З, можно применить к системе памяти, при этом запросы памяти будут

Увеличение производительности 295
обрабатываться более рационально, с перекрытием. Но, к сожалению, как и в мик-
роархитектуре Mic-З, это приводит к увеличению времени ожидания отдельных
операций памяти. С увеличением скорости задающего генератора становится все
сложнее обеспечить такую систему памяти, которая может передавать операнды
за один или два цикла.
Один из способов решения этой проблемы — добавление кэш-памяти. Как мы
говорили в разделе «Кэш-память» главы 2, кэш-память содержит наиболее часто
используемые слова, что повышает скорость доступа к ним. Если достаточно боль-
шой процент нужных слов находится в кэш-памяти, время ожидания может силь-
но сократиться.
Одной из самых эффективных технологий одновременного увеличения про-
пускной способности и уменьшения времени ожидания является применение не-
скольких блоков кэш-памяти. Основная технология — введение отдельной кэш-
памяти для команд и отдельной для данных
(разделенной
кэш-памяти). Такая
кэш-память имеет несколько преимуществ. Во-первых, операции могут начинать-
ся независимо в каждой кэш-памяти, что удваивает пропускную способность си-
стемы памяти. Именно по этой причине в микроархитектуре Mic-1 нам понадоби-
лись два отдельных порта памяти: особый порт для каждой кэш-памяти. Отметим,
что каждая кэш-память имеет независимый доступ к основной памяти.
В настоящее время многие системы памяти гораздо сложнее этих. Между
разделенной кэш-памятью
и
основной памятью часто помещается
кэш-память
второго уровня.
Вообще говоря, может быть три и более уровней кэш-памяти,
поскольку требуются более продвинутые системы. На рис. 4.25 изображена систе-
ма с тремя уровнями кэш-памяти. Прямо на микросхеме центрального процессора
находится небольшая кэш-память для команд и небольшая кэш-память для дан-
ных, обычно от 16 до 64 Кбайт. Есть еще кэш-память второго уровня, которая рас-
положена не на самой микросхеме процессора, а рядом с ним в том же блоке. Кэш-
память второго уровня соединяется с процессором через высокоскоростной тракт
данных. Эта кэш-память обычно не является разделенной и содержит смесь дан-
ных и команд. Ее размер — от 512 Кбайт до 1 Мбайт. Кэш-память третьего уровня
находится на той же плате, что
и
процессор,
и
обычно состоит из статического ОЗУ
в несколько мегабайтов, которое функционирует гораздо быстрее, чем динамичес-
кое ОЗУ основной памяти. Обычно все содержимое кэш-памяти первого уровня
находится в кэш-памяти второго уровня, а все содержимое кэш-памяти второго
уровня находится в кэш-памяти третьего уровня.
Существует два типа локализации адресов. Работа кэш-памяти зависит от этих
типов локализации.
Пространственная локализация
основана на вероятности, что
в скором времени появится потребность обратиться к ячейкам памяти, которые
расположены рядом с недавно вызванными ячейками. Исходя из этого наблюде-
ния в кэш-память переносится больше данных, чем требуется в данный момент.
Временная локализация
имеет место, когда недавно запрашиваемые ячейки за-
прашиваются снова. Это может происходить, например, с ячейками памяти, нахо-
дящимися рядом с вершиной стека или с командами внутри цикла. Принцип вре-
менной локализации используется при выборе того, какие элементы выкинуть из

296
Глава 4. Микроархитектурный уровень
кэш-памяти в случае промаха кэш-памяти. Обычно отбрасываются те элементы,
к которым давно не было обращений.
Корпус
процессора
Плата ,
процессора
Микросхема
процессора
Кэш-память
первого уровня
для команд
Кэш-память
первого уровня
для данных
Объединенная
кэш-память
второго уровня
Объединенная
кэш-память
третьего уровня
Контроллер
клавиатуры
Графический
контроллер
Контроллер
диска
Основная
память
(динамическое
ОЗУ)
Разделенная кэш-память первого уровня
Кэш-память в плате процессора
(статическое ОЗУ)
Рис.
4.25. Система с тремя уровнями кэш-памяти
Во всех типах кэш-памяти используется следующая модель. Основная память
разделяется на блоки фиксированного размера, которые называются
строками кэш-
памяти.
Строка кэш-памяти состоит из нескольких последовательных байтов (обыч-
но от 4 до 64). Строки нумеруются, начиная с 0, то есть если размер строки со-
ставляет 32 байта, то строка 0 — это байты с 0 по 31, строка 1 — байты с 32 по 63
и т. д. В любой момент несколько строк находится в кэш-памяти. Когда происхо-
дит обращение к памяти, контроллер кэш-памяти проверяет, есть ли нужное слово
в данный момент в кэш-памяти. Если есть, то можно сэкономить время, требуемое
на доступ к основной памяти. Если данного слова в кэш-памяти нет, то какая-либо
строка из нее удаляется, а вместо нее помещается нужная строка из основной па-
мяти или из кэш-памяти более низкого уровня. Существует множество вариаций
данной схемы, но в их основе всегда лежит идея держать в кэш-памяти как можно
больше часто используемых строк, чтобы число успешных обращений к кэш-па-
мяти было максимальным.
Кэш-память прямого отображения
Самый простой тип кэш-памяти — это
кэш-память прямого отображения.
При-
мер одноуровневой кэш-памяти прямого отображения показан на рис. 4.26,
а.
Дан-
ная кэш-память содержит 2048 элементов. Каждый элемент (ряд) может вмещать
ровно одну строку из основной памяти. Если размер строки кэш-памяти 32 байта

Увеличение производительности
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.