Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции ВТиИТ / 07_Увеличение быстродействия процессора

.pdf
Скачиваний:
42
Добавлен:
13.03.2016
Размер:
407.33 Кб
Скачать

Способы увеличения быстродействия процессоров Конвейерное устройство

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

1)Выборка команды из оперативной памяти

2)Декодирование команды

3)Выдача команды на исполнительные устройства

4)Установка адреса на адресной шине процессора

5)Чтение данных из выбранной ячейки оперативной памяти

6)Копирование считанных данных в заданный регистр

1

 

2

 

3

 

4

 

5

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выборка

Декоди-

Выдача

Установка

Чтение

Копирование

команды из

рование

команды

адреса

данных из

данных в

ОЗУ

команды

 

 

ОЗУ

регистр

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

При данной схеме первый результат будет получен только через промежуток времени

6

T ti , но зато каждый следующий – через ti, что дает ускорение в 6 раз. На самом

i 1

деле, конечно, такое ускорение работы недостижимо, так как у конвейера редко бывает загружены одновременно все ступени, поскольку разные команды процессора сильно различаются по времени выполнения. Так, например, если следующей командой будет инкрементирование содержимого загруженного регистра, 4, 5 и 6 стадии будут заменены одной - собственно инкрементированием, так как запись в память не требуется, и конвейер будет простаивать две стадии. Эти две стадии называются “пузырьком”, поскольку в течение этих двух стадий данные просто передаются с одной ступени на другую – получается задержка на 2 стадии. При работе на реальных задачах ускорение в 30% считается очень хорошим показателем. Но даже эти 30% были достигнуты без повышения тактовой частоты процессора (которая ограничена технологическими возможностями производства), поэтому конвейеризация широко применяется в современных микропроцессорах.

Очевидно, что скорость работы конвейера равна скорости самой медленной его стадии. Поэтому имеет смысл разбить медленные ступени конвейера дополнительно еще на несколько стадий. Процессор Intel 486 имел 5 стадий конвейера, Pentium 4 – 20 стадий,

Core 2 Duo – 14, Core i7 – 16.

Суперскалярная архитектура

Предположим, что в машинном коде программы последовательно стоят две инструкции : умножение двух регистров, содержащих числа с плавающей точкой (графические задачи) и умножение двух регистров, содержащих целочисленные значения (работа с текстом). Очевидно, что при выполнении рассмотренных команд конвейеризована может быть только малая общая часть, касающаяся чтения из регистра и записи в регистр. Операции умножения целочисленных операндов и операндов с плавающей точкой выполняются на различных функциональных устройствах, имеющими между собой мало общего. Таким образом, конвейер вынужден приостанавливаться на довольно значительное время. Если чередование подобных инструкций встречается часто, конвейер большую часть своего времени простаивает.

 

 

Целочисленный конвейер

 

 

 

 

 

 

 

Входные

 

 

 

Выходные

устройства

 

 

 

устройства

 

 

 

 

 

Конвейер с плавающей точкой

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

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

Блок перестановки команд

Пусть в программе встретилась некоторая последовательность команд :

A = B*6

C = E*12

A = A*D

C = C+1

где переменные А и С хранятся в оперативной памяти, В, D и Е – на регистрах процессора Рассмотрим последовательность действий процессора при выполнении данной последовательности команд.

1)Вычисляем значение В*6 и записываем его в регистр(3 такта) 2)Записываем значение из регистра в оперативную память(10 тактов) 3)Вычисляем значение Е*12 и записываем его в регистр(3 такта) 4)Записываем значение из регистра в оперативную память(10 тактов) 5)Загружаем переменную А из оперативной памяти в регистр(10 тактов) 6)Вычисляем значение А*D и записываем его в регистр(3 такта) 7)Записываем значение из регистра в оперативную память(10 тактов) 8)Загружаем переменную С из оперативной памяти в регистр(10 тактов) 9)Инкрементируем регистр(1 такт)

10)Записываем значение из регистра в оперативную память(10 тактов) Всего 70 тактов Теперь изменим порядок следования данных команд:

A = B*6

A = A*D

C = E*12

С = С + 1

Последовательность действий процессора при выполнении данной последовательности команд:

1)Вычисляем значение В*6 и записываем его в регистр(3 такта) 2)Вычисляем значение А*D и записываем его в регистр(3 такта) 3)Записываем значение из регистра в оперативную память(10 тактов) 4)Вычисляем значение Е*12 и записываем его в регистр(3 такта) 5)Инкрементируем регистр(1 такт)

6)Записываем значение из регистра в оперативную память(10 тактов) Всего 30 тактов

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

Размер блока, внутри которого может быть произведена перестановка команд, для Pentium 4 равен 126, при этом процессор не останавливается, а производит перестановку “на лету”

Предсказание переходов

Одной из наиболее сложных для ускорения команд является команда условного перехода. В самом деле, если мы попытаемся оптимизировать процесс вычислений, выполняя некоторые команды не в естественном порядке их извлечения из памяти, а в измененном для оптимальной загрузки конвейеров, рано или поздно мы столкнемся с командой условного перехода. Знать заранее, на какую инструкцию будет передано управление, мы не можем. Но мы можем сделать предположение об этом с той или иной вероятностью. Эта вероятность повышается, если мы будем иметь больше информации о предыдущих переходах. Эта информация хранится в BTB – branch target buffer, и с увеличением его размера повышается вероятность правильного указания адреса перехода. Кроме того, постоянно совершенствуются алгоритмы, использующие информацию BTB. В Pentium 4 вероятность правильного предсказания условного перехода достаточно велика и составляет по различным оценкам 93-95%.

Спекулятивное исполнение команд

После сделанного предположения об адресе перехода процессор может продолжать выполнение данной ветви программы. При этом мы не знаем, будет ли действительно передано управление в данном направлении или нет, но, тем не менее, продолжаем обработку данных. Это называется спекулятивным исполнением команд. Если управление на самом деле будет передано на данное направление, мы будем иметь уже готовые результаты. Если управление будет передано в другое место программы, то результаты просто уничтожаются. Неприятным последствием ошибки предсказания перехода будет образование большого “пузырька” в конвейере, который снижает производительность.

Алгоритм

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конвейер

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

C

C

IF

A

A

A

 

 

IF

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Спекулятивное

B

 

 

 

C

 

выполнение команд С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Достоинства конвейера:

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

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

Разбитие задач на более мелкие – задач и узлов становится больше, можно больше выполнять операций одновременно

Недостатки конвейера:

Возможен простой конвейера – когда встречаются последовательности операций, в которых не используются отдельные ступени конвейера

Возможно ожидание конвейера – если следующая команда использует результат предыдущей и должна дождаться выполнения предыдущей

Чем длиннее конвейер, тем больше «пузырек» из-за неправильности предсказания перехода

Параллелизм потоков данных и команд:

Одиночный поток команд, одиночный поток данных (SISD) – обычный простейший процессор

Множественный поток команд, одиночный поток данных (MISD) – процессор с конвейером

Одиночный поток команд, множественный поток данных (SIMD) – выполнение одной команды над массивами данных (MMX, SSE, SSE2...)

Множественный поток команд, множественный поток данных (MIMD) – общий случай мультипроцессорной (мультиядерной) системы

ММХ и SSE инструкции. В мультимедиа-приложениях часто встречаются вычисления, которые производят одни и те же операции (скажем, умножение на некоторую константу) над большими массивами данных. Очевидно, что эти вычисления удобнее проводить не последовательно над каждым значением, а параллельно над многими данными. Такой тип вычислений называется SIMDвычислениями (Single Instruction – Multiply Data)

Для поддержки таких вычислений в архитектуре процессоров Intel существует 2 набора команд – MMX (Multimedia Extentions) и SSE (Streaming SIMD Extentions). ММХ команды работают с целочисленными данными, хранящимися на 64-разрядных регистрах, SSE команды – с целочисленными, с плавающей точкой и упакованными данными, хранящимися на 128-битных регистрах.