Принцип действия ЭВМ
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Принцип действия ЭВМ
АЛУ - арифметико-логическое устройство
УУ - устройство управления
ЗУ - запоминающее устройство
УВВ - устройство ввода вывода
АЛУ производит арифметические и логические
преобразования
над
поступающими
в
него
машинными словами (кодами определенного размера
и формата), представляющими собой команды, либо
данные.
УУ - автоматически, без участия человека,
управляет вычислительным процессом. УУ работает
по соответствующей программе, считывая из
основной памяти.
Память хранит информацию, передаваемую из АЛУ и других устройств (УВВ и
т.п.), и выдает во все другие устройства информацию (команды и данные), необходимую
для протекания вычислительного процесса. Память состоит из двух различных по своим
характеристикам частей: быстродействующей и сравнительно медленной, но емкой
внешней памяти. В памяти реализуются две основные операции: считывание и запись.
Непосредственно в вычислительном процессе участвуют не только основная память.
Внешняя память используется для «подкачки» данных и временного запоминания
информации.
Программа - последовательность команд в форме, воспринимаемой ЭВМ.
Архитектурные принципы фон Нейманана
Архитектурные принципы построения ЭВМ и наборы команд оставались почти
неизменными, начиная с появления первых ЭВМ и до конца 70-х годов, когда в
архитектуре супер-ЭВМ появились отклонения от этих традиционных
принципов. Фон-неймоновская архитектура имеет следующие основные
характеристики:
Наличие единого вычислительного устройства, включающего центральный
процессор, средства передачи информации и память.
Линейная структура организации памяти, состоящей из слов
фиксированной длины.
Команды, чтобы быть обработаны УУ, должны быть закодированы в
цифровой форме так же, как и данные;
Принцип программного управления - автоматическое управление процессом
на основании хранимой в памяти программы;
Принцип совместного хранения в памяти программ и данных.
Архитектурные принципы фон Нейманана
Архитектура первых ЭВМ была ориентирована на научные и экономические расчеты,
назначением этих машин было увеличение скорости выполнения простых команд. По мере
развития полупроводниковой технологии росло быстродействие процессоров, но передача
команд и данных между процессором и памятью в ЭВМ с фон-неймановской структуры должна
осуществляться по единственному коммуникационному тракту. В результате темп пересылки
данных по интерфейсу памяти накладывает жесткие ограничения на скорость обработки
информации.
Работа шин в мультипроцессорных структурах сопряжена с необходимостью разрешения
конфликтов между процессами, запрашивающими разрешение на управление шиной. В
результате на каждую выборку команд и данных из памяти затрачивается несколько лишних
процессорных циклов ожидания.
Классическая фон-неймановская архитектура к настоящему моменту претерпела значительные
изменения за счет некоторых принципов, изложенных в Гарвардском университете
(Гарвардская модель).
Для снижения влияния узкого места, каким является в данной архитектуре общая шина
памяти, в состав ЭВМ вводится конвейерный механизм, когда последовательность выполнения
каждой команды разбивается на этапы, которые могут реализовываться одновременно.
Кэш памяти, что обеспечивает предварительную выборку команд и данных из общей памяти в
быстродействующую локальную память и хранение их в этой памяти, пока они не потребуются
процессору.
Возможность построения ЭВМ с различной памятью для данных и команд, с разными
каналами передачи команд и данных, что обеспечивает параллельное извлечение из памяти
команд и данных, наличие более одного процессора в архитектуре, уменьшение количества
конфликтов на шине.
Структура и формат команд
Адреса
ЦУУ
ОЗУ
Команда
Обработка
чисел с ПЗ
Адреса
РОН
Индексы,
базовые
константы
Обработка
десятичных
Обработка
чисел и
чисел с ФЗ символьной
информации
Адреса
РПЗ
Система команд позволяет
выполнять все логические и
арифметические операции,
операции
управления,
операции обмена между
внутренней
памятью
процессора и ОЗУ, как в
режиме пословного обмена,
так и в режиме обмена
массивами данных.
Система
команд
представляется
наиболее
мощными
форматами
команд, которые позволяют
как работу с быстрой
памятью (внутренняя память
процессора)
так
и
с
оперативной памятью.
Способы адресации в современных процессорах.
Основные режимы адресации
Режим
000
Регистровая адресация
Р
О
Н
КО
П 000
1
операнд
2
Режим
001
Указывается
адрес
регистра процессора, к
которому
требуется
обращение.
R
операнд
Косвенная регистровая адресация
ОЗУ
операнд
РОН
2
КОП 001
R
1
адрес
Адресный код команды
Ак указывает не на адрес
самого операнда, а на
адрес ячейки памяти или
на адрес регистра, где
находится
адрес
операнда.
3
операнд
Режим
010
Автоинкрементная адресация
ОЗУ
операнд
4
РОН
3
адрес
КОП 010
R
1
2 RON[R]:=RON[R]+1
(или +2, в зав-ти от
ширины выборки)
операнд
В
регистр
может
занестись
начальный
адрес
массива,
а
дальнейшее обращение к
элементам этого массива
происходит
автоматически.
Способы адресации в современных процессорах.
Основные режимы адресации
Режим
011
Косвенная автоинкрементная адресация
ОЗУ
адрес
РОН
3
КОП 011
R
1
адрес
2 RON[R]:=RON[R]+2
4
операнд
5
Режим
100
операнд
Автодекрементная адресация
ОЗУ
операнд
4
РОН
3
адрес
КОП 100
R
1
2 RON[R]:=RON[R]-1
(или -2, в зав-ти от
ширины выборки)
операнд
Это частный случай
относительной
адресации.
В
коде
команды задаются только
младшие разряды, а
старшие
разряды
подразумеваются
нулевыми. При таком
способе
можно
обращаться
к
ограниченному
количеству ячеек.
Способы адресации в современных процессорах.
Основные режимы адресации
Режим
101
Косвенная автодекрементная адресация
ОЗУ
РОН
3
адрес
КОП 101
R
1
адрес
2 RON[R]:=RON[R]-2
4
операнд
5
Режим
110
операнд
Индексная адресация
ОЗУ
2
1
РОН
операнд
4
R
3
адрес
команда
индекс
6
КОП 110
4
5
операнд
Вслед за командой
всегда
располагается
индекс. Адрес операнда
вычисляется следующим
образом: из RON по
адресу R выбирается
адрес, складывается с
индексом,
получается
адрес
обращения
к
памяти. По этому адресу
выбирается операнд.
Способы адресации в современных процессорах.
Основные режимы адресации
Режим
111
Косвенная индексная адресация
ОЗУ
2
1
РОН
4
111
R
3
адрес
команда
индекс
адр. опер.
6
КОП
4
операнд
7
Стековая адресация
5
операнд
Это способ безадресного
задания операндов при
работе
со
стековой
памятью.
Способы адресации в современных процессорах.
Дополнительные режимы
Режим
010
Непосредственная адресация
ОЗУ
3
2
команда
операнд
1
R7
3
R7
+2
4
5
Режим
011
КОП 010
операнд
Непосредственная
адресация это сочетание
автоинкрементной
адресации с работой
регистра R7. Вслед за
ОЗУ
в
командой
записывается операнд.
После выборки команды
R7
содержимое
автоматически
увеличивается на 2 и
осуществляется выборка
операнда.
Абсолютная адресация
ОЗУ
2
3
команда
адр. опер.
5
операнд
6
1
R7
КОП 010
3
R7
+2
4
операнд
Абсолютная
адресация это сочетание
и
косвенной
непосредственной
адресации с работой
регистра R7. Вслед за
ОЗУ
в
командой
адрес
находится
операнда.
Способы адресации в современных процессорах.
Дополнительные режимы
Режим
100
Относительная адресация
ОЗУ
3
2
1
команда
индекс
КОП 100
+2 3
R7
+2 5
4
6
операнд
6
7
8
Режим
111
R7
Представляет собой
сочетание
индексной
адресации с работой ПС.
В следующей ячейке за
командой располагается
индекс, адрес операнда
вычисляется
путем
сложения индекса с
модифицированным
значением ПС.
операнд
Относительная косвенная адресация
ОЗУ
3
2
1
команда
индекс
КОП
8
R7
+2 3
R7
+2 5
4
6
адр. опер.
111
6
7
операнд
9
операнд
Отличается
от
относительной
только
тем, что вычисленный на
сумматоре
адрес
является
косвенным
адресом операнда.
Регистровые структуры процессоров
Регистр является важнейшим элементом процессора, в нем хранится информация,
передаваемая в процессор или из него. Регистр используется в качестве временной или
буферной памяти и служит для обмена информацией между процессором и устройствами, у
которых скорости передачи информации могут сильно отличаться.
Набор и разрядность регистров является архитектурной характеристикой процессора и
существенно влияет на его производительность.
Существует два подхода к организации регистровых структур:
1.Все регистры являются универсальными, т. е. могут использоваться для различных целей.
2.Все регистры функционально закреплены за выполнением определенных функций.
Регистровые структуры процессоров
Программно доступные регистры, так называемые РОН - регистры общего назначения.
EAX/AX/AH/AL (Accumulator register) — аккумулятор.
Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра
обязательно;
EBX/BX/BH/BL (Base register) — базовый регистр.
Применяется для хранения базового адреса некоторого объекта в памяти;
ECX/CX/CH/CL (Count register) — регистр-счетчик.
Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую
неявно и скрыто в алгоритме работы соответствующей команды.
EDX/DX/DH/DL (Data register) — регистр данных.
Так же, как и регистр EAX/AX/AH/AL, он хранит промежуточные данные. В некоторых командах его
использование обязательно; для некоторых команд это происходит неявно.
Следующие два регистра используются для поддержки так называемых цепочечных операций, то есть
операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь
длину 32, 16 или 8 бит:
ESI/SI (Source Index register) — индекс источника.
Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;
EDI/DI (Destination Index register) — индекс приемника (получателя).
Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике.
В архитектуре микропроцессора на программно-аппаратном уровне поддерживается такая структура данных,
как стек. Для работы со стеком в системе команд микропроцессора есть специальные команды, а в
программной модели микропроцессора для этого существуют специальные регистры:
ESP/SP (Stack Pointer register) — регистр указателя стека.
Содержит указатель вершины стека в текущем сегменте стека.
EBP/BP (Base Pointer register) — регистр указателя базы кадра стека.
Предназначен для организации произвольного доступа к данным внутри стека.
Регистровые структуры процессоров
Сегментные регистры
В программной модели микропроцессора имеется шесть сегментных регистров: CS, SS, DS, ES, GS, FS. Их
существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами
Intel. Она заключается в том, что микропроцессор аппаратно поддерживает структурную организацию программы в
виде трех частей, называемых сегментами. Соответственно, такая организация памяти называется сегментной.
Для того чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени, и
предназначены сегментные регистры. Фактически, в этих регистрах содержатся адреса памяти с которых
начинаются соответствующие сегменты. Логика обработки машинной команды построена так, что при выборке
команды, доступе к данным программы или к стеку неявно используются адреса во вполне определенных
сегментных регистрах. Микропроцессор поддерживает следующие типы сегментов:
1.Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр CS (code segment
register) — сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет
доступ микропроцессор (то есть эти команды загружаются в конвейер микропроцессора).
2.Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр
DS (data segment register) — сегментный регистр данных, который хранит адрес сегмента данных текущей
программы.
3.Сегмент
стека.
Этот
сегмент
представляет
собой
область
памяти,
называемую
стеком.
Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область
элемент выбирается первым. Для доступа к этому сегменту служит регистр SS (stack segment register) —
сегментный регистр стека, содержащий адрес сегмента стека.
4.Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают,
что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре
DS. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три
дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в
сегментном регистре DS, при использовании дополнительных сегментов данных их адреса требуется указывать явно
с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов
данных должны содержаться в регистрах ES, GS, FS (extension data segment registers).
Регистровые структуры процессоров
Регистры состояния и управления
В микропроцессор включены несколько регистров, которые постоянно содержат информацию о состоянии как
самого микропроцессора, так и программы, команды которой в данный момент загружены на конвейер. К этим
регистрам относятся:
регистр флагов EFLAGS/FLAGS;
регистр указателя команды EIP/IP.
Используя эти регистры, можно получать информацию о результатах выполнения команд и влиять на
состояние самого микропроцессора. Рассмотрим подробнее назначение и содержимое этих регистров:
EFLAGS/FLAGS (flag register) — регистр флагов. Отдельные биты данного регистра имеют определенное
функциональное назначение и называются флагами.
EIP/IP (Instraction Pointer register) — регистр-указатель команд. Регистр EIP/IP имеет разрядность 32/16 бит
и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного
регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка
и изменение его значения производятся различными командами управления, к которым относятся команды
условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний
также приводит к модификации регистра eip/ip.
Системные регистры микропроцессора
Само название этих регистров говорит о том, что они выполняют специфические функции в системе.
Использование системных регистров жестко регламентировано. Именно они обеспечивают работу
защищенного режима. Их также можно рассматривать как часть архитектуры микропроцессора, которая
намеренно оставлена видимой для того, чтобы квалифицированный системный программист мог выполнить
самые низкоуровневые операции.
Системные регистры можно разделить на три группы:
четыре регистра управления;
четыре регистра системных адресов;
восемь регистров отладки.
Регистровые структуры процессоров
Регистры управления
В группу регистров управления входят 4 регистра: CR0, CR1, CR2, CR3. Эти регистры предназначены для общего управления
системой. Регистры управления доступны только программам с уровнем привилегий 0.
Хотя микропроцессор имеет четыре регистра управления, доступными являются только три из них - исключается CR1, функции
которого пока не определены (он зарезервирован для будущего использования).
Регистр CR0 содержит системные флаги, управляющие режимами работы микропроцессора и отражающие его состояние
глобально, независимо от конкретных выполняющихся задач.
Регистр CR2 используется при страничной организации оперативной памяти для регистрации ситуации, когда текущая команда
обратилась по адресу, содержащемуся в странице памяти, отсутствующей в данный момент времени в памяти. В такой ситуации в
микропроцессоре возникает исключительная ситуация.
Регистр CR3 также используется при страничной организации памяти. Это так называемый регистр каталога страниц первого
уровня.
Регистры системных адресов
Эти регистры еще называют регистрами управления памятью. Они предназначены для защиты программ и данных в
мультизадачном режиме работы микропроцессора.
При работе в защищенном режиме микропроцессора адресное пространство делится на: глобальное - общее для всех задач,
локальное - отдельное для каждой задачи.
Этим разделением и объясняется присутствие в архитектуре микропроцессора следующих системных регистров: регистра
таблицы глобальных дескрипторов GDTR (Global Descriptor Table Register), регистра таблицы локальных дескрипторов LDTR
(Local Descriptor Table Register), регистра таблицы дескрипторов прерываний IDTR (Interrupt Descriptor Table Register), регистра
задачи TR (Task Register), который подобно регистру LDTR, содержит селектор, то есть указатель на дескриптор в таблице GDT.
Этот дескриптор описывает текущий сегмент состояния задачи (TSS — Task Segment Status). Этот сегмент создается для каждой
задачи в системе, имеет жестко регламентированную структуру и содержит контекст (текущее состояние) задачи. Основное
назначение сегментов TSS — сохранять текущее состояние задачи в момент переключения на другую задачу.
Регистры отладки
Это очень интересная группа регистров, предназначенных для аппаратной отладки. Аппаратно микропроцессор содержит восемь
регистров отладки, но реально из них используются только 6. Регистры DR0, DR1, DR2, DR3 предназначены для задания линейных
адресов четырех точек прерывания. Используемый при этом механизм следующий: любой формируемый текущей программой
адрес сравнивается с адресами в регистрах DR0...DR3, и при совпадении генерируется исключение отладки с номером 1.
Регистр DR6 называется регистром состояния отладки. Биты этого регистра устанавливаются в соответствии с причинами, которые
вызвали возникновение последнего исключения с номером 1.
Селекторы и дескрипторы
Селектором (ТЭГом) называется специальный указатель, который будучи загружен в регистр или
использован с определенными командами, выбирает определенные дескрипторы. В логическом адресе
селекторная часть определяет индивидуальный дескриптор, во-первых, определяя таблицу
дескрипторов, а во-вторых, указывая этот дескриптор в данной таблице.
Селектор имеет следующие поля:
Индекс TI RPL
Индекс-биты (15) – Индекс выбирает один из дескрипторов в таблице дескрипторов.
Индикатор таблицы TI (3) – определяет таблицу дескрипторов, на которую ссылается селектор: либо
таблицу локальных, либо – глобальных дескрипторов.
Запрашиваемый уровень привилегий RPL (2) – используется механизмом защиты системы.
Использование ТЭГовой
организации памяти имеет преимущества: обеспечивается
инвариантность (независимость) команд относительно типов командных данных, повышается
надежность исполнения программ.
В качестве недостатка использования таких данных является некоторое замедление выполнения
программы из-за необходимости соответствия типов операции типу данных.
Селекторы и дескрипторы
Дескрипторы сегментов
Дескрипторы – это те объекты, на которые показывают селекторы сегмента. Они представляют собой
блоки, содержащие атрибуты области линейных адресов, т.е. сегмента. Эти атрибуты включают линейный
базовый адрес сегмента, уровень защиты, привилегии по чтению, записи и выполнению, размер операндов
по умолчанию и тип сегмента. Вся информация об атрибутах дескриптора содержится в битах дескриптора
сегмента.
Дескриптор сегмента обеспечивает процессор данными, которые ему нужны для отображения
логического адреса в линейный адрес. Эти дескрипторы создаются не прикладными программами, а
компиляторами, загрузчиками или операционной системой.
Таблицы дескрипторов
Таблицы дескрипторов определяют все сегменты, используемые процессором. Существует три типа
таблиц: таблица локальных дескрипторов (LDT), таблица глобальных дескрипторов (GDT) и таблица
дескрипторов прерываний (IDT).
Таблица глобальных дескрипторов включает дескрипторы, доступные всем задачам в системе, может
содержать любой вид дескрипторов сегментов, кроме управляющих прерываниями и исключениями. В
общем случае это три вида дескрипторов: сегментов программы и данных, используемых операционной
системой, дескрипторов для локальных дескрипторов в системе и сегментов состояния задачи.
Таблица локальных дескрипторов обеспечивают способ изоляции сегментов программы и данных
конкретной задачи от всего остального в операционной системе и содержат дескрипторы общих для всех
задач сегментов. Сегмент не может быть доступен задаче, если её дескриптор сегмента не существует ни в
текущей таблице LDT, ни в таблице GDT. Это и изолирует, и защищает сегменты конкретной задачи,
позволяя все-таки иметь глобальные данные, разделяемые между задачами.
Таблица дескрипторов прерываний содержит дескрипторы, которые указывают место расположения
для программ обработки прерываний. Эта таблица может содержать только вентили ловушки, вентили
задачи и вентили прерываний. Каждое прерывание, используемое в системы, должно иметь вход в таблицу
IDT.
Понятие о состоянии процессора. Вектор состояния
При выполнении процедурных программ, после каждого рабочего такта или цикла работы процессора, в нем
изменяется состояние работы всех регистров, счетчиков, управляющих триггеров. Все указанные изменения
— изменение состояния процессора или программа. Информация о состоянии процессора лежит в основе
многих процедур управления, которые связаны с анализом ситуации о сбоях и отказах, о прерывании и
возобновлении обработки программ, о ситуациях, связанных с обращением к ПУ, а также с переходами к
обработке других программ в мультипроцессорных ЭВМ.
Состояние процессора после выполнения данного такта или всего цикла исполнения команды, определяется
состоянием на данный момент времени совокупностью состояний всех регистров, счетчиков и т.д.
Прерыванием называется реакция вычислительной системы на некоторое событие (запрос прерывания) и
выполнение специальной программы, предназначенного для обработки данного запроса. Система прерываний
предназначена для организации прерывания программ по сигналам прерывания.
Когда осуществляется прерывание обработки данной программы, значения не всех регистров, счетчиков и
управляющих триггеров требуется сохранить для восстановления или возврата к прерванной программе.
Существует определенный минимум информации, которая обеспечивает этот возврат. Совокупность значений
этой информации называется «вектором состояний». Таким образом, вектор состояний должен содержать
информацию, обеспечивающую продолжение обработки программы.
В общем случае: Процессор обрабатывает программу А. Во время обработки могут возникнуть внешние или
внутренние события. Следовательно, будут сформированы сигналы прерывания. В результате обработка
программы А прерывается и управление передается программе В (прерывающая программа). После
выполнения В, на следующем шаге, управление снова передается А и она выполняется. Ели мы прерывались
на шаге в программе, то возвращаемся в +1. Для возврата необходимо запомнить продвинутый адрес
команды (т.е. информацию о программном счетчике на момент прерывания). Кроме того, в слово состояния
должны быть записаны значения флагов, что позволит при возврате к прерванной программе выполнить
любую операцию, в том числе и команду перехода. Если данный процессор работает с одноадресными
командами, то результат фиксируется в аккумуляторе. Следовательно, значение аккумулятора тоже надо
запомнить (это необходимо для одноадресных команд).
Принципы организации системы прерывания
Запросы прерываний могут формироваться как внутри самой ЭВМ, так и в ее
внешней среде, и могут быть сформированы следующими параллельными во
времени процессами:
выполнение самой программы;
контролем правильности функционирования ЭВМ;
процессом ввода - вывода;
взаимодействием с внешними объектами;
функционированием операционной системы (системный запрос);
В общем случае:
К внутренним относятся такие причины прерываний, как сигналы от систем
контроля и диагностики, от таймера, от внешних источников, например от других
ЭВМ, если это многомашинная система. В любом случае данная программа должна
быть прервана, а управление должно передаваться другой, прерывающей
программе. При этом в момент прерывания процессор должен запомнить всю
необходимую информацию о прерываемой программе с тем, чтобы после возврата
к ней была возможность продолжить ее обработку.
К внешним сигналам прерывания относятся сигналы от внешних источников или от
других ЭВМ.
Способы прерываний
1. На основе ССП (слово состояния процессора).
2. На основе уровней.
На момент прерывания независимо от способа организации прерывания, т.е. на основе слово состояния программы или на
основе уровня, процессор должен сформулировать слово о состоянии прерванной программы.
При прерываниях на основе ССП описание состояния ЦП или программы должен входить адрес команды, на котором
осуществлено прерывание, состояние флагов.
В зависимости от состояния класса и мощности машины функциональная начинка ССП может расширяться, включая
различные маски, ключ защиты, разряды режимов работы и т.д., так в ЭВМ общего назначения ССП описывается 64
разрядным словом. В мини-ЭВМ разрядность слов существенно меньше.
При прерываниях на основе уровней так же формируется слово состояния процессора программы, но поскольку прерывание
осуществляется на любом очередном такте, это слово, кроме выше перечисленной информации включает информацию о
номере такта на котором произошло прерывание и состояние всех регистров процессора, без восстановления которых
невозможно вернуться к прерванной программе.
Поскольку информации в данном слове много, то это ССП называется уровнем.
В ОЗУ под слово состояния каждой программы отводится своя область, и для каждого ССП эта область строго фиксирована.
Если программы 1, 2 взаимно прерывают друг друга, то глубина прерывания будет равна 2, 3.
Функции и характеристики системы прерывания
Система прерывания выполняет следующие функции:
Приоритетный выбор запроса прерывания на обслуживание
Запоминание вектора состояния процессора и осуществление перехода к прерываемой программе.
Восстановление состояния прерванной программы и возврат ее к продолжению.
Функция приоритетного выбора на обслуживание предполагает:
определение одного из нескольких запросов, имеющих наивысший приоритет, и обслуживание которых
должно осуществляться в первую очередь;
определение имеет ли данный запрос право прервать текущую программу.
1. Количество запросов на прерывание.
Это общее количество запросов прерываний, которые формируются в данной вычислительной системе.
Все запросы на прерывания объединяются в группы таким образом, что те запросы, которые инициируют одну
и туже прерывающую программу, объединяются в один класс. Любой запрос фиксируется на специальном
регистре процессора, который называется регистром запроса прерывания (РЗП).
2. Маскирование прерывания.
Для управления прерываниями организуется маска прерываний, которая представляет собой двоичный код,
количество разрядов которого определяется классом прерываний.
Маскирование осуществляется следующим образом: если данная причина должна быть замаскирована, то в
соответствующем разряде маски ставится 0, если нет 1.
Немаскируемые прерывания обрабатываются процессором независимо от состояния флага разрешения
прерывания.
3. Глубина прерывания.
Характеризуется максимальным числом программ, которые могут прерывать друг друга. Если допускается
прерывание по одному запросу, то глубина прерывания равна 1.
Система с большей глубиной прерываний обеспечивает большую реакционную способность вычислительной
системы. Обычно глубина прерываний совпадает с числом уровней приоритетов.
Функции и характеристики системы прерывания
4. Время реакции системы.
Tp-время реакции системы, т.е. время, которое определяет насколько быстро реагирует система
прерывания на приостановление прерываемой программы (интервал времени между появлением запроса
прерывания и началом выполнения прерывающей программы). Временем Tp будет определяться вся
схемотехника, которая обеспечит выделение запроса на обслуживание и начало его обслуживания.
Tз - время записи информации о состоянии программы
Tпп - время работы прерывающей программы.
Tв - время восстановления прерванной программы
5. Число уровней прерывания.
Это совокупность запросов, трактующихся одним уровнем приоритета либо инициализирующих одну
и ту же обрабатывающую программу.
Все запросы ранжируются по приоритетам. Одновременно может быть выставлено несколько запросов
на прерывание от различных классов. Система прерывания выделяет запрос с наивысшим приоритетом и
обрабатывает его, а все остальные запросы помещаются в очередь. Как правило, запрос, имеющий
минимальный номер, имеет максимальный приоритет.
Высшими в списке приоритетов являются отказы (кроме отладочных отказов), команды ловушек (INT
0, INT n, INT 3), отладочные ловушки для данной команды, отладочные отказы для следующей команды и
немаскируемые прерывания. Самый низкий приоритет имеет маскируемое прерывание.
Функции и характеристики системы прерывания
5. Дисциплина обслуживания. Различают программные, аппаратные и векторные дисциплины обслуживания.
Программный заключается в следующем: при появлении любого запроса на прерывание процессор вызывает команду БП,
который адресует начало программы производящей опрос, начиная с младшего номера класса прерываний, и выделяет запрос с
наивысшими приоритетами, которые и исполняются. Это можно представить следующим образом:
Такой способ имеет существенный недостаток с точки зрения временных затрат — большое время реакции системы, вследствие
того, что та программа, которая должна обрабатывать запрос, находится в памяти и необходимо большое время, чтобы ее
инициировать.
По этой причине, с целью уменьшения времени, в процессор встраиваются схемы, которые позволяют более быстрым путем
выйти на прерывающую программу. Несмотря на основное достоинство - отсутствие дополнительных аппаратных затрат,
используется крайне редко в простых средствах вычислительной техники.
Аппаратный способ более дорогой. Используется два типа схемы: схема выделения с циклическим опросом, однотактная схема.
Схема с циклическим опросом: В основе схемы лежит двоичный счетчик, который организует ровно столько состояний, сколько
классов прерываний. Двоичный счетчик заполняется единицами от 0-го состояния до момента определения класса с наивысшим
приоритетом. После чего его состояние блокируется. Полученный двоичный код будет порождать адрес прерывающей
программы.
Дешифратор своими выходами поочередно опрашивает шины классов прерывания. Наивысший приоритет имеет шина с
наименьшим номером. Как только повстречается сигнал запроса, перебрасывается триггер управления, фиксируется состояние
счетчика, который определяет выделенный запрос. Максимальная длина цикла определяется опросом класса с низшим
приоритетом. Зафиксированный двоичный вход счетчика порождает адрес прерывающей программы.
Схема с однотактным опросом: Сигнал начала опроса распространяется по цепочке схем “и”, которые в исходном состоянии
открыты, если нет сигналов запросов на прерывание. Любой наиболее старший запрос должен прервать цепь начала сигнала
опроса.
При векторном прерывании используют регистры масок и дополнительные дескрипторы, в которых хранится адрес прерываемой
программы. В регистре масок могут «маскироваться» либо осуществлять динамическое перераспределение приоритетов.
Рабочий цикл процессора
Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых
соответствует выполнению одной из команды программы.
Блок-схема рабочего цикла процессора
начало
запрос
прерывания
нет
t1
да
обработка
прерывания
Выборка команды формир.
адрес следующей
Анализ кода операции в команде
t2
t3
основные команды
передача управления
Формирование Аи операндов
условие перехода
выполняется
Выборка операндов из
памяти
Выполнение операций
в АЛУ
t4
t5
Формирование признака
результата
Запоминание результата
да
Передача перехода
в РС
системные
нет
Изменение
ССП
ввод - вывод
Формирование
номера канала
Канал и
ПУ свободны
нет
да
Передача в канал
перевод в режим
ожидания
Принципы повышения производительности
Экстенсивный способ – повышение тактовых частот процессора.
Имеет смысл только в рамках одной процессорной архитектуры.
Крайне низкая эффективность.
Эффективные (архитектурные) способы:
Предварительная выборка данных;
Согласование пропускных способностей процессора и памяти;
Использование
сопроцессоров
или
дополнительных
исполнительных устройств процессора;
Конвейерная обработка информации;
Использование новых архитектур системы команд процессора для
повышения эффективности параллельной обработки;
Динамическое переупорядочивание инструкций;
Расширение базового набора систем команд потоковыми
мультимедиа инструкциями;
Многопроцессорная обработка (реальная и виртуальная).
Предварительная выборка данных (предвыборка)
Когда процессор обращается к памяти за первой порцией информации, из памяти
извлекаются и последующие данные. Выборка информации еще до того, как она
требуется, носит название предвыборки. Основная трудность этой методики заключается в
определении, какие именно данные понадобятся в следующий момент.
Эффективность предвыборки тесно связана с явлением локальности. Было подмечено, что
область обращений программы относительно медленно изменяется во времени и
пространстве. На протяжении определенного периода выполнения программа обращается
к множеству ячеек памяти, лежащих близко друг к другу. Это множество изменяется с
течением времени. Простые алгоритмы предвыборки осуществляют выборку «следующих
по ходу» данных относительно предыдущей выборки.
В целом алгоритм предвыборки можно разделить на два класса: требования и
предупреждения. Алгоритмы требования основаны на том, что процессор работает с
информацией, уже находящейся в системе, а затем возникает отказ страницы. Другими
словами, выдается требование на ввод следующей порции информации. Алгоритмы
предупреждения, с другой стороны, осуществляют предвыборку не обязательно в момент
отказа; выборка может быть выполнена при первой ссылке на новую страницу. Обычно в
этом случае получается выигрыш во времени благодаря промежутку времени между
моментом, когда страница затребована, и моментом, когда она действительно нужна.
Момент выборки следующей страницы используется в предположении, что в выполнении
программы имеются определенные закономерности, а именно, что для продолжения
выполнения потребуется следующая по порядку страница.
Использование сопроцессоров
Побудительным мотивом для дальнейшей разработки параллельных вычислительных подсистем служат
четыре системные характеристики: производительность, гибкость, доступность и надежность. Улучшение
этих характеристик повышает качество системы. Поэтому многие изготовители стали выпускать
сопроцессоры, представителем которых является арифметический сопроцессор. Сопроцессором
называется процессор, работающий совместно с центральным процессорным устройством под
объединенным управлением. Одним из наиболее плодотворных применения параллельных вычислений
является выполнение арифметических операций. Чаще всего арифметический сопроцессор используется в
тот момент, когда главный процессор «откладывает арифметические операции в сторону» и продолжает
вычисления. Результат выполненных сопроцессором арифметических операций передается назад и ждет в
готовом виде, когда он понадобится процессору. Как правило, ресурсы сопроцессора задействуются при
выполнении арифметических операций с плавающей точкой.
Согласование пропускных способностей процессора и памяти
Производительность процессоров с развитием технологии, архитектурных решений, увеличением
тактовой рабочей частоты неуклонно растет, и этот рост существенно опережает производительность
устройств основной памяти. Производительность памяти находится в противоречии сростом её ёмкости.
Для преодоления разрыва производительности процессора и памяти применяют два основных
архитектурных решения:
1.
Конвейеризация выполнения команд;
2.
Буферизация данных за счет включения «между» процессором и памятью дополнительной
быстродействующей памяти меньшего объема, носящей название кэш–памяти (Cache - «тайник»).
Конвейерная организация обработки информации
В классической архитектуре время выполнения рабочего цикла является
n
суммой времен каждого этапа:
а производительность
P
t t
ц
i 1
i
n
1/ tц ti
i 1
Такая организация не способствует повышению производительности
вычислительной системы. В конце 50-х годов русский ученый Лебедев
предложил новый подход.
Существенным фактором повышения производительности вычислительной
системы является возможность совмещения во времени отдельных операций
рабочего цикла для смежных команд. В этом случае для вычисления каждого
этапа рабочего цикла требуется наличие определенного функционального блока,
который в совокупности образует так называемый конвейер.
Процессор, имеющий более одного конвейера, называется суперскалярным.
Классификация конвейеров
1. По способу организации:
синхронные;
асинхронные.
2. По выполняемым признакам:
однофункциональные;
многофункциональные;
статические;
динамические.
3. По типу обрабатываемой информации:
конвейеры команд;
конвейеры данных.
Синхронные конвейеры
Синхронным называется такой конвейер, в котором на каждую ступень конвейера
отводится постоянное время.
Любой конвейер представляет собой последовательность ступеней, за каждой из
которых закреплены определенные функции.
Наиболее просто рассмотрим все на примере однофункционального конвейера.
Обработка любой функции может быть записана в виде микропрограммы.
НАЧАЛО
ПФ – подфункция
1-я ПФ
t1-1 ступень
2-я ПФ
t2-2 ступень
n-я ПФ
tn-n ступень
КОНЕЦ
Для
организации
синхронного
конвейера
необходимо
разбить
микропрограмму
на
подфункции таким образом, чтобы время
вычисления каждой подфункции были примерно
одинаковы. За каждой подфункцией закрепляется
своя ступень конвейера. При этом время
синхронизации ступеней назначается Tmax, которое
определяется максимальным временем вычисления
одной из подфункций.
tmax=t2,если t2>t1>tn
Структура синхронного конвейера
В состав каждой ступени входят два элемента: фиксатор (ставится на входе)
и логика. Фиксатор предназначен для фиксации результатов работы
предыдущей ступени. Логика предназначена для вычисления подфункции на
данной ступени конвейера.
i
от i-1
Ф
i+1
Л
Ф
i+2
Л
t
T
Ф - фиксатор
Л - логика
Т - время синхронизации конвейера
T - время работы логики для вычисления
подфункции
- время работы фиксатора.
Ф
Л
к i+3
Структура асинхронного конвейера
Алгоритм управления асинхронным конвейером сложнее, но обладает большей
гибкостью и мощностью.
Конвейеры такого типа, которым не представляется возможным выровнять
времена работы ступеней. В этом случае каждая следующая ступень может
принять к обработке информацию от предыдущей, если выполняются следующие
условия: i-ая ступень готова передать информацию, i+1-ая ступень освободилась и
готова принять информацию. В этом случае неизбежны потери времени.
Взаимодействие ступеней осуществляется по следующей схеме:
i+1
i
Фвх
Л
Фвых
Фвх
Л
Фвых
&
Ti
Ti+1
У фиксатора данные хранятся, а логика эти данные обрабатывает. Триггер
взводится в 1, если ступень готова принять информацию. Наиболее простые - это
синхронные конвейеры.
Принципы конвейерной обработки команд
такты
№ ступени
1
2
3
4
5
1
2
3
4
5
K1
k2
k1
K3
K2
K1
k4
k3
k2
k1
k5
k4
k3
k2
k1
tзагр. конв.
6
....
n+1 n+2 n+3 n+4 n+5
kn+1
k5
k4
k3
k2
kn+1
k5
k4
k3
tстац. работы конв.
kn+1
k5
k4
kn+1
k5
kn+1
tвыгрузки конв.
Начиная с момента, когда конвейер стационарно загружен, в
нем одновременно обрабатывается m функций, где m будет равно
количеству ступеней конвейера.
Данная временная диаграмма иллюстрирует работу конвейера,
когда конвейер однофункциональный и путь подключения ступеней
всегда постоянный.
Принципы конвейерной обработки команд
При организации конвейерной обработки команд всегда в одном и том же
такте несколько ступеней могут обращаться к ОЗУ. Возникает конфликт,
который может быть разрешен следующими способами:
Расслоение ОЗУ по информации
Расслоение ОЗУ по адресам
В состав машины вводятся два типа ОЗУ одно - для хранения команд,
другое - для хранения данных.
ОЗУ
ОЗУ
команд
данных
ЦПУ
Такому разрешению конфликта удовлетворяет только тот случай, когда команды
одноадресные. При увеличении количества адресов, количество конфликтов
возрастает, например, если процессор работает с 3-х адресными командами.
КОП
А1
А2
А3
Принципы конвейерной обработки команд
Все 3 адреса относятся к ОП, в этом случае при полной загрузке конвейера
конфликтовать будут те ступени, по которым осуществляется обращение к памяти
данных (ПД). Посмотрим это на временной диаграмме:
такты
№ ступени
1.ВК
2.ВОА1
3.ВОА2
4.ВОП
5.ЗРА3
1
2
3
4
k1 k2 k3 k4
k1 k2 k3
k1 k2
k1
5
k5
k4
k3
k2
k1
Выборка команды из ОЗУ команд.
Выборка 1-го операнда из ОЗУ данных.
Выборка 2-го операнда из ОЗУ данных.
Запись результата в ОЗУ данных.
Эффективность использования конвейеров требует своевременной подачи на его
вход исходных данных, в противном случае последовательные ступени конвейера могут
работать вхолостую.
Латентностью в конвейере называется интервал времени между соседними
инициализациями конвейера. Для однофункциональных конвейеров эта латентность,
как правило, равна 1. В общем случае латентность может быть равна 0, если конвейер
построен таким образом, что при вычислении данной функции, составляющие его
подфункции, вычисляются разными ступенями.
Таблицей занятости
называется описание пути вычисления функции путем
последовательного включения в заданные такты конвейерного времени определенных
ступеней конвейера. Эти таблицы занятости полностью соответствуют временным
диаграммам работы конвейера.
Многофункциональный конвейер
При проектировании многофункционального конвейера латентность является
одним из основных параметров. При неправильно выбранной латентности при
работе конвейера в ряде ступеней могут возникнуть столкновения, которые
выражаются в том, что функции, вычисляемые данным конвейером, обращаются к
данной ступени в один и тот же такт, одного и того же времени. Данные конфликты
могут быть ликвидированы изменением величины латентности. При этом с
увеличением латентности падает общая производительность конвейера в связи с
увеличением интервала по его инициализации.
сл
сл
умн
П1-П2
П1+П2
сл
сл M +M
1
2
Сдвиг
мант.
M1*M2
умн
умн
опред. сл
норм.
кол-ва
рез-та
нулей
умн
сл
умн
Способы борьбы с прерыванием работы конвейера
при обработке команд
В том случае, когда в конвейере обрабатывается последовательность команд,
не требующих изменения порядка обработки, работа конвейера не прерывается.
На работу конвейера разрушительное действие оказывают программные
ветвления (условные переходы). В этом случае система не может определить,
какую последовательность команд надо будет выполнять, пока на выходе не
появится результат анализа условия. В результате условное ветвление не только
задерживает дальнейшее выполнение, но и влияет на весь конвейер, начиная от
фазы выборки команды. Перед тем как загрузить в конвейер ветвь программы,
соответствующую условию ветвления, неправильную ветвь следует удалить из
конвейера.
Один из способов снижения влияния ветвлений заключается в
использовании буфера ветвей, или механизма предвидения. В состав процессора
вводятся дополнительные буфера типа FIFO. В эти буфера загружается
параллельно с работой конвейера наиболее вероятные участки программы в
соответствии с переходами.
Способы борьбы с прерыванием работы конвейера
при обработке команд
Предположим,
что обрабатывается программа:
FIFO
УП
В процессорах такого типа имеют место средства предварительного
просмотра участка программы, с тем, чтобы можно было определить величину
указанной области.
В этом случае какое бы направление ветвления ни оказалось правильным,
наборы последующих команд уже загружены в конвейер.
Непрерывное выполнение потока команд может быть нарушено
прерыванием. Для компенсации этого нарушения можно использовать механизм
восстановления, который сохраняет содержимое конвейера и восстанавливает его
после завершения обработки прерывания. Это довольно дорого и применяется
редко.
В
современных
процессорах
активно
используется
технология
динамического переупорядочивания инструкций.
Некоторые качественные оценки характеристик конвейера
Производительность
конвейера
Соотношение между
производительностью и числом ступеней
Количество
ступеней
Соотношение
«стоимость-число ступеней»
Стоимость
конвейера
Количество
ступеней
Соотношение
между стоимостью
и скоростью вычислений
Стоимость
Производительность
Количество
ступеней
Некоторые качественные оценки характеристик конвейера
Эффективность работы конвейера требует своевременной подачи исходных
данных на его вход, иначе последние ступени конвейера могут работать вхолостую.
Обеспечить последовательность входного потока данных означает при
проектировании конвейера решение только части проблемы. Еще, необходимо
определить моменты времени, в которые каждая величина вводится на вход
конвейера с тем, чтобы обеспечить его максимальную производительность и чтобы
исключить конфликты между ступенями. Конфликты возникают, если в одном и
том же такте к одной ступени обращаются разные функции. В случае
многофункциональных конвейеров с динамической реконфигурацией, путь внутри
конвейера может меняться в зависимости от вычисляемой функции. Поэтому
указанные факторы накладывают ограничения на новые инициализации конвейера.
Следовательно, производительность критически чувствительна к диспетчеризации
степеней конвейера.
Если заранее известны схемы переключения степеней для каждой функции, то
эти схемы могут быть описаны таблицами занятости. Каждая такая схема
соответствует схеме вычисления входной функции (пути ее обработки). Поэтому,
после инициализации работы конвейера, его контроллер должен зарезервировать
для ее вычисления ступени конвейера в определенные моменты времени, которые и
определены в таблице занятости. При этом между различными функциями не
должно быть конфликтов, при исполнении одной и той же ступени в один и тот же
такт времени.
CISC и RISC архитектуры системы команд
Двумя основными архитектурами системы команд являются:
CISC (Complex Instruction Set Computer – компьютер со сложным набором команд);
RISC (Redused Instraction Set Computer – компьютер с сокращённым набором
команд).
Для CISC процессоров характерно:
небольшое число общих регистров в качестве внутренней памяти процессора;
большое число машинных команд;
большое число используемых в командах способов и режимов адресации;
обработка данных различных форматов различной длины;
в системе команд процессора есть группы команд различной разрядности;
времена выполнения каждой команды в каждых группах различны.
CISC архитектура, аппаратно реализует в процессоре весь набор инструкций в
виде сложных команд разной длины. Расширение спектра операций, реализуемых
системой команд, позволило уменьшить размер программ, а также трудоёмкость их
написания и отладки.
Однако увеличение числа команд повысило трудоёмкость разработки их
топологических и микропрограммных реализаций, что проявилось в удлинении сроков
разработки CISC-процессоров, а также в проявлении различных ошибок в их работе.
Кроме того, из-за разной длины команд в таких процессорах трудно применять
конвейеризацию и параллельное выполнение.
CISC и RISC архитектуры системы команд
Для RISC процессоров характерно:
сокращенный набор команд (преобладают команды работы с регистровой памятью);
отсутствуют команды длинных операций (они реализуются программным способом);
с целью уменьшения количеств обращений к оперативной памяти в состав процессора
вводятся РОН (регистры общего назначения) существенно большего объема;
любая команда выполняется за один и тот же интервал времени;
все команды, как правило, трехадресные. Для команд арифметики адреса источников
операндов и адреса приемников результата - адреса РОН;
используется упрощенное и ограниченное количество способов адресации.
Основные особенности RISС идеологии заключаются в том, что весь набор инструкций
представляет собой сочетание небольшого количества коротких базовых операций, команды
имеют единый формат и требуют одинакового числа шагов для выполнения. Обычно одна
RISC-команда выполняется за один такт, что увеличивает быстродействие и делает возможным
параллельное исполнение команд и глубокую конвейеризацию процессора.
Все это позволяет устранить неравномерность в обработке потока команд и облегчить
построение конвейеров синхронного типа. Кроме того, существенно упрощается организация
устройства управления в целом.
В RISC процессорах команды длинных арифметических операций отсутствуют, а все
команды преобразования данных имеют только регистровую адресацию. Обращение к памяти
осуществляется только по командам загрузки и записи. Команды длинных операций таких, как
умножение и деление, реализуются программными способами.
В настоящий момент наиболее современные процессоры ведущих производителей в
действительности являются RISC-процессорами, эмулируя снаружи CISC-процессор х86архитектуры.
Архитектура VLIW (EPIC)
Эта архитектура разработка компаний Intel и HP, известна также под названием Intel
Architecture-64 (IA-64) и не является как 64-разрядным расширением 32-разрядной
архитектуры х86 компании Intel, так и переработкой 64-разрядной архитектуры PARISC компании HP.
Архитектура VLIW (EPIC)
Команды в формате IA-64 упакованы по три в 128-битный пакет для быстрейшей
обработки. Обычно это называют "LIW encoding" (кодирование в длинные слова
команд). Intel предпочитает называть свою новую LIW-технологию Explicitly Parallel
Instruction Computing или EPIC (Полностью Параллельного Выполнения Команд). В
любом случае формат команд IA-64 не имеет ничего общего с х86. Команды х86 могут
иметь длину от 8 до 108 бит, и процессор должен последовательно декодировать каждую
команду после определения её границ.
В Merced существует два режима декодирования команд VLIW и старый CISC. Т.е.
программы переключаются в необходимый режим исполнения. Так что теперь ОС
должны будут содержать и 64-х разрядную часть на IA-64 и старую 32-х разрядную.
Не очень приятным следствием будет увеличение размеров кода, так как команды
IA-64 длиннее, чем 32-битные RISC и CISC-команды (порядка 40 бит). Компиляция при
этом будет занимать больше времени, поскольку IA-64 требует от компилятора гораздо
больше действий.
Каждый 128-битный пакет содержит шаблон (template) длиной в несколько бит,
помещаемый в него компилятором, который указывает процессору, какие из команд
могут выполняться параллельно. Теперь процессору не нужно будет анализировать
поток команд в процессе выполнения для выявления «скрытого параллелизма». Вместо
этого наличие параллелизма определяет компилятор и помещает информацию в код
программы.
Архитектура VLIW (EPIC). Формат команды IA-64
Каждая команда (как для целочисленных вычислений, так и для вычислений с
плавающей точкой) содержит идентификатор команды, три 7-битных поля
регистра общего назначения (РОН), 128 64-разрядных целочисленных РОН и
128 80-разрядных регистров для вычислений с плавающей точкой, особые поля
для вещественной и целой арифметики, 6-разрядное предикатное поле (64=26).
Архитектура VLIW (EPIC). Формат команды IA-64
Компилятор транслирует исходный код в машинный и упаковывает команды в 128битные пакеты. Шаблон пакета (bundle's template field) указывает не только на то,
какие команды в пакете могут выполняться независимо, но и какие команды из
следующего пакета могут выполняться параллельно. Команды в пакетах не
обязательно должны быть расположены в том же порядке, что и в машинном коде, и
могут принадлежать к различным путям ветвления. Компилятор может также
помещать в один пакет зависимые и независимые команды, поскольку возможность
параллельного выполнения определяется шаблоном пакета.
Компиляторы для процессоров архитектуры IA-64 должны быть намного "умнее" и
лучше знать микроархитектуру процессора, код для которого они вырабатывают. IA-64
перекладывает практически всю работу по оптимизации потока команд на компилятор.
Таким образом, программы, скомпилированные для одного поколения процессоров
архитектуры IA-64, на процессорах следующего поколения без перекомпиляции могут
выполняться неэффективно. Это ставит перед поставщиками нелёгкую задачу по
выпуску нескольких версий исполняемых файлов для достижения максимальной
производительности.
Все регистры доступны программисту и являются регистрами с произвольным
доступом (programmer-visible random-access registers). По сравнению с процессорами
х86, у которых всего восемь целочисленных РОН и стек глубины 8 для вычислений с
плавающей точкой, IA-64 намного "шире" и, соответственно, будет намного реже
простаивать из-за "нехватки регистров".
Архитектура VLIW (EPIC)
Компиляторы для IA-64 используют технологию «отмеченных команд» (predication) для устранения потерь
производительности из-за неправильно предсказанных переходов и необходимости пропуска участков кода
после ветвлений.
Компилятор х86 транслирует оператор ветвления в блоки машинного кода, расположенные
последовательно в потоке. В зависимости от условий ветвления процессор выполняет один из этих блоков и
перескакивает через остальные. Современные процессоры стараются предсказать результат вычисления
условий ветвления и предварительно выполняют предсказанный блок. При этом в случае ошибки много
тактов тратится впустую. Сами блоки зачастую весьма малы - две или три команды, - а ветвления
встречаются в коде в среднем каждые шесть команд. Такая структура кода делает крайне сложным его
параллельное выполнение.
Когда компилятор для IA-64 находит оператор ветвления в исходном коде, он исследует ветвление,
определяя, стоит ли его «отмечать». Если такое решение принято, компилятор помечает все команды,
относящиеся к одному пути ветвления, уникальным идентификатором, называемым предикатом (predicate).
Система команд IA-64 определяет для каждой команды 6-битное поле для хранения этого предиката. Таким
образом, одновременно могут быть использованы 64 различных предиката. После того, как команды
«отмечены», компилятор определяет, какие из них могут выполняться параллельно. После того, как будет
определена "истинная" ветвь, процессор сохраняет необходимые результаты и сбрасывает остальные.
Это опять требует от компилятора знания архитектуры конкретного процессора, поскольку различные
чипы архитектуры IA-64 могут иметь различное число и тип функциональных узлов. Кроме того,
компилятор, естественно, должен учитывать зависимости в данных (две команды, одна из которых
использует результат другой, не могут выполняться параллельно). В некоторых случаях применение этой
технологии может привести к тому, что будет затрачено больше тактов, чем сэкономлено.
Технология "отмеченных команд" существенно снижает негативное влияние ветвлений на машинном
уровне. В то же время, если компилятор не «отметил» ветвление, IA-64 действует практически так же, как и
современные процессоры: пытается предсказать путь ветвления и т.д.
Архитектура VLIW (EPIC)
Ключевой особенностью IA-64 является предварительная загрузка данных. Она позволяет не
только загружать данные из памяти до того, как они понадобятся программе, но и
генерировать исключение только в случае, если загрузка прошла неудачно. Цель
предварительной загрузки - разделить собственно загрузку и использование данных, что
позволяет избежать простоя процессора. Как и в технологии "отмеченных команд" здесь
также сочетается оптимизация на этапе компиляции и на этапе выполнения.
Компиляторы для IA-64 просматривают исходный код с целью поиска команд,
использующих данные из памяти. Найдя такую команду, они будут добавлять пару команд команду предварительной загрузки (speculative loading) и проверки загрузки (speculative
check).
На этапе выполнения процессор сначала обнаруживает команду предварительной
загрузки и, соответственно, пытается загрузить данные из памяти.
Первая из команд загружает данные в память до того, как они понадобятся программе.
Вторая команда проверяет, успешно ли произошла загрузка, перед тем, как разрешить
программе использовать эти данные. Иногда попытка оказывается неудачной - например,
команда, требующая данные, находится после ветвления, условия которого ещё не
вычислены.
«Обычный» процессор тут же генерирует исключение. IA-64 откладывает генерацию
исключения до того момента, когда встретит соответствующую команду проверки загрузки.
Но к этому времени условия ветвления, вызывавшего исключение, уже будут вычислены.
Предварительная загрузка позволяет уменьшить потери производительности из-за
задержек при доступе к памяти, а также повысить параллелизм.
Расширение системы команд процессора SSE-х
SSE (Streaming SIMD Extensions) - расширение инструкций процессора для потоковой обработки в
режиме SIMD (Single Instruction Multiple Data), т.е. когда требуется применять однотипные операции к потоку
данных. Разработано компанией Intel и позволило преодолеть проблемы MMX - при использовании MMX
невозможно было одновременно использовать инструкции сопроцессора, так как его регистры
задействовались для MMX и работы с вещественными числами.
В общем случае, к архитектуре процессора добавляется ряд самих инструкций и несколько 128-битных
регистров с различной интерперетацией. Тем не менее, хотя изначально каждый регистр трактуется как два
значения с плавающей точкой двойной точности (2*64-бит), операции могут применяться практически ко
всем типам, "помещающимся" в 16 байт:
Это означает, например, что появляется возможность одновременно сложить или умножить с помощью всего
одной инструкции два операнда из четырех чисел с плавающей точностью одинарной точности, двух - с
двойной, двух 64-битных целочисленных, 16 8-битных целых и т.п.
Расширение системы команд процессора SSE-х
Таким образом, для получения максимальной отдачи от SSE, следует использовать такие структуры данных,
чтобы они максимально укладывались в эти 128-битные регистры. Если это не удается сделать изначально,
то среди SSE существуют и специальные для этих целей инструкции.
Для программ с большим количеством ветвлений и условных операций рекомендуется, по возможности,
заменить условные ветвления на логические и вычислительные операции.
Расширение системы команд процессора SSE-х
SSE включает в архитектуру процессора восемь 128-битных регистров (с xmm0 до xmm7),
каждый из которых трактуется как 4 последовательных значения с плавающей точкой
одинарной точности. SSE включает в себя набор инструкций, который производит операции со
скалярными и упакованными типами данных.
SSE2 использует восемь 128-битных регистров (с xmm0 до xmm7), включённых в архитектуру
x86 с вводом расширения SSE, каждый из которых трактуется как 2 последовательных значения
с плавающей точкой двойной точности. SSE2 включает в себя набор инструкций, который
производит операции со скалярными и упакованными типами данных. Также SSE2 содержит
инструкции для потоковой обработки целочисленных данных в тех же 128-битных xmm
регистрах, что делает это расширение более предпочтительным для целочисленных
вычислений, нежели MMX, появившийся гораздо ранее.
Набор SSE3 содержит 13 инструкций: FISTTP (x87), MOVSLDUP (SSE), MOVSHDUP (SSE),
MOVDDUP (SSE2), LDDQU (SSE/SSE2), ADDSUBPD (SSE), ADDSUBPD (SSE2), HADDPS
(SSE), HSUBPS (SSE), HADDPD (SSE2), HSUBPD (SSE2), MONITOR (нет аналога в SSE3 для
AMD), MWAIT (нет аналога в SSE3 для AMD).
SSE4 состоит из 54 инструкций, 47 из них относят к SSE4.1 (только они появятся в процессорах
Penryn). Ожидается, что полный набор команд (SSE4.1 и SSE4.2, то есть 47 + оставшиеся 7
команд) будет доступен в процессорах Nehalem. Ни одна из SSE4 инструкций не работает с 64-х
битными mmx регистрами (только с 128-ми битными xmm0-15).
Многопроцессорная обработка
Многопроцесорная (мультипроцессорная) обработка – это стратегическое направление повышения
производительности и надежности серверов. Известная классификация Флинна делит все
многопроцессорные архитектуры на 4 класса. В основе классификации лежат две
характеристики: число потоков команд и число потоков данных.
Компьютер, имеющий один поток команд и один поток данных, относится к классу SISD
(Single Instruction steam and Single Data steam). К этому классу относятся все традиционные
однопроцессорные компьютеры, от персональных компьютеров до мейнфреймов.
Следующий класс SIMD (Single Instruction steam and Multiple Data steam) – характеризуется
одиночным потоком команд и множественным потоком данных. К этому классу относятся
массивы процессоров, управляемых одним устройством управления, генерирующим команды,
и имеющими несколько устройств обработки данных, выполняющих параллельно эти
команды, каждое над своими данными. Такой способ вычисления очень эффективен в тех
случаях, когда необходимо выполнить одни и те же действия над разными данными, например,
при некоторых операциях с векторами. К этому классу архитектур относятся некоторые
суперкомпьютеры. Набор инструкций MMX, SSE и 3Dnow, также следует отнести к этому
классу команд.
Компьютеры класса MISD имеют один поток команд и много потоков данных. К этому классу
трудно отнести какой-либо компьютер.
Последней возможной комбинации соответствует класс MIMD – множественный поток команд
и множественный поток данных. К этому классу относятся все системы, имеющие в своем
составе несколько независимо работающих процессоров, каждый под управлением своей
собственной программы, обрабатывающей собственные данные.
Все распределенные
системы: вычислительные сети, многомашинные комплексы и мультипроцессоры – относятся
к классу MIMD.
Многопроцессорная обработка
Для многопроцессорных систем характерно наличие сильных
аппаратных и программных связей. Сильные связи выражаются в том, что
все процессоры имеют развитые средства взаимодействия, работают над
одним общим полем оперативной памяти, разделяют общие внешние
устройства и работают под управлением единой операционной системы.
Вместе с тем каждый процессор может иметь, кроме общих памяти и
устройств, и свои собственные, доступные только ему память и устройства.
Многопроцессорные системы часто характеризуют либо как
симметричные, либо как несимметричные. При этом следует четко
определять к какому аспекту многопроцессорной системы относится эта
характеристика – к типу архитектуры или к способу организации
вычислительного процесса.
Многопроцессорная обработка
Симметричная архитектура многопроцессорной системы предполагает
однородность всех процессоров и единообразие включения процессоров в
общую схему многопроцессорной системы.
Масштабируемость – или возможность наращивания числа процессоров
– в симметричных системах ограничена вследствие того, что все они
пользуются одной и той же оперативной памятью и, следовательно, должны
располагаться в одном корпусе. Такая конструкция, называемая
масштабируемой по вертикали, практически позволяет доводить число
процессоров до четырех или восьми.
В симметричных архитектурах все процессы пользуются одной и той же
схемой отображения памяти. Они могут очень быстро обмениваться
данными, так что обеспечивается достаточно высокая производительность
для тех приложений (например, при работе с БД), в которых несколько задач
должны активно взаимодействовать между собой.
Многопроцессорная обработка
В асимметричной архитектуре разные процессоры могут отличаться как
своими характеристиками (производительностью, надежностью, системой
команд и т.д., вплоть до модели микропроцессора), так и функциональной ролью,
которая поручается им в системе. Например, одни процессоры предполагается
использовать в качестве основных вычислителей, другие – предназначаются для
управления подсистемой ввода-вывода, третьи – еще для каких-то особых целей.
Функциональная неоднородность в асимметричных архитектурах влечет за
собой структурные отличия в фрагментах системы, содержащих разные
процессоры системы, например, они могут отличаться схемами подключения
процессоров к системной шине, набором периферийных устройств и способами
взаимодействия процессоров с устройствами.
Масштабирование в асимметричной архитектуре реализуется иначе, чем в
симметричной. Так как требование единого корпуса отсутствует, система может
состоять из нескольких устройств, каждое из которых содержит один или
несколько процессоров. Это масштабирование по горизонтали. Каждое такое
устройство называется кластером, а вся мультипроцессорная система кластерной.
Технология Hyper-Threading
Принцип действия основывается на том, что в каждый момент времени только часть
ресурсов процессора используется при выполнении программного кода. Неиспользуемые
ресурсы также можно загрузить работой - например, задействовать для параллельного
выполнения еще одного приложения (либо другого потока этого же приложения). В одном
физическом процессоре формируются два логических процессора (LP - Logical Processor).
В процессоре с Hyper-Threading каждый логический процессор имеет свой собственный
набор регистров (включая и отдельный счетчик команд), а, чтобы не усложнять технологию, в
ней не реализуется одновременное выполнение инструкций выборки/декодирования в двух
потоках — такие инструкции выполняются поочередно. Параллельно же исполняются лишь
обычные команды. Среди добавленных в процессор компонентов стоит также упомянуть
средства APIC (Advanced Programmable Interrupt Controller), назначающие прерывания для
обработки разными процессорами в мультипроцессорной системе.
С конструктивной точки зрения процессор состоит из двух логических процессоров,
каждый из которых имеет свои регистры и контроллер прерываний (Architectural State, AS), то
есть две параллельно исполняемые задачи работают со своими собственными независимыми
регистрами и прерываниями, но при этом используют одни и те же ресурсы процессора для
выполнения задач. После активации каждый из логических процессоров может
самостоятельно и независимо от других выполнять свою задачу, обрабатывать прерывания
либо быть заблокированным. Таким образом, от реальной двухпроцессорной конфигурации
новая технология отличается только тем, что оба логических процессора используют одни и те
же исполняющие ресурсы, одну и ту же разделяемую между двумя потоками кэш-память и
одну системную шину. Важно отметить, что никакого специализированного арбитража
потоков, способного разделять ресурсы самого процессора между двумя исполняемыми
задачами, не существует, однако это не препятствует эффективному использованию ресурсов
процессора для каждого независимого потока.
Технология Hyper-Threading
Технология Hyper Threading - это реализация одновременной многопоточности
(Simultaneous Multi-Threading, SMT). Технология Hyper-Threading является
промежуточной между многопоточной обработкой, осуществляемом в
мультипроцессорных системах, и параллелизмом на уровне инструкций,
реализованном в однопроцессорных системах.
На практике выигрыш от использования технологии Hyper-Threading
достаточно скромен. Дело в том, что возможность одновременного выполнения на
одном такте процессора инструкций от разных потоков ограничивается тем, что
эти инструкции могут задействовать одни и те же исполнительные блоки
процессора. Кроме того, резко возрастает число конфликтов работы с памятью.
От технологии Hyper-Threading можно ожидать максимального выигрыша в
случаях:
оба потока утилизировали разные блоки процессора;
отдельные потоки должны быть оптимизированы под процессор;
выполняемые потоки принадлежали бы различным приложениям.
Конечно, использование Hyper-Threading может привести к росту производительности за счет сокращения количества тактов, необходимых для выполнения
программы. Естественно, что существуют приложения, в которых использование
технологии HyperThreading не только не приводит к увеличению
производительности процессора, но может даже вызывать ее снижение.
Основные характеристики процессоров
Архитектурные характеристики
Системы команд процессора - набор поддерживаемых данным процессором команд, который
обуславливает программную совместимость разных процессоров и определяет принадлежность к
определенному семейству.
Способы адресации - способы задания адресов команд и операндов для обеспечения выборки из того или
иного устройства памяти.
Разрядность регистров, разрядность внутренних и внешних шин данных и шин адресов.
Наличие конвейера – число и тип используемых конвейеров, количество операций на каждой ступени
конвейера.
Наличие кэш-памяти, её организация, объём, рабочая частота.
Дополнительные архитектурные усовершенствования по сравнению с микропроцессорами предыдущих
поколений - дополнительные (логические) устройства и новые алгоритмы работы, вводимые с целью
увеличения производительности микропроцессора, различные системы контроля и диагностики состояния
Возможность работы в многопроцессорной конфигурации.
Технологические характеристики
Тактовая частота ядра и шины процессора;
Технология изготовления процессора;
Тип корпуса и разъём для установки;
Способы маркировки и идентификации;
Поддерживаемые напряжения питания ядра и интерфейсных схем.
Маркетинговые характеристики
Производитель.
Поколение, к которому относят тот или иной микропроцессор (понятие достаточно условное).
Ориентация на рынок низко-, средне- или высокопроизводительных ЭВМ или рынок мобильных
компьютеров.
Соотношение цена/производительность.
Особенности микроархитектуры процессоров
В основе архитектуры любого «классического» процессора
есть несколько конструктивных элементов: кэш команд и
данных, предпроцессор (Front End) и постпроцессор,
называемый также блоком исполнения команд (Execution
Engine).
Процесс обработки данных состоит из нескольких
характерных этапов. Прежде всего инструкции и данные
забираются из кэша L1 (который разделен на кэш данных и
кэш инструкций). Эта процедура называется выборкой. После
этого выбранные из кэша инструкции декодируются в
понятные для данного процессора примитивы (машинные
команды). Данная процедура называется декодированием.
Далее декодированные команды поступают на исполнительные
блоки процессора, выполняются, а результат записывается в
оперативную память.
Процессы выборки инструкций из кэша, их декодирование и продвижение к исполнительным
блокам осуществляются в предпроцессоре, а процесс выполнения декодированных команд — в
постпроцессоре. Таким образом, даже в самом простейшем случае команда проходит как минимум
четыре стадии обработки: выборка из кэша; декодирование; выполнение; запись результатов.
В реальных процессорах конвейер обработки команд может быть более сложным и включать
большее количество ступеней. Однако сама идеология построения процессора остается неизменной.
Причина увеличения длины конвейера заключается в том, что многие команды являются довольно
сложными и не могут быть выполнены за один такт процессора, особенно при высоких тактовых
частотах. Поэтому каждая из четырех стадий обработки команд (выборка, декодирование, выполнение,
запись) может состоять из нескольких ступеней конвейера.
Различные подходы к применению конвейерных архитектур
1. За счет уменьшения длины конвейера увеличивать количество исполнительных
блоков. Таким образом, по существу реализуется множество параллельных коротких
конвейеров. При этом постпроцессор работает по классической схеме: осуществляет выборку команд, их декодирование и посылку на множество исполнительных блоков. Такой
подход позволяет в полной мере реализовать параллелизм на уровне инструкций
(Instruction-Level Parallelism, ILP), когда несколько инструкций выполняются одновременно в различных исполнительных блоках процессора. Важно, что количество ступеней
конвейера внутри постпроцессора (исполнительного блока) здесь невелико, поэтому инструкции выполняются за небольшое количество циклов.
Для того чтобы реализовать параллелизм на уровне инструкций, необходимо, чтобы
поступающие на исполнительные блоки команды можно было выполнять параллельно.
Поэтому препроцессор прежде всего проверяет взаимозависимость команд и
переупорядочивает их не в порядке поступления (out of order), а так, чтобы их можно
было выполнять параллельно. На последних ступенях конвейера инструкции выстраиваются в исходном порядке.
2. Использование длинных конвейеров с высокими тактовыми частотами процессора. При использовании длинного конвейера в постпроцессоре, то есть на стадии
исполнения инструкций, задействуется меньшее количество исполнительных блоков,
каждый из которых обладает длинным и соответственно быстрым конвейером. Это
означает, что каждый блок исполнения (Execution Unit) имеет больше доступных для
выполнения тактов и способен одновременно выполнять довольно много инструкций.
Микроархитектура процессора Intel с длинным конвейером
Микроархитектура процессора Intel с длинным конвейером
Инструкции поступают в предпроцессор из кэша L2, а не из кэша L1, как в классической
схеме. Кэш второго уровня L2 получил название Advanced Transfer Cache. Имеющий 256битную шину, работающую на частоте ядра, и усовершенствованную схему передачи данных,
этот кэш обеспечивает высочайшую пропускную способность, столь важную для потоковых
процессов обработки.
Кроме того, в схеме предпроцессора появился новый элемент - кэш L1 декодированных
микроинструкций с отслеживанием исполнения (Trace Cache). Наличие такого кэша — одна из
составляющих архитектуры NetBurst. (Кэш L1 данных размеров (8 Кбайт) также присутствует в
процессоре, но разнесен с кэшем L1 инструкций.)
При работе процессора инструкции выбираются из кэша L2, транслируются в команды
х86 и декодируются. При этом с учетом того, что конвейер имеет много ступеней и должен быть
достаточно быстрым, при декодировании инструкции разбиваются на более мелкие
микрокоманды, которые затем поступают в Trace Cache. Для выборки команд из кэша L2, их
транслирования в команды х86 и последующего декодирования отводится несколько начальных
ступеней конвейера (восемь ступеней). Соответственно при выполнении фрагмента
программного кода для декодирования команд будет использовано восемь процессорных
тактов. Однако во многих современных (прежде всего мультимедийных) приложениях один и
тот же фрагмент кода может повторяться многократно. В этом случае тратить процессорные
такты на повторную выборку, транслирование и декодирование было бы нерационально.
Выгоднее хранить уже готовые к исполнению микроинструкции в специальном кэш L1, где из
них формируются мини-программы, называемые отслеживаниями (traces).
Микроархитектура процессора Intel с длинным конвейером
При попадании в кэш L1 происходит внеочередное выполнение команд; при этом
значительно экономятся ресурсы процессора, так как по своей сути внеочередное выполнение
команд подразумевает устранение восьми первых ступеней конвейера, фактическая длина которого в этом случае составляет уже 20 ступеней. В кэш с отслеживанием может храниться до
12 000 декодированных микрокоманд.
Восьми первых ступеней используются при необходимости выборки команд, их
трансляции, декодирования и сохранения в Trace Cache полученных микрокоманд. Общая же
длина конвейера составляет 28 – 32 ступени.
Для того чтобы обеспечить высокий процент попаданий в кэш L1 с отслеживаниями
(Trace Cache) и построение в нем мини-программ, используется специальный блок предсказания ветвлений (Branch Targets Buffers, ВТВ и Instruction Translation Look-aside Buffers, ITLB). Этот блок предсказания позволяет модифицировать мини-программы, основываясь на
спекулятивном предсказании. С кэш L1 связан также 4-Кбайт буфер ветвлений (ВТВ).
Кэш микроинструкций с отслеживаниями имеет еще одну особенность. Большинство
команд х86 при декодировании преобразуются в две-три микроинструкции. Однако
встречаются и такие команды, для декодирования которых потребовались бы десятки и даже
сотни микрокоманд. Естественно, что сохранять такие декодированные команды в кэше L1
было бы нерационально. Для этих целей используется специальная ROM-память (uCode ROM),
а в самом кэше L1 сохраняется лишь метка на область ROM-памяти, где хранятся
соответствующие микрокоманды. При попадании на такую метку управление потоком
инструкций передается ROM-памяти.
Микроархитектура процессора Intel с длинным конвейером.
Процесс продвижения микроинструкций по основному конвейеру
В блоке Allocate & Rename, происходит переименование и распределение дополнительных регистров
процессора. В процессоре Intel Pentium 4 содержится 128 дополнительных регистров, которые не определены
архитектурой набора команд. Переименование регистров позволяет добиться их бесконфликтного
существования.
Далее формируются две очереди микрокоманд: очередь микрокоманд памяти (Mem Queue) и очередь
арифметических микрокоманд (Int/FP Queue).
Потом происходит планирование и распределение (Schedule) микрокоманд. Планировщик выполняет
две основные функции: переупорядочивание микрокоманд и распределение их по функциональным
устройствам. Суть переупорядочивания микрокоманд заключается в том, что планировщик (Scheduler)
определяет, какую из микрокоманд уже можно выполнять, и в соответствии с их готовностью меняет порядок
их следования. Распределение микрокоманд происходит по четырем функциональным устройствам, то есть
формируются четыре очереди. Первые две из них предназначены для устройств памяти (Load/Store Unit). Эти
очереди формируются из очереди памяти Mem Queue. Микрокоманды из очереди арифметических
микрокоманд (Int/FP Queue) также распределяются в очереди соответствующих функциональных устройств.
Для этого предназначено три распределителя: Fast ALU Scheduler, Slow ALU/General FPU Scheduler и Simple
FP Scheduler.
Fast ALU Scheduler — это распределитель простых целочисленных операций. Он собирает простейшие
микроинструкции для работы с целыми числами, чтобы затем послать их на исполнительный блок ALU,
работающий на двойной скорости. Имеется два исполнительных блока ALU, работающих на удвоенной
скорости. Эти два блока ALU получили название Rapid Execution Engine (блоки быстрого исполнения).
Slow ALU/General FPU Scheduler — распределитель целочисленных операций/распределитель
операций с плавающей точкой. Это устройство распределяет остальные операции ALU и операции с
плавающей точкой.
Simple FP Scheduler — распределитель простых операций с плавающей точкой. Это устройство
формирует очередь простых операций с плавающей точкой и операций по доступу к памяти с плавающей
точкой.
Микроархитектура процессора AMD с коротким конвейером
Микроархитектура процессора AMD с коротким конвейером
Поток инструкций в формате х86 поступает в схему предпроцессора (Front End) из кэша L1. Кэш первого
уровня (L1) имеет общий размер 128 Кбайт и разделен на кэш данных и кэш инструкций.
Как и в большинстве современных х86-со-вместимых процессоров, имеющих внутреннюю RISCархитектуру, в процессоре AMD Athlon внешние CISC-команды декодируются во внутренние RISCинструкции, для чего используется декодер команд, состоящий из трех независимых блоков. Предварительно
инструкции х86 разделяются на большие (Large x86 instruction) и маленькие (Small x86 instruction). Большие,
или сложные, инструкции поступают в программный (Microcode decoder) декодер, а маленькие, или простые,
инструкции — в аппаратный (Hardware decoder) декодер. Оба декодера выполняют одну и ту же задачу транслируют х86-инструкции в простейшие машинные команды, называемые MacroOps. Так как инструкции
могут быть простыми и сложными, простые - при декодировании представляются с помощью 2-3 MacroOpsкоманд. С задачей декодирования таких простых инструкций может легко справиться аппаратный декодер,
построенный на логических схемах. Однако некоторые х86-ко-манды бывают довольно сложными. Такие команды при декодировании могут представляться несколькими десятками и даже сотнями MacroOpsинструкций. Для того чтобы их декодировать, используется специализированный программный декодер,
представляющий собой своеобразный процессор. Такой декодер содержит программный код, на основе
которого воспроизводится последовательность MacroOps-инструкций. В Pentium 4 в этой роли выступает не
декодер, a uCode ROM-память, содержащая длинные последовательности декодированных инструкций.
Каждый из двух декодеров в процессоре Athlon способен выдавать по три MacroOps-ин-струкции за такт,
поэтому оба декодера в со¬вокупности производят шесть декодированных ин-струкций за каждый такт
процессора. Далее эти шесть инструкций поступают на шестипо-зиционный параллельный декодер (sixposition parallel decoder), который, в свою очередь, выдает по три MacroOps-инструкций за такт.
После прохождения декодера MacroOps-инструкций (по три за каждый такт) поступают во временный
буфер хранения, называемый Instruction Control Unit (ICU). Этот буфер рассчитан на хранение 72 декодированных инструкций. Главная его задача заключается в диспетчеризации трех инструкций за такт по функциональным устройствам, то есть ICU распределяет инструкции в зависимости от их назначения и посылает
инструкции для работы с целыми числами в целочисленный планировщик (Int Scheduler), а инструкции для
работы с вещественными числами — в планировщик для работы с вещественными числами (FPU Scheduler).
Микроархитектура процессора AMD с коротким конвейером
Планировщик для работы с вещественными числами (FPU Scheduler) рассчитан на 36 инструкций, и его
основная задача заключается в том, чтобы распределять команды по исполнительным блокам по мере их
готовности. Таким образом, просматривая все 36 поступающих инструкций, FPU-планировщик
переупорядочивает следование команд, строя спекулятивные предположения о дальнейшем ходе программы,
чтобы создать несколько полностью независимых друг от друга очередей инструкций, которые можно было
бы выполнять параллельно. В процессоре Athlon имеется три исполнительных блока для работы с
вещественными числами, поэтому FPU-планировщик должен формировать по три инструкции за такт и направлять их на исполнительные блоки.
Все целочисленные инструкции направляются в планировщик инструкций для работы с целыми
числами (Int Scheduler). Этот планировщик рассчитан на хранение 18 инструкций и выполняет те же
функции, что и FPU-планировщик. Различие заключается в том, что в процессоре имеется шесть
функциональных исполнительных блоков для работы с целыми числами (три устройства ALU и три
устройства AGU), поэтому Int Scheduler должен формировать на выходе по шесть команд за каждый такт.
После того как все инструкции пройдут диспетчеризацию в соответствующих планировщиках, они могут
быть выполнены в соответствующих функциональных блоках.
Для работы с вещественными числами предусмотрено три функциональных устройства FPU, каждое из
которых представляет собой 15-ступенчатый конвейер, то есть для работы с вещественными числами
предусмотрено три разделенных конвейера:
FSTORE - конвейер хранения вещественных чисел;
FADD - конвейер для выполнения простейших арифметических операций (сложение, вычитание,
сравнение);
FMUL - конвейер для выполнения сложных арифметических операций (умножение, деление,
вычисление квадратных корней.
Подобная реализация блока FPU позволяет выполнять до трех вещественных операций за такт, причем
такая производительность является рекордной среди х86-совместимых процессоров и по сей день.
Блок операций с целыми числами также полностью конвейеризирован (10 ступеней), состоит из трех
распараллеленных частей, обеспечивая в результате выполнение трех целочисленных операций за один такт.
Микроархитектура процессора AMD с коротким конвейером.
Проблемы короткого конвейера
Короткий конвейер, как, впрочем, и длинный, имеет свои сильные и слабые стороны. Чем
больше количество ступеней, на которые разбит конвейер, тем меньшее количество работы
выполняется на каждой ступени и, следовательно, тем меньше времени требуется для
прохождения командой данной ступени. С учетом того, что каждая ступень выполняется за
один процессорный такт, длинные конвейеры позволяют повышать тактовые частоты
процессора, что невозможно в случае коротких конвейеров. В случае длинного конвейера
постпроцессора предпроцессору необходимо обеспечивать его соответствующую загрузку. Для
этого предпроцессор должен обладать довольно большим буфером, способным вмещать
достаточное количество инструкций. Если же в кэше L1 отсутствует инструкция или данные
для конвейера, то образуются так называемые pipeline bubbles (конвейерные пузырьки). Такие
pipeline bubbles проходят все ступени конвейера, ни на одной из которых не производятся
никакие действия. Наличие таких pipeline bubbles негативно отражается на производительности процессора, поскольку ресурсы процессора просто-напросто простаивают. Избежать
возникновения подобных нежелательных простоев в процессорах позволяют различные
хитроумные алгоритмы.
При коротком конвейере на каждой ступени процессор способен выполнять большее
количество работы, однако на прохождение инструкции через каждую ступень конвейера здесь
требуется больше времени, что ограничивает повышение тактовой частоты процессора. В этом
случае увеличение числа команд, выполняемых за единицу времени, достигается за счет
распараллеливания инструкций и наращивания исполнительных блоков процессора. Однако не
всегда удаётся распараллелить инструкции так, чтобы загрузить все исполнительные
устройства.
Архитектура процессора Intel Core i7
Включает в себя четыре процессорных
ядра, один трёхканальный контроллер
памяти, один контроллер шины QPI для
общения с чипсетом, и модуль отвечающий за
генерацию необходимых процессору для
работы
частот
и
управление
энергопотреблением.
Это лишь один из возможных вариантов, реализованный в данной конкретной
модели. Например, если на базе новой архитектуры создавать серверный процессор
— то не лишним будет увеличить количество не только ядер, но и контроллеров QPI,
если же, наоборот, мы разрабатываем мобильный CPU - можно сократить
количество ядер, чтобы уменьшить энергопотребление и заменить контроллер
чересчур быстрой QPI на обычную PCI Express.
Поддерживается встроенный контроллер памяти.
Архитектура процессора Intel Core i7.
Технология Hyper-Threading (Simultaneous Multi-Threading)
Эмуляция нескольких логических ядер на
базе одного физического.
Жёсткое
разделение
load/store/reorder
буферов между двумя виртуальными ядрами
пополам. Поэтому, в частности, вполне
возможна ситуация, когда включение
поддержки HT приведёт к снижению
производительности.
Архитектура процессора Intel Core i7. Исполнительное ядро
Поддерживается несколько режимов работы процессора в 64-битных, увеличилось
количество пар команд, декодируемых с помощью данной технологии за один такт.
Теоретически, это должно привести к тому, что декодер Core i7 несколько чаще
работает с полной отдачей.
Архитектура процессора Intel Core i7
Обработка циклов
Специальный блок под названием
Loop Stream Detector, предназначенный
для сохранения коротеньких циклов с
тем чтобы не загружать их заново из
L1/L2, впервые появился в процессорах
архитектуры Core 2. В Nehalem этот
блок разместили после декодера, таким
образом,
он
содержит
уже
декодированные команды. Идея взята из
Pentium 4, там подобным образом был
устроен весь кэш инструкций (Trace
Cache).
Предсказание переходов
Блок предсказания переходов попросту удвоили: теперь он делится на две части, одна из
которых работает над «быстрым» предсказанием переходов, вторая же работает медленнее, но за
счёт более глубокого анализа и вместительного буфера позволяет предсказывать те переходы, на
которых «быстрый» блок не срабатывает. Return Stack Buffer (это блок, отвечающий за адреса
возврата из функций) если ранее он иногда ошибался в случае использования сложных
алгоритмов, то теперь в большинстве случаев ошибаться перестанет.
Архитектура процессора Intel Core i7. Исполнение инструкций
Блоки,
отвечающие
за
исполнение инструкций, в
Nehalem
оставлены
практически без изменений.
В тех ситуациях, когда Core 2
и так успешно справляется с
предвыборкой инструкций и
данных, декодированием и
предсказанием
ветвлений,
производительность его при
равной с Core 2 частоте будет
примерно такая же.
Однако некоторые изменения всё же были внесены, и связано это как раз с введением
поддержки Hyper-Threading. Reorder Buffer расширен до 128 микроопераций, Reservation
Station — до 36 инструкций (было 32). Буферы для данных, соответственно: Load с 32 до 48,
Store — с 20 до 32. Это нужно чтобы увеличить количество команд и данных в очереди на
исполнение, тем самым повысив вероятность того, что какие-то из них можно будет выполнить
параллельно.
Архитектура процессора Intel Core i7. Подсистема кэширования
L2 является «персональной собственностью»
конкретного ядра, и оно ни с кем его не делит —
разделяемым и общим для всех является кэш
следующего уровня — L3. Во-вторых, Intel немного
«переиграла» значения латентности для L1 и L2 — у L1
латентность стала на 1 такт больше, чем в Core 2, а у L2
она наоборот стала в полтора раза ниже.
Кэш 3-го уровня, как и L2, является динамически
разделяемым и не «не-эксклюзивным», а именно
инклюзивным: данные, находящиеся в L1/L2 — обязаны
присутствовать в L3. Intel даже объясняет причину
подобного решения (далее на рисунках левый
соответствует эксклюзивному кэшу, а правый —
инклюзивному).
Рассмотрим первую ситуацию: ядро 0 запрашивает
данные из L3-кэша, и они там не обнаруживаются.
Архитектура процессора Intel Core i7. Подсистема кэширования
В случае с эксклюзивным кэшем (слева) это ещё ничего
не значит: данные могут находится в L1/L2-кэшах других
ядер. Инклюзивный кэш такую ситуацию исключает,
поэтому никаких дополнительных проверок не
требуется.
Рассмотрим другую ситуацию: ядро 0 запрашивает
данные из L3-кэша, и они там обнаружены. В случае с
эксклюзивным кэшем, проблем, наоборот, нет никаких:
если данные обнаружены в L3 — то больше их нигде нет.
В случае с инклюзивным кэшем могла бы возникнуть
проблема: данные, наоборот, наверняка есть в L1/L2
одного из ядер.
Для процессора проблема проблемой не является: каждая строка L3-кэша содержит биты core valid (по
количеству физических ядер), которые указывают, копией содержимого L1/L2 какого ядра является данная
строчка. Поэтому нет никакой необходимости опрашивать на предмет нахождения данных каждое ядро.
Архитектура процессора Intel Core i7. Управление энергопотреблением
Технология Turbo Boost
Использован
основательный
и
концептуальный подход: вся система управления
энергопотреблением выделена в отдельный блок
под названием PCU (Power Control Unit), который
представляет собой фактически «процессор в
процессоре», пусть и достаточно примитивный.
Этот управляемый собственной прошивкой
микроконтроллер реализует намного сложную
схему управления питанием: частота и
напряжение питания для каждого ядра
регулируются отдельно на основании данных о
его температуре и силе потребляемого тока.
Таким образом, каждое ядро может быть переведено в состояние пониженного
энергопотребления отдельно от других, а контроллеры памяти и шины QPI переводятся в
состояние пониженного энергопотребления в случае, когда все ядра находятся в незагруженном
работой состоянии.
Процессор может повышать частоту работы одного или нескольких ядер в том случае, если
остальные простаивают. Доступны два варианта ускорения ядер: повышение частоты нескольких
ядер на n ступеней и повышение частоты работы одного ядра на n+1 ступень. При этом
совершенно не обязательно, чтобы остальные ядра были полностью разгружены: Turbo Mode
включается в тех случаях, когда уровень загрузки ядер позволяет повысить частоту некоторых из
них, не выходя за пределы максимального TDP. Дополнительным бонусом является то, что
технология Turbo Boost, как и работа PCU - совершенно не связана ни с какой внешней
поддержкой т.е. функционирует внутри процессора полностью самостоятельно и не требует
задействования каких-либо дополнительных программных или аппаратных средств.