Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Доп_материалы_Вычислительные_системы.doc
Скачиваний:
21
Добавлен:
23.08.2019
Размер:
3.82 Mб
Скачать

3.4.Архитектура микропроцессора

Архитектуру микропроцессора можно упрощённо определить как состав, взаимное соединение и принцип действия его устройств. Архитектура микропроцессора определяет такие его свойства, как: система команд, наличие дополнительных устройств и блоков в составе микропроцессора, возможные режимы работы.

Система команд микропроцессора. Каждый микропроцессор имеет свой внутренний язык, называемый множеством микрокоманд или составом команд – это набор команд, которые понимает и может выполнять данный микропроцессор.

Режимы работы микропроцессора. Персональный компьютер, в зависимости от микропроцессора, может работать в однозадачном режиме, многозадачном режиме, в режиме виртуальных машин. В однозадачном режиме, находиться в оперативной памяти и выполняться может только одна пользовательская программа; в многозадачном режиме в памяти хранятся и попеременно выполняются несколько пользовательских программ, при этом возможны два варианта многозадачности- однопользовательский многозадачный и многопользовательский многозадачный режим; система виртуальных машин означает имитацию одновременной работы нескольких процессоров. Основной признак виртуальности микропроцессора- это не только многозадачность, но и возможность одновременной работы на компьютере нескольких операционных систем. Такой режим работы предусмотрен технологией IVT (Intel Virtualisation Technology), поддерживаемой современными процессорами Intel. Сходная по назначению технология, называемая AMD-V (AMD Virtualisation), используется и в микропроцессорах компании AMD.

Архитектура современных микропроцессоров весьма сложна и предусматривает наличие множества дополнительных устройств по сравнению с простейшими микропроцессорами 70-х годов. Дадим обзор некоторых из упомянутых дополнительных устройств.

Конвейер команд. Чтобы выполнить даже простейшую арифметическую операцию, микропроцессор должен выполнить около десятка микрокоманд, на каждую из которых затрачивается один такт работы. Например, чтобы сложить два числа, микропроцессор должен: выбрать из оперативной памяти очередную команду выполняемой программы, дешифрировать эту команду (выяснить, какие действия надо выполнить над операндами и в каких ячейках памяти операнды хранятся), переместить операнды из оперативной памяти в регистры АЛУ, выполнить сложение, передать результат из регистра обратно в оперативную память. У первых микропроцессоров эти стадии выполнения команды были разнесены во времени, несмотря на то, что за реализацию каждой из них отвечали разные блоки. Таким образом АЛУ, обязанное сложить 2 операнда в регистре, большую часть времени работы микропроцессора простаивает, ожидая поступления новых данных и команд.

Увеличить производительность микропроцессора можно с помощью конвейера команд, при реализации которого стадии выполнения операции становятся независимыми и для исполнения каждой стадии в микропроцессоре выделяется отдельный самостоятельный блок. В результате разные блоки микропроцессора начинают работать непрерывно, отрабатывая свои стадии поступающих команд и не простаивая в ожидании завершения работы соседнего блока. При конвейеризации общая продолжительность выполнения той или иной команды не меняется, но ускоряется темп выполнения потока команд, т.е. программы в целом за счёт того, что микропроцессор обрабатывает своими независимо функционирующими блоками одновременно несколько команд. Прототип конвейера был реализован ещё на первом микропроцессоре семейства х86- Intel 8086. В этой модели конвейер состоял их двух стадий- дешифрации команды и выполнения предписанных ею операций. Во время исполнения одной команды микропроцессор мог параллельно заниматься дешифровкой следующей. Первый полномасштабный конвейер команд был реализован на микропроцессоре Intel 486, у которого конвейер состоял из 5-ти стадий. С каждым новым поколением процессоров конвейер усложнялся. Рекордсменом по глубине конвейеризации (по числу стадий в конвейере) является Intel Pentium 4 с ядром Prescott (появился в 2004 г), у которого длина конвейера команд составляла 31 стадию (у предшествующего ядра Northwood их было 20). У современника Pentium 4 - процессора AMD K7 Athlon, данный показатель был скромнее- лишь 10 стадий (у более поздних процессоров AMD Opteron и Athlon 64 конвейер немногим длиннее - 12 стадий). Не следует думать, что производительность микропроцессора прямо пропорциональна глубине конвейера. Для каждой конкретной архитектуры микропроцессора существует своё оптимальное значение числа стадий в конвейере, этот оптимум к тому же зависит не только от архитектуры, но и от тактовой частоты микропроцессора и даже типа выполняемой программы. Процессоры с разной длиной конвейера могут иметь сопоставимый уровень производительности. Основное достоинство длинного конвейера- в возможности наращивать тактовые частоты микропроцессора. Мелкие стадии длинного конвейера более просты и предполагают меньшее количество работы, поэтому на прохождение одной стадии требуется меньше времени, что создаёт резерв для повышения частоты. Понятно, что увеличение тактовой частоты не может быть самоцелью- имеет значение рост производительности микропроцессора, а не мегагерц.

Суперскалярность. Суперскалярными называют микропроцессоры, имеющие несколько конвейеров. Первым суперскалярным микропроцессором был Pentium (1993 г), имевший 2 конвейера. У AMD аналогичная модель появилась позже и называлась "K5". Использование многоконвейерной архитектуры существенно повышает производительность микропроцессора, позволяя ему выполнять несколько команд за 1 такт.

Предсказание переходов (предикация). Эффективность использования конвейеров снижается из-за присутствия в программах циклов и условных операторов, требующих перехода в другую область программного кода и ломающих последовательность поступления команд в микропроцессор, что заставляет сбрасывать конвейер (очищать его), так как он выполнял не ту работу, и чем больше стадий в конвейере, тем больше штрафных тактов работы будет потеряно. Для устранения такого недостатка конвейера, в архитектуре микропроцессора предусмотрен блок предсказания переходов. Правильное предсказание переходов облегчается структурой большинства программ, в которых часто встречаются повторяющиеся действия (циклы). Важную часть в успехе предсказания переходов играет "буфер адреса перехода" ВТВ (branch target buffer), в котором хранится история переходов. Чем больше объём этого буфера, тем большей статистикой переходов обладает микропроцессор и выше вероятность правильного угадывания переходов. У современных микропроцессоров вероятность верного прогноза переходов в среднем составляет 90% и во многих программах достигает 95%.

Спекулятивное выполнение программ. Спекулятивным называется исполнение команд по предположению, т.е. когда микропроцессор ещё до проверки условия перехода, на основе накопленной истории ветвлений выполняемого алгоритма, может самостоятельно осуществить опережающую загрузку и выполнение команды, на которую предположительно будет осуществлён переход. Однако такой способ не применим, если один из операндов исполняемой инструкции является результатом исполнения предыдущей.

Динамическое исполнение. Динамическим называется исполнение инструкций с изменением порядка их следования (out-of-order execution). Это означает, что микропроцессор может начать выполнение следующих за текущей инструкций даже при отсутствии ветвлений алгоритма, причём в том порядке, в каком он считает необходимым в соответствии со своими внутренними алгоритмами. Такое возможно на суперскалярных микропроцессорах, имеющих несколько конвейеров. Подобная задача довольно сложна, так как микропроцессор должен определить, какие операции можно выполнять вне очереди, и кроме того, микропроцессор должен "собрать" результаты работы конвейеров в нужном порядке на выходе. У компании Intel впервые изменённый порядок исполнения был реализован в микропроцессоре Pentium Pro, у AMD- в микропроцессоре "K6".

Многопоточность (Hyper Threading). Эта технология впервые была применена на микропроцессоре Intel Pentium 4 на частоте 3.06 ГГц, в конце 2002 года. В соответствии с этой технологией, микропроцессор при выполнении программ представляется как два виртуальных (логических) процессора. На этапе выборки команд из оперативной памяти и дешифрирования команд на микроинструкции микропроцессор ведёт себя как обычно, но после дешифрации становится возможным параллельное выполнение двух потоков команд. Между тем, не все устройства процессора дублированы, некоторые блоки и исполнительные устройства микропроцессора являются разделяемыми (общими) для обоих логических процессоров, что ведёт к конфликтам и задержкам в работе. Поэтому для лучшей работы многопоточной технологии необходима перекомпиляция программ и оптимизация алгоритма, нужна операционная система, поддерживающая технологию Hyper Threading (WindowsXP, Vista). В однозадачном режиме прироста производительности от технологии Hyper Threading не будет, либо она даже снижается (например, при работе в AutoCAD), но в кодировании видео и обработке изображений прирост достигает 10- 15% . Наибольший выигрыш в производительности Hyper Threading даёт при одновременном выполнении нескольких приложений- до 30- 40% .

64-разрядные микропроцессоры. Первым процессором, устанавливавшимся на персональный компьютер IBM PC, был Intel 8086, разработанный в 1978 году. С тех пор было разработано много новых процессоров для персональных компьютеров. Для обеспечения совместимости новых микропроцессоров со старыми программами, процессоры должны сохранять в своём внутреннем языке микрокод старого Intel 8086 (так называемый микрокод х86), что усложняет процесс дешифровки команд этими процессорами и расширяет поддерживаемый ими набор микрокоманд, а это вынужденно усложняет архитектуру. Кроме того, есть ещё одно ограничение, вынужденно затрудняющих работу микропроцессоров семейства х86 - максимальное количество физических регистров не может быть более восьми. Микропроцессоры компаний AMD и Intel долгие годы принципиально мало изменялись, оставаясь 32-разрядными, сохраняя ту же основу архитектуры, которая была у их давнего предшественника Intel 80386. Спустя много лет, в 2003-м году появились 64- разрядные микропроцессоры AMD Athlon 64 и Opteron. Какая польза от этого новшества? С одной стороны, 64-разрядные вычисления для большинства программ выигрыша в производительности не дают, кроме задач, требующих больших объёмов оперативной памяти (в несколько гигабайт)- систем проектирования, больших баз данных, научных расчётов, либо высокой скорости выполнения операций над целыми числами высокой разрядности (криптография). С другой стороны, 64-разрядные микропроцессоры позволяют избавиться от узкого места системы команд х86, ограниченных восемью физическими регистрами общего назначения. Спецификой новых микропроцессоров AMD является то, что они имеют архитектуру AMD64 (первоначальное название- "х86-64"). Это значит, что они рассматриваются как развитие семейства х86 и служат переходным этапом от 32-разрядных к чисто 64-разрядным процессорам. Отличие от предшественников заключается в увеличении разрядности регистров и исполнительных блоков до 64 бит, кроме того- появилась возможность выполнения 64-битного программного кода. Эти универсальные микропроцессоры совместимы с 16-ти, 32-х и 64-х разрядными программами. 32-разрядные приложения на этих микропроцессорах производительности не теряют, а при их перекомпиляции в 64-разрядный код выполняются быстрее (до 15% в мультимедийных приложениях), в том числе за счёт использования 16-ти регистров вместо прежних 8-ми. Фирма Intel разработала 64-разрядный микропроцессор Itanium ещё в 2001 году, за два года до появления AMD Athlon 64, но Itanium имеет архитектуру IA-64, не совместимую с х86. Он предназначен, как и его следующая версия Itanium 2, для серверов и рабочих станций. Отказ от программной совместимости с Intel 8086 дало процессору Itanium очень высокую производительность при работе с 64-разрядным кодом, но 32-разрядные приложения выполняются им путём различных ухищрений, а потому работают медленнее в сравнении с x86-совместимыми 32/64- разрядными Athlon 64. В 2005 году компания Intel выпустила очередную версию процессоров Pentium 4, особенностью которых стало новое процессорное ядро Prescott 2M, поддерживающее технологию Extended Memory 64 Technology (EM64T). Данная технология обеспечивает 64-разрядные вычисления (поддержку 64-разрядного выполняемого кода) и 64-разрядную адресацию памяти, которая позволяет преодолеть предел в 4 Гб адресного пространства оперативной памяти, свойственный 32-разрядным процессорам. Все современные процессоры семейства х86 имеют архитектуру AMD64 или поддерживают технологию EM64T.

Следует учитывать, что 64-разрядные возможности современных микропроцессоров достижимы только при использовании новой 64-разрядной операционной системы WindowsXP Pro x64 и 64-разрядных драйверов устройств компьютера. Неутешительным является тот факт, что установка на компьютер процессора с 64-разрядной архитектурой  и соответствующей операционной системы не даст гарантированного прироста производительности системы. Требуются новые 64-разрядные версии существующих 32-разрядных программ. Новое 64-разрядное программное обеспечение появляется не так быстро, как хотелось бы.

Блок работы над числами с плавающей точкой. Уже первый процессор семейства х86 (Intel 8086) допускал совместную работу с так называемым "математическим сопроцессором", выполненным в виде отдельной микросхемы Intel 8087. Сопроцессор представлял собой вычислительное устройство со своим набором регистров, его архитектура была оптимизирована для выполнения операций с плавающей точкой (дробных чисел), причём не только четырёх действий арифметики, но и более сложных – вычисления логарифмов, тригонометрических функций и т.п. Для работы нового исполнительного блока потребовалось расширить систему команд Intel 8086 новым набором инструкций, который получил название "х87". Обработка инструкций "х87" выполняется так: выборку, декодирование команд и выдачу результата по-прежнему выполняет УУ микропроцессора, а непосредственно выполнение вычисления ложится на сопроцессор, подключаемый по мере необходимости. Для удешевления компьютера математический сопроцессор мог и не устанавливаться, тогда операции с плавающей точкой выполняло АЛУ микропроцессора, что заметно снижало быстродействие машины. Начиная с Intel 486 сопроцессор интегрирован в микропроцессор и называется FPU (Floating Point Unit) – устройство для обработки чисел с плавающей точкой. В настоящее время FPU является сложным, суперскалярным устройством. Современные процессоры для увеличения производительности имеют два FPU. Многие программы нуждается в помощи блока FPU, но особенно это относится к научным расчетам, системам автоматизированного проектирования и всем программам, где приходится строить трёхмерное изображение, к играм в том числе.

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

Таблица 3.1. Динамика расширения набора микрокоманд процессоров

Микропроцессор

Число микрокоманд

8086, 80286

170

80386, 486, Pentium

220

Pentium MMX

277

Pentium III

347

Pentium 4 Willamete, Northwood

491

Pentium 4 Prescott, Prescott 2M

504

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

ММХ. Этим именем называют набор из 57 дополнительных инструкций (MultiMedia eXtensions) и видоизменённый исполнительный блок микропроцессора, используемые в продукции Intel начиная с Pentium MMX (P55C), предназначенные для оптимизации обработки потоковых целочисленных данных, что ускоряет обработку звука и графики, ставших актуальными в середине 90-х годов. ММХ ускоряет работу процессора с двумерной графикой ("плоской графикой"), что в своё время помогло популяризации графического интерфейса Windows. Без блока MMX редактирование полноцветных фотографий в любом графическом редакторе было бы непривычно медленным даже на современных процессорах. Система команд х86 использует принцип однопоточности команд и данных, т.е. каждая команда одновременно может обрабатывать только один набор операндов (SISD- "Single Instruction- Single Data"). Между тем, на суперкомпьютерах ещё в 60-х годах применялся способ организации работы, называвшийся SIMD (Single Instructions- Multiple Data- "одна инструкция- много наборов операндов"), позволявший ускорить обработку однотипных данных, которые часто используются в мультимедийных приложениях. Например, требуется массив переменных умножить на число. По стандартной схеме SISD микропроцессор будет циклически повторять одни и те же действия для каждой ячейки массива, в т.ч. помногу раз декодировать одну и ту же инструкцию умножения. Работая же по схеме SIMD, микропроцессор с блоком MMX (поддерживающий дополнительный набор инструкций MMX) один раз декодирует инструкцию, а дальше занимается только вычислениями и пересылкой данных. Кроме того, при наличии конвейера он может одновременно выполнять несколько операций.

3D Now! Компания AMD предложила свой набор SIMD инструкций- "3D Now!" , впервые появившийся в микропроцессоре "К6-2". Это 21 дополнительная инструкция, ускоряющие работу с трёхмерной графикой и обрабатывающие не только целые числа, как ММХ, но и дробные. Позже появились обновлённые наборы команд: "Enhanced 3D Now!"- расширенный "3D Now!" с 5-ю дополнительными инструкциями (впервые появились в микропроцессорах "К6-2+" и К7 "Athlon"), кроме того- "3D Now!+" (иначе называемый "3D Now! Professional"), который включает в себя 107 SIMD- инструкций (микропроцессоры Athlon XP, Athlon 64).

SSE. Это 70 новых инструкций, впервые использованные в Pentium III в дополнение к MMX. В отличие от ММХ, этот набор команд обеспечивает потоковую обработку чисел с плавающей точкой, но речь идёт лишь о данных с одинарной точностью – максимальная поддерживаемая разрядность дробных чисел составляет 32 бита. Использование SSE требует перекомпиляции программ, оптимизацию алгоритма программы и поддержку от операционной системы, поэтому эффект от SSE появился не сразу, а по мере появления нового программного обеспечения. Со временем компания AMD была вынуждена вставить SSE в свои микропроцессоры AthlonXP и Athlon 64, где он присутствует наряду с "3D Now! Professional".

SSE2. Этот набор дополнительных инструкций позволяет обрабатывать дробные числа двойной точности (64 бита). Кроме того, SSE2 содержит команды для управления предварительной выборкой и потоковой передачи данных. SSE2 используется в микропроцессорах Pentium 4, AMD Athlon 64, Opteron и более поздних.

SSE3. Это набор из 13-ти новых инструкций, улучшающих работу микропроцессора в потоковой обработке данных. Дополнения коснулись обработки чисел с плавающей точкой (х87), обработки векторов с одинарной точностью (SSE), двумерных векторов чисел с двойной точностью (SSE2) и команд более эффективной синхронизации параллельных потоков в технологии Hyper Threading. Этот дополнительный набор команд появился в микропроцессоре Pentium 4 с ядром Prescott. С некоторыми сокращениями SSE3 поддерживается процессорами AMD, устанавливаемыми на разъём AM2 (Athlon 64 x2).

SSE4. Добавляет в микрокод процессоров семейства х86 ещё 52 новые процессорные команды для ускорения обработки мультимедийных, текстовых и других данных. Этот набор команд появился в микропроцессорах Intel Core 2 Duo c ядрами Conroe и Kentsfield.

SSE4.1. Этот набор дополнительных инструкций  (47 новых инструкций) предназначен для повышения производительности при работе с мультимедийными приложениями. Это могут быть задачи видео и аудио, научные задачи и трёхмерная графика. Данный набор инструкций впервые стал использоваться в микропроцессорах Intel Core 2 Duo второго поколения- с ядрами Yorkfield и Wolfdale.

SSE4A. Этот набор инструкций предусмотрен архитектурой микропроцессора AMD Phenom. Сообщается, что эти команды не совместимы с набором команд SSE4.1 от Intel.

Подводя итог сказанному, можно отметить, что функционирование блоков процессора, обеспечивающих использование наборов дополнительных инструкций "3D Now!" и SSE, повышает производительность процессора в играх, программах обработки трёхмерной графики и программах упаковки видео и звука в форматы хранения МР3, MPEG-1, MPEG-4 и другие.

Кэш-память