Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 2(МП)+.doc
Скачиваний:
28
Добавлен:
10.06.2015
Размер:
117.25 Кб
Скачать

Принципы функционирования современных микропроцессоров Конвейеризация вычислений. Суперскалярность

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

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

Рис. 1. Упрощенная структурная схема идеи конвейерной обработки

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

Теперь распределим функции, выполняемые в функциональном блоке ФБ, между тремя последовательными независимыми блоками: ФБ1, ФБ2 и ФБ3 (рис. 1), причем так, чтобы максимальное время обработки в каждом блоке было одинаково и равнялось Tmax/3. Между функциональным блоками размещаются буферные регистры Ргi, предназначенные для хранения результата обработки команды в ФБi на случай если следующий за ним функциональный блок ФБi+1 еще не готов использовать этот промежуточных результат. В случае такой синхронной и безостановочной работы всех функциональных блоков на вход конвейера, в регистр Ргвх инструкции могут подаваться с интервалом Tmax/3, т.е. втрое чаще. В момент времени Tmax/3 после поступления на обработку первой инструкции результаты ее обработки в ФБ1 могут быть переданы через Рг1 в ФБ2 для дальнейшего исполнения, тогда как освободившийся ФБ1 будет готов принять вторую инструкцию. Аналогично, еще через интервал времени Tmax/3 на конвейер поступит третья команда, тогда как первая перейдет к финальной стадии обработки в блоке ФБ3. Таким образом, на конвейере в различной стадии исполнения в один момент времени окажутся три команды, и хотя задержка от момента поступления первой Ргвх до момента появления результата ее обработки на выходе по-прежнему составляет Tmax, результаты исполнения следующих инструкций будут появляться в выходном регистре уже с интервалом Tmax / 3. Из рассмотренной схемы становится очевидным, что троекратное увеличение вычислительной эффективности достигается не за счет увеличения быстродействия каждого отдельного функционального блока, а посредством разделения общей функциональности между каждым из них. Также очевидно, что увеличение числа ступеней такого линейного конвейера должны привести к увеличению его производительности в число раз равное числу ступеней.

Однако на практике редко удается добиться того, чтобы задержки в каждом ФБi были одинаковыми. Как следствие, производительность конвейера снижается, поскольку период поступления очередной инструкции на конвейер определяется наибольшим временем обработки команд в наиболее «медленном» функциональном блоке. Для устранения этого недостатка или, по крайней мере, частичной его компенсации каждый буферный регистр Ргi может быть заменен буферной памятью БПi (рис. 2), способной хранить множество данных и организованной по принципу «очереди» FIFO («first in first out» – «первым вошел первым вышел»).

Рис. 2. Обработка команд на конвейере с буферной памятью

Закончив обработку очередной команды ФБi записывает результат в БПi, извлекает из БПi-1 следующую инструкцию и приступает к очередному циклу ее обработки, причем эта последовательность осуществляется каждым функциональным блоком независимо от других блоков. Обработка может продолжаться до тех пор пока не ликвидируется предыдущая очередь или пока не переполнится следующая. Если емкость буферной памяти достаточно велика, различия во времени обработки не сказываются на производительности. Несмотря на это, крайне желательно, чтобы средняя длительность обработки во всех ФБi была так или иначе одинаковой, поскольку запись и извлечение содержимого ячеек буферной памяти, а также продвижение данных в очереди требует дополнительного времени и снижает эффективность конвейера.

В архитектуре ВМ можно найти множество объектов, где конвейеризация обеспечивает ощутимый прирост производительности особенно это касается конвейеризации этапов машинного цикла исполнения инструкций. По этой причине, важнейшим элементом архитектуры, который был впервые реализован в архитектуре IA‑32 микропроцессоров компании Intel, стал вычислительный конвейер – комплекс устройств процессора, реализующих такой метод обработки команд внутри микропроцессора, при котором их исполнение разбивается на несколько взаимосвязанных, но самостоятельных этапов. Первые процессоры данной архитектуры (i80386) имели пятиступенчатый конвейер, каждой ступени которого соответствовал этап продвижения команд:

• выборка инструкции (instruction fetch) – на данном этапе извлекается содержимое ячейки из кэш-памяти или из оперативной памяти, на которую указывает счетчик команд. Счетчиком команд является специальный регистр входящий в состав вычислительного ядра процессора, назначением которого является хранение адреса следующей инструкции подлежащей исполнению. Содержимое этого регистра автоматически, в ходе исполнения текущей команды увеличивается или уменьшается в соответствии с тем, по какому адресу памяти находится следующая инструкция. Процесс выборки начинается с поиска команды в соответствующей адресу строке кэш-памяти. Если строка не содержит актуальной копии блока оперативной памяти, то признается факт так называемого кэш-промаха и на адресной шине формируются циклы доступа к оперативной памяти. Следует отметить, что в процессорах последних поколений доступ к кэш-памяти и оперативной памяти осуществляется одновременно для минимизации потерь времени при возникновении кэш-промаха.

• декодирование команды (instruction decoding) – процесс преобразования извлеченного из памяти двоичного кода команды в так называемые микрооперации, которые могут быть непосредственно обработаны исполнительным устройством вычислительного ядра процессора. В ходе этого этапа исходная инструкция разбивается на набор и двух-трех кодов, которым блок микроопераций процессора приводит в соответствие действия-сигналы, которыми управляется исполнительное устройства процессорного ядра;

• генерация адресов операндов (operands address generation), при которой на основе выбранной и декодированной инструкции формируются адреса операндов в памяти. Как уже упоминалось ранее, двоичный код инструкции наряду с кодом операции содержит и указание на операнды. Операндами могут быть непосредственные данные содержащиеся в непосредственно в коде команды (непосредственная адресация), в качестве операнда может выступать один из регистров общего назначения процессора (регистровая адресация), операндом может быть адрес ячейки памяти (прямая адресация) или же наконец в качестве адреса операнда в памяти может рассматриваться содержимое регистра или другой nячейки памяти (косвенная адресация). Наряду с генерацией адресов эта стадия конвейера включает в себя и этап выборки операндов из памяти, в случает если операнд(ы) размещаются в ячейках основной памяти. Однако многие инструкции не требуют выполнения этого этапа, поскольку не имеют операндов или операнды непосредственно размещены в коде инструкции или же размещают их в регистрах;

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

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

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

Рис. 6. Наглядная модель прохождения потока инструкций по конвейеру

Микропроцессоры имеющие один конвейер, называются скалярными, а два и более суперскалярными (superscalar). Микропроцессоры 5-го и последующих поколений имеют два конвейера, то есть использует суперскалярную архитектуру, и поэтому может выполнять две команды за машинный такт. Таким образом, комбинация конвейеризации и элементов параллелизма исполнения одновременно двух потоков инструкций на двух раздельно работающих конвейерах позволяет при одной и той же тактовой частоте функционирования процессора многократно повысить (6-12 раз) вычислительную производительность.