- •8. Процессор
- •8.1. Базовые концепции
- •Ir← [[pc]]
- •8.2. Пересылка данных между регистрами
- •8.3. Выполнение арифметической или логической операции
- •8.4. Выборка слова из памяти
- •8.5. Сохранение слова в памяти
- •9. Конвейерная обработка команд
- •9.1. Базовые концепции
- •9.1.1. Роль кэш-памяти
- •9.1.2. Производительность конвейерной обработки команд
- •9.2. Очередь команд и упреждающая выборка
- •9.3. Конвейерная обработка и система команд
- •9.3.1. Режимы адресации
- •9.3.2. Коды условий
- •9.4. Тракты данных и управление
8.5. Сохранение слова в памяти
Запись слова по заданному адресу памяти производится похожим образом. Адрес загружается в регистр MAR. Затем данные, подлежащие записи в память, загружаются в MDR и выдается команда записи. Команда Move (R1),R2 выполняется так:
1. R1out, MARin.
2. R2out, MDRin, Write.
3. MDRout, WMFC.
Как и в случае операции чтения, управляющий сигнал записи указывает интерфейсной схеме шины памяти на необходимость поместить на шину команду Write. Процессор задерживается на шаге 3 до тех пор, пока не будет получен ответ MFC, означающий, что операция с памятью завершена.
9. Конвейерная обработка команд
В предыдущих разделах[ вы познакомились с основными компонентами компьютера. Настоящий раздел посвящен конвейерной обработке команд, цель которой — повышение производительности современных компьютеров. В первую очередь рассматриваются основные принципы конвейерной обработки и ее влияние на производительность компьютера. После этого дается обзор машинных команд, предназначенных для поддержки данного процесса. Мы проследим, как отражается на производительности выбор той или иной команды, а также последовательность их активизации. Для поддержки конвейерной обработки используются сложные технологии компиляции и так называемые оптимизирующие компиляторы. Наряду с решением других задач эти компиляторы реорганизуют последовательность выполняемых программой операций с целью максимального повышения эффективности конвейерной обработки.
9.1. Базовые концепции
Скорость выполнения программ зависит от многих факторов. Одним из способов ее повышения является внедрение передовых технологий при проектировании и изготовлении процессоров и модулей основной памяти. Эти технологии могут быть направлены как на повышение быстродействия функциональных устройств, так и на совершенствование их архитектуры с целью увеличения количества параллельно выполняемых операций. Итак, второй метод предполагает увеличение количества операций, выполняемых за одну секунду, при этом время, отводимое одной операции, остается неизменным.
В предыдущих разделах неоднократно затрагивалась тема параллельного выполнения различных операций. В разделе 3.4. была представлена концепция мультипрограммирования, и объяснялось, как обмен данными с устройствами ввода-вывода может выполняться одновременно с вычислительными операциями. Отметим, что это возможно благодаря устройствам, поддерживающим технологию Прямого Доступа к Памяти (ПДП), поскольку после того как процессор инициирует операцию ввода-вывода, такое устройство сможет продолжить ее осуществление самостоятельно.
Особенно эффективным способом организации параллельных операций в компьютерной системе является конвейерная обработка команд. Ее основная идея очень проста. Понятие конвейера нам хорошо знакомо из жизни — это сборочная линия на фабрике или заводе, на которой последовательно выполняется ряд манипуляций. Представим, как, например, собирается автомобиль. Предположим, на первом рабочем месте сборочной линии изготавливается шасси, на втором добавляется корпус, на третьем устанавливается мотор и т. д. Пока первая группа рабочих монтирует мотор одной из машин, вторая закрепляет корпус другой машины, а третья готовит новое шасси для еще одной машины. Работа над каждой машиной может продолжаться несколько дней, но при этом каждые несколько минут с конвейера сходит готовый автомобиль.
Теперь давайте посмотрим, каким образом эта идея воплощена в компьютерном мире. Процессор выполняет программу, по очереди выбирая из памяти и активизируя ее команды. Обозначим шаги выборки и выполнения команды Ii, как Fi, и Ei. Процесс выполнения программы представляет собой последовательность шагов выборки и активизации команд, как показано на рис. 9.1, а.
Теперь рассмотрим компьютер с двумя отдельными функциональными блоками — для выборки команд и для их выполнения (рис. 9.1, б). Команда извлекается из памяти устройством выборки и помещается в промежуточный буфер Bl, который нужен для того, чтобы блок выполнения мог обрабатывать команду в то время, как блок выборки уже берет из памяти следующую. Результаты выполнения команды размещаются по указанному в ней адресу. Мы предполагаем, что источник и приемник данных находятся в блоке, помеченном как «Блок выполнения».
Этот компьютер управляется тактовым сигналом с такой частотой, при которой и шаг выборки, и шаг выполнения занимают один такт. Схематически процесс работы компьютера представлен на рис. 9.1, в. Во время первого такта блок выборки извлекает из памяти команду I1 (шаг F1) и сохраняет ее в буфере Bl. На втором такте блок выборки берет из памяти команду I2 (шаг F2). Тем временем блок выполнения осуществляет операцию, указанную в команде I1, которую он считывает из буфера Bl (шаг E1). По окончании второго такта обработка команды I1 завершается, к этому моменту из памяти уже считывается команда I2. Теперь в буфере Bl сохраняется команда I2, заменяя команду I1, которая больше не нужна. Шаг E2 производится блоком выполнения в течение третьего такта, пока команда I3 извлекается из памяти блоком выборки. И так далее. В результате и блок выборки и блок выполнения команд все время заняты, а скорость команд вдвое больше, чем при последовательной обработке, которая схематически показана на рис. 9.1, а. Блоки выборки и выполнения команд, показанные на рис. 9.1, б, составляют двухступенчатый конвейер, на каждой ступени которого совершается один шаг обработки команды. Для хранения информации, передаваемой с одной ступени обработки команды на другую, применяется промежуточный буфер Bl. В конце каждого такта в этот буфер загружается новая информация.
а
б
в
Рис. 9.1. Принцип конвейерной обработки команд: последовательное выполнение (а);
аппаратная организация (б); конвейерная обработка команд (в)
Процесс обработки команды может быть разбит на количество шагов, превышающее два. Например, конвейерный процессор способен обрабатывать команды за четыре шага. Рассмотрим их.
F: Выборка (Fetch) — чтение команды из памяти.
D: Декодирование (Decode) — декодирование команды и выборка ее исходных операндов.
E: Выполнение (Execute) — выполнение заданной в команде операции.
W: Запись (Write) — сохранение результата по целевому адресу.
В какой последовательности происходят события при такой схеме обработки команды, показано на рис. 9.2, а. В каждый момент процессор обрабатывает четыре команды. Это означает, что он содержит четыре отдельных функциональных блока (рис. 9.2, б).
Блоки должны решать свои задачи параллельно, не мешая друг другу. Информация передается от одного блока к другому через промежуточный буфер. По мере обработки команды конвейером в промежуточные буферы должна поступать вся необходимая для очередной ступени информация. Вот какую информацию должен содержать буфер для четвертого такта.
Буфер Bl: команда I3, выбранная на такте 3 и обработанная блоком декодирования команды.
Буфер В2: исходные операнды команды I2 и спецификация выполняемой операции. Эта информация сформирована схемами дешифратора на такте 3. Буфер В2 включает также информацию, необходимую для шага W2, на котором осуществляется запись команды I2. Хотя она не нужна на ступени выполнения, на следующем такте она передается на ступень записи для осуществления соответствующей операции.
Буфер ВЗ: результаты, которые сгенерированы блоком выполнения команды, и информация о месте назначения данных команды I1.
а
б
Рис. 9.2. Структура 4-ступенчатого конвейера: выполнение команды за 4 шага (а);
аппаратная организация (б)