Способы повышения производительности процессора
Повышение производительности вычислительной системы идет по двум направлениям. Первое – это повышение быстродействия самого процессора, второе – это повышение скорости доставки данных и команд процессору. Первое достигается за счет:
a) увеличением тактовой частоты;
b) расширение методов параллельной обработки данных;
c) совершенствование конвейеризации исполнения команд;
d) дублирование вычислительных средств процессора (переименование регистров);
e) предсказание переходов;
f) спекулятивное (опережающее) выполнение операций;
g) динамическое исполнение инструкций.
Второе достигается за счет:
a) иерархической организации памяти;
b) физического приближения буферной (кэш) памяти к вычислительному устройству процессора;
c) повышения тактовой частоты шины данных;
d) расширения разрядности шины данных;
e) совершенствование архитектуры (например, расслоение) основной памяти.
Аппаратура процессора ориентирована на естественный параллелизм вычислений целочисленных выражений и обработки данных в формате с плавающей точкой, привело к появлению процессоров с разнесенной архитектурой. Упрощенная структура такого процессора (рисунок 3.1), состоит из двух связанных подпроцессоров CPU и FPU, каждый из которых управляется собственным потоком команд.
CPU (Central Processing Unit) – предназначен для обработки целочисленных данных и управления всем вычислительным процессом. FPU (Floating Point Unit) – расширяет вычислительные возможности центрального процессора, выполняя арифметические операции над данными представленными в форме с плавающей точкой, вычисляя различные математические функции и т.д.
Всю работу по декодированию инструкций, вычислению адресов и доставке данных, осуществляет СРU. Оба процессора могут работать самостоятельно, выполняя вычисления параллельно. Разнесенная архитектура позволяет достигать при скалярной обработке производительности векторных процессоров, чему способствуют также предвыборка данных из памяти и конвейерная обработка данных в СРU.
Конвейеризация (pipelining) предполагает разбивку выполнения каждой инструкции на микрооперации. Каждая микрооперация выполняется отдельным блоком конвейера, причем этап исполнение команды выполняется отдельным конвейером, состоящим из 5÷20 ступеней, в зависимости от модели процессора. При выполнении, инструкция продвигается по конвейеру по мере освобождения последующих ступеней. Таким образом, на конвейере одновременно может обрабатываться несколько десятков последовательных инструкций, и производительность процессора можно оценивать темпом выхода выполненных инструкций со всех его конвейеров. Конвейер «классического» процессора Pentium имеет пять ступеней (рисунок 3.2) Конвейеры процессоров с суперконвейерной архитектурой (superpipelined) имеют большее число ступеней, что позволяет упростить каждую из них и, следовательно, сократить время пребывания в них инструкций.
Суперскалярный (superscalar) процессор имеет более одного (Pentium — два) конвейера, способных обрабатывать инструкции параллельно. Pentium является двухпотоковым процессором (имеет два конвейера), Pentium Pro, Pentium 4–мультипотоковые.
Рисунок 3.2 – Конвейер суперскалярнрго процессора
Переименование регистров (register renaming)
Применение этой технологии позволяет обойти архитектурное ограничение на возможность параллельного исполнения инструкций (доступно всего восемь общих регистров). Процессоры с переименованием регистров фактически имеют более восьми общих регистров, т.е. в процессоре дублируются технические ресурсы. При записи промежуточных результатов устанавливается соответствие логических имен и физических регистров.
Таким образом, одновременно могут исполняться несколько инструкций, ссылающихся на одно и то же логическое имя регистра, если, конечно, между ними нет фактических зависимостей по данным. К примеру, процессор Pentium 4 имеет 128 регистров общего назначения, которые могут иметь одинаковые логические, но разные физические имена. Процедура переименования регистров зависит от алгоритма функционирования процессора.
Продвижение данных (data forwarding) подразумевает начало исполнения инструкции до готовности всех операндов. При этом выполняются все возможные действия, и декодированная инструкция с одним операндом помещается в исполнительное устройство, где дожидается готовности второго операнда, выходящего с другого конвейера.
Предсказание переходов (branch prediction) позволяет продолжать выборку и декодирование потока инструкций после выборки инструкции ветвления (условного перехода), не дожидаясь проверки самого условия. Предсказание переходов направляет поток выборки и декодирования по одной из ветвей.
Статический метод предсказания работает считая, что переходы по одним условиям, вероятнее всего, произойдут, а по другим — нет.
Динамическое предсказание опирается на предысторию вычислительного процесса — для каждого конкретного случая перехода накапливается статистика поведения, и переход предсказывается, основываясь именно на ней.
Исполнение по предположению, называемое также спекулятивным (speculative execution), идет дальше — предсказанные после перехода инструкции не только декодируются, но и по возможности исполняются до проверки условия перехода. Если предсказание сбывается, то труд оказывается ненапрасным, если не сбывается — конвейер оказывается недогруженным и простаивает несколько тактов.
Динамическое исполнение (исполнение с изменением последовательности инструкций) свойственное RISC-архитектуре, теперь реализуется и для процессоров х86. При этом изменяется порядок внутренних манипуляций данными, а внешние (шинные) операции ввода/вывода и записи в память выполняются, конечно же, в порядке, предписанном программным кодом. Однако эта способность процессора в наибольшей степени может блокироваться несовершенством программного кода (особенно 16-битных приложений), если он генерируется без учета возможности изменения порядка.
Лекция 7
Дата добавления: 2016-02-24; просмотров: 15389;