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

Boroda_2

.doc
Скачиваний:
7
Добавлен:
20.03.2015
Размер:
1.67 Mб
Скачать

Под изображенной на рис. 4.31 подсистемой памяти находится блок предва­рительной обработки, который выбирает команды из L2 и декодирует их в по­рядке выполнения команд программы. Каждая команда на уровне ISA разбива­ется на последовательность RISC-подобных микроопераций. Для упрощения команд блок выборки-декодирования определяет, какие микрооперации необхо­димы для решения внутренних задач. В более сложных случаях производится поиск последовательности микроопераций в памяти микрокоманд. В любом слу­чае команда уровня ISA процессора Pentium 4 преобразуется в последователь­ность микроопераций, подлежащих исполнению RISC-ядром микросхемы. Этот механизм позволяет «навести мосты» между устаревшим набором CISC-команд и современным трактом данных RISC.

Декодированные микрооперации отправляются в кэш трасс (trace cache), в роли которого выступает кэш команд первого уровня. Поскольку кэшируются не исходные команды, а декодированные микрооперации, необходимость в по­вторном декодировании при извлечении команды из кэша трасс отпадает. В этом заключается одно из наиболее существенных расхождений между микроархи­тектурами NetBurst и Р6 (в последней команды Pentium удерживались в кэше команд первого уровня). Здесь же выполняется прогнозирование ветвлений.

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

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

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

Конвейер NetBurst

На рис. 4.32 приводится более подробная схема микроархитектуры NetBurst, в том числе ее конвейер. В верхней части схемы изображен блок предваритель­ной обработки, ответственный за выборку команд из памяти и их подготовку к выполнению. Этот блок получает новые инструкции Pentium из кэша второго уровня порциями по 64 бит. Они декодируются в микрооперации и помещаются в кэш трасс. Емкость кэша трасс составляет 12 ООО микроопераций, и по своей производительности он сопоставим с традиционным кэшем первого уровня на 8 или 16 Кбайт.


В кэше трасс каждые шесть микроопераций объединяются в группу, зани­мающую одну строку. Микрооперации из одной строки выполняются без нару­шения последовательности, хотя они могут быть образованы из ISA-команд Pen­tium, отстоящих друг от друга на тысячи байтов. Для формирования более протяженных последовательностей микроопераций практикуется объединение трассируемых строк.

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

Встретившись с командой безусловного перехода, блок декодирования ищет предсказанный объект перехода в буфере объектов перехода (Branch Target Buffer, ВТВ) первого уровня и продолжает декодирование с соответствующего адреса. В кэше буфера объектов перехода первого уровня сохраняются 4000 последних переходов. Если необходимая команда перехода отсутствует в таблице, приме­няется статическое прогнозирование. При этом подразумевается, что обратный переход, во-первых, является частью цикла, во-вторых, не занят. Точность стати­ческого прогноза в этом случае очень высока. Прямой переход считается незаня­тым и входящим в структуру оператора if. Точность статического прогноза в случае прямых переходов значительно ниже, чем в случае обратных. Для про­гнозирования микроопераций перехода применяется буфер трасс объектов пе­рехода, или ВТВ трасс.

Второй компонент конвейера — логика исполнения с изменением последова­тельности — получает данные из кэша трасс емкостью 12 ООО микроопераций. При поступлении из блока предварительной обработки каждой последующей микрооперации (а за цикл их поступает три) блок распределения и подмены ре­гистрирует ее в таблице, состоящей из 128 записей и называемой буфером пере- упорядочивания команд (ReOrder Buffer, ROB). В этом буфере хранятся дан­ные о состоянии микрооперации, вплоть до пересортировки ее результатов. Затем блок распределения и подмены проводит проверку на предмет доступно­сти ресурсов, необходимых для выполнения микрооперации. Если ресурсы сво­бодны, микрооперация устанавливается в одну из очередей на выполнение. Для микроопераций, исполняемых в памяти и вне памяти, предусмотрены отдельные очереди. Если выполнение микрооперации в данный момент невозможно, она откладывается, однако обработка последующих микроопераций продолжается; та­ким образом, микрооперации часто выполняются вне их исходной последова­тельности. Этот принцип позволяет поддерживать загрузку всех функциональ­ных блоков на максимально высоком уровне. В каждый отдельно взятый момент могут одновременно обрабатываться до 126 команд, причем 48 из них могут за­гружаться из памяти, а 24 — сохраняться в памяти.

Иногда микрооперации простаивают. Это происходит в тех случаях, когда к одному и тому же регистру для чтения или записи пытаются обратиться не­сколько микроопераций; соответственно, одной из них это удается, а остальным — нет. Такие конфликты, как мы уже выяснили, называются WAR- и WAW-взаи- мозависимостями. Подмена целевого регистра позволяет записать результаты выполнения микрооперации в один из 120 временных регистров, а значит, вы­полнить эту микрооперацию немедленно. Если же все временные регистры не­доступны или микрооперация попадает в ситуацию RAW-взаимозависимости (обойти которую нельзя), планировщик указывает характер возникшей пробле­мы в виде записи в буфере ROB. Впоследствии, после освобождения всех необ­ходимых ресурсов, микрооперация устанавливается в одну из очередей на вы­полнение.

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

  1. Планировщик 1 — АЛУ 1 и блок смещения операций с плавающей точкой.

  2. Планировщик 2 — АЛУ 2 и блок исполнения операций с плавающей точкой.

  3. Планировщик 3 - команды загрузки.

  4. Планировщик 4 — команды сохранения.

Поскольку планировщики и АЛУ работают на скорости, вдвое превышающей номинальную тактовую частоту, первые два планировщика могут передавать по две микрооперации за цикл. Учитывая то, что два целочисленных АЛУ тоже ра­ботают на удвоенной скорости, процессор Pentium 4 с тактовой частотой 3 ГГц способен выполнять 12 млрд целочисленных операций в секунду. В силу столь высокой скорости блок контроля исполнения с изменением последовательности испытывает некоторые трудности с загрузкой АЛУ. Команды загрузки и сохра­нения проходят через один блок исполнения, работающий на удвоенной частоте, который в течение одного цикла может вызывать по одной команде обоих типов. Таким образом, в лучшем случае (при отсутствии операций с плавающей точ­кой) за цикл может быть вызвано 6 целочисленных микроопераций.

Два целочисленных АЛУ не одинаковы. АЛУ 1 выполняет любые арифмети­ческие и логические операции и переходы. АЛУ 2 способно выполнять только команды сложения, вычитания, сдвига и циклического сдвига. Не идентичны и два блока исполнения операций с плавающей точкой. Первый из них выполняет только сдвиги и SSE-команды. Второй поддерживает арифметические операции с плавающей точкой, а также ММХ- и SSE-команды.

АЛУ и блоки исполнения операций с плавающей точкой получают данные от двух регистровых файлов емкостью по 128 записей. Один из этих файлов отво­дится для целых чисел, другой — для чисел с плавающей точкой. В них содер­жатся все операнды, необходимые для исполнения команд; кроме того, они игра­ют роль хранилища результатов. В силу подмены регистров восемь из них содержат регистры, доступные на уровне архитектуры команд (ЕАХ, ЕВХ, ЕСХ, EDX и т. д.), однако расположение «реальных» значений в каждом конкретном случае зависит от изменений в отображении, происходящих в ходе выполнения.

Кэш данных первого уровня является одним из компонентов высокоскорост­ной (2х) схемы. При емкости 8 Кбайт в нем хранятся целые числа, числа с пла­вающей точкой и другие типы данных. В отличие от кэша трасс, эти данные ни­коим образом не декодируются. Функция кэша данных сводится к хранению копий байтов, находящихся в памяти. Что касается его характеристик, то кэш данных первого уровня представляет собой 4-входовую ассоциативную кэшпа­мять с емкостью строки 64 байт. Он поддерживает сквозную запись; иными сло­вами, при изменении строки кэша она незамедлительно копируется обратно в кэш второго уровня. В течение цикла кэш данных первого уровня обрабатывает по одной операции чтения и записи. Если затребованное слово не удается обна­ружить в кэше первого уровня, отправляется запрос в кэш второго уровня; по­следний в такой ситуации может ответить либо сразу, либо после выборки соот­ветствующей строки из памяти. В любой момент в состоянии исполнения могут находиться до четырех запросов, направленных из кэша первого уровня в кэш второго уровня.

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

Если команда сохранения прошла пересортировку результатов, но предшест­вующие команды еще обрабатываются, из-за невозможности обновления кэша первого уровня результаты их выполнения передаются в буфер незавершенных команд. В этом буфере можно единовременно разместить до 24 команд сохране­ния. Если одна из последующих команд загрузки попытается считать сохранен­ные данные, она из буфера незавершенных команд будет перенаправлена непо­средственно к команде, которая в этот момент еще не помещена в кэш данных первого уровня. Этот процесс называется перенаправлением для загрузки (store- to-load forwarding).

Итак, достаточно очевидно, что Pentium 4 обладает сложной микроархитекту­рой, проектное решение которой определено необходимостью поддержки унасле­дованного набора команд Pentium на современном RISC-ядре с высоким уровнем конвейеризации. Эта цель достигается путем деления команд Pentium на микро­операции, их кэширования и передачи (по три микрооперации за раз) конвейеру, где они выполняются с помощью нескольких АЛУ, которые в оптимальных усло­виях обрабатывают до шести микроопераций за цикл. Микрооперации выполня­ются с отклонением от исходной последовательности, но возвращаются и сохра­няются в кэш-памяти первого и второго уровней в заданном порядке. Более подробные сведения о микроархитектуре NetBurst представлены в работе [94].

Микроархитектура процессора UltraSPARC III Си

Серия процессоров UltraSPARC, произведенная компанией Sun, — это реализа­ция версии 9 архитектуры SPARC. На первый взгляд все модели очень похожи и различаются главным образом по производительности и цене. В то же время, на уровне микроархитектуры они существенно различаются. В этом разделе мы обсудим процессор UltraSPARC III Си. Аббревиатура «Си» в названии модели говорит о том, что проводники микросхемы сделаны из меди — в отличие от алюминиевых проводников, применявшихся в предыдущих моделях. Сопротив­ление меди ниже сопротивления алюминия, за счет этого провода становятся тоньше, а быстродействие — выше.

UltraSPARC III Си — это 64-разрядная машина с 64-разрядными регистрами и 64-разрядным трактом данных, но в целях совместимости с машинами версии 8 (которые являются 32-разрядными) она может работать с 32-разрядными операн­дами, а программное обеспечение, написанное для 32-разрядных версий SPARC, изменять не нужно. Хотя во внутренней архитектуре машины используются 64 разряда, ширина шины памяти составляет 128 бит, аналогично процессору Pentium II с 32-разрядной архитектурой и 64-разрядной шиной памяти. В обоих случаях в одну систему устанавливаются шина и процессор разных поколений.

В отличие от Pentium 4, процессор UltraSPARC изначально проектировался как полноценная RISC-система. Следовательно, необходимости в сложном меха­низме преобразования старых CISC-команд в микрооперации в данном случае не было. Команды ядра представляют собой готовые микрооперации. Ситуация несколько осложняется появлением в последние годы новых команд обработки графических и мультимедийных данных, для выполнения которых требуются специальные устройства.

Общий обзор системы UltraSPARC III Си

Структурная схема UltraSPARC III Си представлена на рис. 4.33. В целом, она значительно проще микроархитектуры NetBurst, применяемой в системах Pentium 4, что объясняется менее изощренной архитектурой системы команд UltraSPARC. Тем не менее по некоторым базовым компонентам сходство с Pen­tium 4 прослеживается. В первую очередь, это обусловлено технологическими и экономическими факторами. К примеру, в период проектирования этих микро­схем объем кэшей данных первого составлял от 8 до 16 Кбайт. Этому стандарту соответствовали обе рассматриваемые микросхемы. Когда производство кэш-памя- ти первого уровня емкостью 64 Мбайт станет обоснованным с технологической и экономической точек зрения, все процессоры будут оснащаться уже новыми кэшами. Различия между Pentium 4 и UltraSPARC III Си связаны по большей части с тем, что в первом случае разработчикам пришлось обеспечить поддержку унаследованного набора CISC-команд, а во втором такой задачи не ставилось.

В левой верхней части рис. 4.33 изображен 4-входовый ассоциативный кэш команд емкостью 32 Кбайт с 32-байтными строками. Поскольку большинство команд UltraSPARC занимают 4 байта, в этом кэше можно одновременно раз­местить около 8000 команд. По этому признаку UltraSPARC III Си несколько уступает кэшу трасс NetBurst.

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

Как показано на рис. 4.33, из буфера команд команды попадают в блок испол­нения целочисленных операций, блок исполнения операций с плавающей точ­кой и блок загрузки/сохранения. Блок исполнения целочисленных операций со­стоит из двух АЛУ и короткого конвейера для обработки команд перехода. Кроме того, здесь есть регистры ISA и временные регистры.

Блок исполнения операций с плавающей точкой состоит из 32 регистров и трех независимых АЛУ, предназначенных для выполнения операций сложе­ния/вычитания, умножения и деления, соответственно. Этот же блок выполняет графические операции.

Блок загрузки/сохранения, как явствует из его названия, ответственен за об­работку разнообразных команд загрузки и сохранения. Содержащиеся в нем тракты данных обеспечивают соединение с тремя кэшами. Кэш данных представляет со­бой традиционную предназначенную для обработки данных 4-входовую ассоциа­тивную кэш-память первого уровня емкостью 64 Кбайт с длиной строки 32 байт. Кэш предвыборки емкостью 2 Кбайт нужен по той причине, что на уровне архи­тектуры команд UltraSPARC предусмотрены команды упреждающей выборки, которые позволяют компилятору вызывать слова еще до того, как в них возник­нет необходимость. Если компилятор полагает, что через некоторое время ему потребуется то или иное слово, он запускает команду предвыборки. В результате соответствующая строка с упреждением загружается в кэш предвыборки, и через несколько команд обращение к этой строке происходит существенно быстрее, чем если бы она не была загружена. В некоторых ситуациях проводится и аппарат­ная предвыборка, позволяющая повысить скорость работы устаревших программ, не поддерживающих программную предвыборку. Кэш записи представляет со­бой небольшой по объему (2 Кбайт) блок кэш-памяти, предназначенный для объединения результатов записи, а следовательно, оптимизации потребления ре­сурсов широкой (256-разрядной) шины, ведущей к кэшу второго уровня. Един­ственное назначение кэша записи состоит в повышении производительности.

В микросхеме UltraSPARC III Си также предусмотрена логика управления доступом к памяти. Она состоит из трех компонентов: системного интерфейса, контроллера кэша второго уровня и контроллера памяти. Системный интерфейс обеспечивает взаимодействие с памятью по 128-разрядной шине. Через этот ин­терфейс проходят все запросы вовне, за исключением запросов к кэшу второго уровня. Теоретически при использовании 43-разрядных адресов физической па­мяти объем основной памяти может доходить до 8 Тбайт, однако размер печат­ной платы, на которой устанавливается процессор, ограничивает этот показатель значением 16 Гбайт. Проектное решение интерфейса позволяет подключать к од­ному модулю памяти сразу несколько процессоров UltraSPARC, за счет чего фор­мируется мультипроцессор. О мультипроцессорах речь пойдет в главе 8.

Контроллер кэша второго уровня сопряжен с объединенным кэшем второго уровня, который расположен вне микросхемы процессора. При внешнем разме­щении кэша второго уровня его объем может составлять 1, 4 или даже 8 Мбайт. Длина строки зависит от объема кэша (от 64 байт в кэше объемом 1 Мбайт до 512 байт в кэше объемом 8 Мбайт). Напомним, что кэш второго уровня Pen­tium 4 расположен на микросхеме, и из-за нехватки на ней свободного места его объем ограничен значением 1 Мбайт. Таким образом, в UltraSPARC обеспечива­ется значительно более высокий коэффициент кэш-попаданий, чем в Pentium (что объясняется большим объемом кэша), однако скорость доступа здесь ниже (потому что кэш расположен вне микросхемы).

Контроллер памяти преобразует 64-разрядные виртуальные адреса в 43-разряд- ные физические адреса. UltraSPARC поддерживает виртуальную память (см. гла­ву 6) с размерами страницы 8, 64 и 512 Кбайт, а также 4 Мбайт. Для ускорения про­цесса преобразования предусмотрены специальные таблицы, называемые буферами быстрого преобразования (Translation Lookaside Buffers, TLB). Они сравнивают те­кущий виртуальный адрес с адресами, по которым производились обращения в недавнем прошлом. Три такие таблицы обеспечивают гибкое управление размера­ми страниц данных, а еще две обрабатывают команды преобразования.

Конвейер UltraSPARC III Си

Конвейер UltraSPARC III Си из 14 ступеней в упрощенной форме изображен на рис. 4.34. В левой части рисунка ступени обозначены буквами от А до D. Рас­смотрим каждую из них в отдельности. Открывает конвейер ступень A (Address generation — формирование адреса). Здесь определяется адрес каждой последую­щей команды, которую предполагается выбрать. Как правило, он совпадает с ад­ресом следующей команды, однако в некоторых случаях последовательная орга­низация нарушается, например, если предыдущая команда является командой спрогнозированного перехода, перехвата исключения или прерывания, которое необходимо обработать. Так как прогнозирование ветвления за один цикл невоз­можно, команда, непосредственно следующая за условным переходом, выполня­ется в любом случае, вне зависимости от целевого объекта перехода.

Исходя из определенного ранее адреса на ступени Р (Preliminary fetch — предварительная выборка) вызываются команды из кэша команд первого уров­ня (до четырех за цикл). Для выявления условных переходов и проверки пра­вильности прогноза производятся обращения к таблице переходов. На ступени F (Fetch — выборка) завершается выборка команд и их передача в кэш команд.

На ступени В (Branch target — обнаружение объекта перехода) происходит декодирование выбранных команд. Если среди них обнаруживаются спрогнози­рованные переходы, они передаются обратно на ступень А для непосредственной выборки соответствующих команд.

На ступени I (Instruction group formation — группировка команд) входящие команды сортируются по группам, в зависимости от того, к каким из шести функциональных блоков они обращаются:

  1. АЛУ 1 для выполнения целочисленных операций.

  2. АЛУ 2 для выполнения целочисленных операций.

  3. АЛУ 1 для выполнения операций с плавающей точкой и графических операций.

  4. АЛУ 2 для выполнения операций с плавающей точкой и графических операций.

  5. Конвейер переходов (на рис. 4.34 не представлен).

  6. Операции загрузки и хранения, а также специальные операции.

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

На ступени J (Instruction stage grouping — извлечение команды из очереди) команды подготавливаются к отправке в блок выполнения во время следующего цикла. В течение одного цикла на ступень R можно передать до четырех команд. Выбор команд ограничен доступностью функциональных блоков. К примеру, еди­новременно можно вызвать две команды выполнения целочисленной операции, одну команду выполнения операции с плавающей точкой и одну команду загруз­ки или сохранения. Однако запустить за один цикл три команды выполнения це­лочисленных операций невозможно.

На ступени R (Register — регистр) производится поиск регистров, необходи­мых для обработки команд выполнения целочисленных операций. Запросы на предоставление регистров с плавающей точкой перенаправляются в соответ­ствующий регистровый файл. Здесь же проводятся проверки на предмет взаимо­зависимостей. Если необходимый регистр оказывается недоступным по причи­не его занятости предыдущей командой, текущая команда приостанавливается, а все последующие команды — блокируются. В отличие от Pentium 4, в Ultra­SPARC III Си команды вне исходной последовательности не выполняются.

Ступень Е (Execution — выполнение) предназначена для непосредственного выполнения целочисленных команд. Для выполнения большинства арифметиче­ских и булевых операций, а также операций сдвига, обработкой которых занима­ются целочисленные АЛУ, достаточно одного цикла. Сразу по завершении вы­полнения команды соответствующим образом обновляется регистровый файл рабочего регистра. Некоторые сложные целочисленные команды передаются в специальный блок. Что касается команд загрузки и сохранения, то на данной ступени их выполнение только начинается, но не заканчивается. Операнды для выполнения команды с плавающей точкой извлекаются из соответствующего ре­гистрового файла. На ступени Е, помимо обработки команд условного перехода, определяется их направление (переход/без перехода). В случае неверного про­гноза сигнал отправляется обратно на ступень А, и конвейер освобождается.

На ступени С (Cache — кэш) завершается доступ к кэш-памяти первого уров­ня. Здесь же определяются результаты команд, предусматривающих чтение дан­ных из памяти (например, команд загрузки).

На ступени М (Miss — промах) производится обработка слов, запрошенных, но не найденных в кэш-памяти первого уровня. Сначала выполняется поиск в кэше второго уровня, а в случае кэш-промаха осуществляется обращение к памя­ти, занимающее несколько циклов. Здесь же выполняются операции знакового расширения и выравнивания для байтов, четвертинок слов и половинок слов, найденных в кэше первого уровня. Для операций загрузки с плавающей точкой, у которых в кэше предвыборки имеет место кэш-попадание, на этом этапе удает­ся получить результаты. По соображениям синхронизации кэш предвыборки при обработке целочисленных данных не задействуется.

На ступени W (Write — запись) результаты извлекаются из специального блока и записываются в регистровый файл рабочего регистра.

На ступени X (eXtend — продленное выполнение) завершается большинство графических команд и команд с плавающей точкой. Перед формальной пересор­тировкой результатов, происходящей на ступени Д результаты этих команд пре­доставляются последующим командам путем перенаправления для загрузки.

На ступени Т (Trap — перехват) перехватываются исключения, связанные с целочисленными командами и командами с плавающей точкой. Именно эта ступень отвечает за перехват исключений и обработку прерываний. Иными сло­вами, после возникновения исключения или прерывания состояние машины должно отвечать определенным требованиям; в частности, все ранее запущенные команды должны быть завершены, а запуск последующих отменен.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]