Арифметические основы вычислительных машин

Автор работы: Пользователь скрыл имя, 04 Сентября 2014 в 13:43, реферат

Описание работы

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

Файлы: 1 файл

Архитектура компьютера и принципы его работы.doc

— 1.02 Мб (Скачать файл)

 

 

 

 

Intel 8086 – первый 16-битный микропроцессор компании Intel. Процессор имел набор команд, который применяется и в современных процессорах, именно от этого процессора берёт своё начало известная на сегодня архитектура x86.

Размер шины адреса был увеличен до 20 бит, что позволило адресовать 1 Мбайт памяти. Для доступа к этому мегабайту потребовалось изменить способ адресации памяти, этот метод назвали реальным режимом адресации процессора. Процессор не умел выполнять операции над числами с плавающей запятой, для выполнения таких операций был необходим математический сопроцессор.

Intel 80286 (также известный как i286) – 16-битный x86-совместимый микропроцессор второго поколения фирмы Intel, выпущенный в 1982 году. Данный процессор представляет собой усовершенствованный вариант процессора Intel 8086 и был в 3-6 раз быстрее него. Процессор применялся, в основном, в IBM PC совместимых ПК.

В новом процессоре было увеличено количество регистров, добавлены новые инструкции. Шина адреса увеличена до 24 бит, таким образом объем ОЗУ может составлять 16 Мбайт, для доступа к этому адресному пространству добавлен новый режим работы процессора – защищённый режим (реализовано два режима работы – защищённый режим и реальный режим, которые будут рассмотрены в главе посвященной памяти).

Intel 80386 (i386) – 32-битный x86-совместимый процессор третьего поколения фирмы Intel выпущенный в 1985 году. Данный процессор был первым 32-разрядным процессором для IBM PC-совместимых ПК. Применялся, преимущественно, в настольных ПК и портативных ПК (ноутбуки и лэптопы).

Вся архитектура x86 была расширена до 32 бит — все регистры  стали 32-битными, адресация в защищенном режиме также стала 32-битной. В i386 механизмы защиты и многозадачности были значительно расширены и улучшены.

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

 

Intel486 (i486) – 32-битный скалярный x86-совместимый процессор четвёртого поколения, построенный на гибридном CISC-RISC ядре, и выпущенный фирмой Intel в 1989 году. Архитектура процессора не является повторением или улучшением i386, а представляет совершенно оригинальное решение. Это был первый микропроцессор со встроенным математическим сопроцессором (FPU). Intel продолжает производить его до настоящего времени (2009) для использования во встраиваемых системах.

Intel486 имел  расположенную на кристалле кеш-память  объёмом 8 Кбайт, позднее – 16 Кбайт, работающую на частоте ядра. Наличие кеша позволило существенно увеличить скорость выполнения операций.

В Intel486 был усовершенствован механизм выполнения инструкций в несколько этапов. Конвейер процессоров серии Intel486 состоял из 5 ступеней: выборка инструкции, декодирование инструкции, декодирование адресов операндов инструкции, выполнение команды, запись результата выполнения инструкции.

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

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

Раскроем подробнее понятия, введенные в архитектуру процессора начиная с 4 –го поколения.

Конвейер (pipeline) – механизм, который позволяет обрабатывать более одной команды одновременно.

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

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

RISC (англ. Reduced Instruction Set Computing) – вычисления с сокращённым набором команд, противопоставляется  архитектуре CISC –– вычисления с полным набором команд (англ. Complex Instruction Set Computing).

Это концепция проектирования процессоров, которая во главу ставит следующий принцип: более компактные и простые инструкции выполняются быстрее. Основанием использования этого принципа является правило 80/20, по которому в 80% работы процессора используется только часть 20% общего набора команд микропроцессора, при этом чаще всего исполняются простые инструкции. Сложные операции используются редко, они, как правило, медленнее, чем те же действия, выполняемые набором простых команд. Простая архитектура позволяет удешевить процессор, поднять тактовую частоту, а также распараллелить исполнение команд между несколькими блоками исполнения (т.н. суперскалярные архитектуры процессоров).

Сравнительный анализ RISC и CISC архитектуры показан в таблице 2

Таблица 3

Характерные особенности RISC-процессоров

Характерные особенности СISC-процессоров

Фиксированная длина машинных инструкций (например, 32 бита) и простой формат команды.

Нефиксированное значение длины команды, т.е. различные команды занимают в памяти различное количество байт

Равное время выполнения всех машинных команд.

Разные команды выполняются за разное время

Большое количество регистров общего назначения (32 и более).

Небольшое число регистров, каждый из которых выполняет строго определённую функцию


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

Все процессоры x86, начиная с Intel486DX, являются CISC-процессорами с RISC-ядром. Они непосредственно перед исполнением преобразуют CISC-инструкции процессоров x86 в более простой набор внутренних инструкций RISC. Одна инструкция в формате x86, заменяется несколькими (до 4-х) RISC-инструкциями.

 

Pentium – торговая марка нескольких поколений микропроцессоров семейства x86, выпускаемых корпорацией Intel.

Pentium (P5) является процессором Intel пятого поколения и пришёл на смену Intel 80486 в 1993 году. Он имеет следующие основные отличия от 486-го процессора.

  • Суперскалярная архитектура. Благодаря использованию суперскалярной архитектуры процессор может выполнять несколько команд за 1 такт. Такая возможность существует благодаря наличию нескольких конвейеров. Pentium является первым CISC процессором использующим многоконвейерную архитектуру. Процессоры, оснащённые механизмом параллельного исполнения нескольких команд, принято называть «суперскалярными». Разумеется, степень параллелизма не бесконечна: команды могут быть выполнены параллельно только в том случае, когда на данный момент времени есть в наличии соответствующее количество свободных от работы блоков, причём именно таких, которые «понимают» рассматриваемые команды.
  • 64-битная шина данных. Позволяет процессору Pentium обмениваться вдвое большим объёмом данных с оперативной памятью, чем 486 за один шинный цикл (при одинаковой тактовой частоте).
  • Механизм предсказания адресов ветвления (предсказания переходов). Применяется для сокращения времени простоя конвейеров, вызванного задержками выборки команд при изменении счетчика адреса во время выполнения команд ветвления. Для этого в процессоре используется буфер адреса ветвления BTB (Branch Target Buffer), использующий алгоритмы предсказания адресов ветвления.
  • Раздельное кэширование программного кода и данных. В процессорах Pentium используется кэш-память первого уровня (кэш L1) объёмом 16Кб, разделенная на 2 сегмента: 8Кб для данных и 8Кб для инструкций. Это улучшает производительность и позволяет делать двойное кэширование доступным чаще, чем это было возможно раньше. Кроме того, изменён механизм кэширования.
  • Улучшенный блок вычислений с плавающей запятой (FPU, сопроцессор).

Из перечисленных нововведений требует разъяснения идея  предсказания адресов ветвления.

Вспомним пример использования команд переходов. Еще раз приведем программу на паскале

begin

  for ia := 0 to 4 do

     ib := ib + ia;

end;

При компиляции этого цикла в машинный код он преобразуется в такую последовательность команд:

004D998  mov word ptr [ia], $0000 ;ia := 0 

004D9A1  mov ax, [$00450bd8]  ;две строки

004D9A7  add [ib], ax    ;выполняют сложение

004D9AE  inc [ia]     ;добавляем 1 к ia

004D9B5  cmp  word ptr [ib], $05 ;сравниваем ia с 5

004D9BD  jnz -$1e    ;если цикл не

;закончился

;возвращаемся на 

;начало цикла 004D9A1

004D9BF ……      ;что-то после цикла



Как видите, переход со строки 5 в пяти случаях осуществляется на строку 2 (адрес 004D9A1) и только в одном  на строку 7 (инструкция, следующая после цикла, адрес 004D9BF). Механизм предсказания при этом просто запомнит, куда произошел переход по условию в самый первый раз, после чего будет предполагать, что и в следующий раз переход осуществится туда же. Т.е. ошибется всего лишь один раз из пяти! А ведь в реальных задачах встречаются циклы с гораздо большим количеством повторений. Зная, какие команды последуют за операцией перехода, можно, соответственно, начать декодировать их задолго до того, как сама операция совершится, конвейер будет спасен от простоя. Для запоминания адресов перехода используется специальный буфер меток перехода (буфер адреса ветвления).

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

Разумеется, приведенный выше пример относятся к самым примитивным. На практике алгоритмы, ведающие предсказанием ветвлений, гораздо сложнее. Объявленная Intel эффективность работы блока предсказания ветвлений достигает 97-98 процентов.

Перечислим лишь некоторые механизмы, используемые в настоящее время:

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

 

Вернемся к обзору процессоров.

 

Pentium MMX – процессор компании Intel, содержащий дополнительное расширение MMX. Впервые появился в 1997 году. Содержит 57 новых команд по параллельной обработке целочисленных данных, введен тип данных 64 бита. Для повышения производительности кэш инструкций и кэш данных были увеличены до 16 Кб каждый.

Остановиться на технологии ММХ (Multimedia Extensions — мультимедийные расширения) – коммерческое название дополнительного набора инструкций, выполняющих характерные для потоковых аудио/видео данных действия за одну машинную инструкцию.

Смысл в том, что для таких данных характерно применение одного и того же преобразования к массиву данных, например пикселям изображения. Обычный процессор обрабатывает каждый пиксель по отдельности, используя же MMX, он может обрабатывать несколько пикселей сразу! Для этого данные должны бать размещены в специальных длинных регистрах ММХ, при этом физически никаких новых регистров с введением MMX не появилось – используются регистры математического сопроцессора.

Pentium Pro – процессор Intel шестого поколения, совместимый с архитектурой, x86. Процессор был анонсирован в 1995 году, процессор позиционировался, в основном, как процессор для серверов и рабочих станций. Кроме того, процессор мог быть использован при сборке многопроцессорной конфигурации (до 4-х процессоров).

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

Рассмотрим более детально понятия появившиеся в шестом поколении.

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

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

команда 1: R1 = А + 2;

команда 2: R3 = R1 + 5.

команда 3: R2 = В + 3;

В нашем случае для выполнения команды 2 требуется результат команды 1, и поэтому команда 2 не может быть выполнена, пока не будет завершена команда 1. Команда 3 не зависит от других команд. До 6-го поколения процессоры уже имели несколько вычислительных блоков, но они выполняли команды только строго в порядке их расположения в программе, т.е., пока не будет выполнена команда 1, все вычислительные блока простаивают. По идее, в это время можно было бы выполнять другую полезную вычислительную работу. Начиная с 6-го поколения процессор проверяет зависимость команды от результата предыдущих команд на много шагов вперед. Этот механизм называется «анализом потока данных» Процессор с этой технологией может выполнять команды в порядке, отличном от их порядка следования в программе. В нашем случае сначала будут выполнены команды 1 и 3, а только потом  2 (См. Рис. ..). Это вторая составляющая динамического исполнения – «опережающее» выполнение команд. Результат опережающего выполнения записывается в специальные регистры временного хранения.

Информация о работе Арифметические основы вычислительных машин