Многоуровневая организация процессора

On 10.11.2013 by nikellanjilo

Объекты на уровне 0 называются вентилями. Вентили состоят из аналоговых компонентов (транзисторы) и смоделированы как цифровые средства, на входе у которых цифровые сигналы (или набор 0 и 1), а на выходе – результат простых функций («И» или «ИЛИ»). Каждый вентиль формируется из нескольких транзисторов. Несколько вентилей формируют 1 бит памяти, который может содержать 0 или 1. Биты памяти,объединенные в группы, например, по 16,32 или 64, формируют регистры. Каждый регистр может содержать одно двоичное число до определенного
предела.
Уровень 1. Микроархитектурный уровень, представляет собой локальную память ( совокупность регистров) и схему, называемую АЛУ (арифметико-логическое устройство). АЛУ выполняет простые арифметические операции. Регистры вместе с АЛУ формируют тракт данных, по которому поступают данные. Основная операция тракта данных состоит в следующем. Выбирается один или два регистра, АЛУ производит над ними какую-либо операцию, например сложения, а результат помещается в один из этих регистров.
Уровень 2. Уровень архитектуры команд. Этот уровень включает набор машинных команд, которые выполняются микропрограммой-интерпретатором или аппаратным обеспечением.

Уровень 3. Уровень операционной системы. Этот уровень включает набор команд уровня 2. Оставшаяся часть команд интерпретируется операционной системой. Особенности уровня: набор новых команд, собственная организация памяти, способность выполнять две и более программ одновременно и др. При построении третьего уровня возможно больше вариантов, чем при построении первого и второго. Нижние три уровня конструируются не для того, чтобы с ними работал обычный программист. Они изначально предназначены для работы интерпретаторов и трансляторов, поддерживающих более высокие уровни. Эти трансляторы и интерпретаторы составляются системными программистами, которые специализируются на разработке и построении новых виртуальных машин. Уровни с четвертого и выше предназначены для прикладных программистов, решающих конкретные задачи.

Другое различие между уровнями 1,2,3 и уровнями 4,5 и выше — особенность языка. Машинные языки уровней 1,2 и 3 — цифровые. Программы, написанные на этих языках, состоят из длинных рядов цифр, которые удобны для компьютеров, но совершенно неудобны для людей. Начиная с четвертого уровня, языки содержат слова и сокращения, понятные человеку.
Уровень 4. Уровень языка ассемблера. Представляет собой символическую форму одного из языков более низкого уровня. На этом уровне можно
писать программы в приемлемой для человека форме. Эти программы сначала транслируются на язык уровня 1, 2 или 3, а затем интерпретируются
соответствующей виртуальной или фактически существующей машиной. Программа, которая выполняет трансляцию, называется ассемблером.
Уровень 5. Язык высокого уровня. Обычно состоит из языков, разработанных для прикладных программистов. Такие языки называются языками высокого уровня. Существуют сотни языков высокого уровня. Наиболее известные среди них — BASIC, С, C++, Java, LISP и Prolog. Программы, написанные на этих языках, обычно транслируются на уровень 3 или 4. Трансляторы, которые обрабатывают эти программы, называются
компиляторами или иногда используется метод интерпретации. Например, программы на языке Java обычно интерпретируются.
Интерпретатор берёт очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. Только после того как
текущий оператор успешно выполнен, интерпретатор перейдёт к следующему. Если один и тот же оператор будет выполняться в программе
многократно, интерпретатор будет выполнять его так как, как будто встретил впервые. Вследствие этого программы, в которых требуется
осуществить большой объём вычислений, будут выполняться медленно.
Компиляторы полностью обрабатывают весь текст программы. Они просматривают его в поиске синтаксических ошибок (иногда несколько раз),
производят определенный смысловой анализ, а затем автоматически переводят (транслируют) на машинный язык — генерируют машинный код.
Понятие «архитектуры» применительно к процессорам несколько двойственно: под ним может пониматься как совместимость с неким единым набором команд, так и совокупность аппаратных решений, присущих определённой достаточно широкой группе процессоров.
Известны процессоры с расширенной и укороченной системой команд, именуемые соответственно CISC (Complex Instruction Set Computing)
и RISC (Reduced Instruction Set Computing). Для CISC-процессоров характерны большое число машинных команд различных форматов, по командам
выполняются довольно объемные вычисления, эквивалентные операторам языков программирования. Такие команды занимают много тактов.
Архитектура CISC используется в микропроцессорах компаний Intel и AMD.
В процессорах архитектуры RISC, появившейся в 1980 г., длинные команды заменяются совокупностями коротких команд, выполнение каждой из
которых происходит за малое число тактов компьютера, чаще всего за один такт. Упрощение обработки команд достигается также за счет их
фиксированного размера и формата. Состав системы команд должен быть «удобен» для компиляции операторов языков высокого уровня.
Архитектуру RISC имеют многие микропроцессоры, разработанные для рабочих станций, например, микропроцессоры SPARC компании Sun
Microsystems, микропроцессоры Power6 компаний IBM и Apple.
«Процессорное ядро» — это конкретное воплощение микроархитектуры (т.е. «архитектуры в аппаратном смысле этого слова»), являющееся
стандартом для целой серии процессоров. Например, NetBurst — это микроархитектура, которая лежала в основе процессоров Intel: Celeron,Pentium 4. Она задает общие принципы: длинный конвейер, использование определенной разновидности кэша кода первого уровня, расширенная 64-битная технология работы с памятью. Последнее принесло три усовершенствования: появление команд для работы с 64-битными целыми
числами, увеличение количества и/или разрядности регистров, и увеличение максимального объёма адресуемой памяти. Частота работы ядра только
в первом приближении определяет быстродействие, так как совершенно не обязательно все составляющие CPU функционируют на той же частоте,
могут на 1⁄2, 1/3. Скорости работы с памятью: За такт передаётся 64 бита, то есть 8 байт. Соответственно, если рабочая частота шины равна 100 МГц (100’000’000 тактов в секунду) — то скорость передачи данных будет равна 8 байт * 100’000’000 герц ~= « в десятичных мегабайтах» 800 мегабайт в
секунду. DDR-шина способна передавать за один такт удвоенный объём данных, а (Quad Data Rate) шина — то она и вовсе «400-мегагерцевая», так
как за один такт передаёт четыре пакета данных. Хотя реальная частота работы у всех трёх вышеописанных шин одинаковая — 100 мегагерц.
Суперскалярность и внеочередное исполнение команд — современные процессоры способны запускать на исполнение не только ту команду,
которую (согласно коду программы) следует исполнить в данный момент времени, но и другие, следующие после неё.
Пусть нам следует исполнить следующую последовательность команд:
1) A = B + C
2) Z = X + Y
3) K = A + Z
Легко заметить, что команды (1) и (2) совершенно независимы друг от друга — они не пересекаются ни по исходным данным (переменные B и C в
первом случае, X и Y во втором), ни по месту размещения результата (переменная A в первом случае и Z во втором). Стало быть, если на данный
момент у нас есть свободные исполняющие блоки в количестве более одного, данные команды можно распределить по ним, и выполнить
одновременно, а не последовательно. В классическом случае исполнение всей последовательности заняло бы N*3 тактов, а в случае с параллельным
исполнением — всего N*2 тактов.
Процессор, который умеет сам определять независимые и непротиворечащие друг другу инструкции и параллельно их выполнять, называется суперскалярным.
Внеочередное исполнение — инструкции поступают в исполнительные модули не в порядке их следования, как было в концепции выполнения
инструкций по порядку, а по готовности к выполнению. Процессор с внеочередным выполнением кода выполняет те инструкции, которые готовы, вне зависимости от их порядка следования в коде программы. Внеочередное выполнение тем эффективнее, чем длиннее конвейер процессора, и чем больше разница в скорости между памятью (оперативной или кэшем) и процессором. Процессоры работают намного быстрее памяти, поэтому во время ожидания поступления данных процессор может выполнить множество инструкций, операнды которых доступны.
В настоящее время для дальнейшего повышения производительности используют несколько подходов. Во-первых, реализация двух или более
процессоров в одной СБИС («мультипроцессирование на уровне микросхем»). Благодаря малым расстояниям между основными регистрами и кэш-памятью удается заметно снизить задержки при параллельном выполнении операций в процессорах. Во-вторых, архитектура сверхбольшого командного слова EPIC, выполняющая параллельно несколько команд. В-третьих, многопотоковоая обработка информации на основе параллелизма на уровне нитей. Суть заключается в загрузке конвейера более чем одним заданием. Если в обычном конвейере одно задание (нить)не в состоянии загрузить конвейер и ряд функциональных блоков в течение некоторых тактов остаются свободными, то в технологии TLP эти блоки загружаются операциями из других нитей.

Добавить комментарий