Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / 9_Процессор-конвейер.doc
Скачиваний:
64
Добавлен:
20.03.2015
Размер:
284.67 Кб
Скачать

9.1.1. Роль кэш-памяти

Каждая ступень конвейерного выполнения команды должна завершаться за один такт. Это условие соблюдается, если такт достаточно велик. В случае, когда бло­кам конвейера для решения задач требуется разное время, такт равен времени вы­полнения самой продолжительной задачи. Блок, работа которого завершилась раньше, «бездействует» до конца такта. Поэтому конвейеризация наиболее эф­фективна в том случае, когда для решения стоящих на разных ступенях задач не­обходимо примерно одинаковое время.

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

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

9.1.2. Производительность конвейерной обработки команд

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

В силу различных причин одной из ступеней конвейерной обработки может не хватить выделенного ей диапазона времени. Например, в 4-ступенчатом кон­вейере, изображенном на рис. 9.2, б, на ступени E, которой выделен один такт, вы­полняется арифметическая или логическая операция. Для большинства опера­ций этого вполне достаточно, но некоторым, в частности делению, требуется больше времени. Рассмотрим пример, который проиллюстрирован на рис. 9.3. Для совершения операции, задаваемой командой I2, нужно три такта: от 4 до 6. Поэтому выполнение операции записи на тактах 5 и 6 откладывается — данные, которые должны быть обработаны этой командой, еще не готовы. Информация в буфере В2 должна оставаться неприкосновенной, пока не завершатся операции, производимые на ступени выполнения. Это означает, что ступень 2, а вместе с ней и ступень 1, блокируются до конца операции и не могут принимать новые ко­манды, поскольку нельзя перезаписать информацию в буфере Bl. Таким образом, как показано на рисунке, выполнение шагов D4 и F5 должно быть отложено.

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

Работа конвейера, который вы видите на рис. 9.3, приостанавливается на два такта. Его нормальное функционирование возобновляется во время такта 7 . Об­стоятельства, в силу которых приостанавливается работа конвейера, называют конфликтами.

Мы рассмотрели пример конфликта по данным. Это ситуация, ко­гда либо исходный, либо результирующий операнд команды не доступен в поло­женное время. В результате операция, которой он нужен, откладывается, а работа конвейера приостанавливается.

Еще одна причина останова конвейера может заключаться в задержке поступ­ления очередной команды. Возможная причина такой задержки — промах при по­пытке выборки команды из кэш-памяти. Конфликты этого типа называются кон­фликтами по управлению. На рис. 9.4 показано, как отсутствие команды в КЭШе отражается на работе конвейера. Команда I1 выбирается из кэша во время такта 1 и выполняется обычным образом. Далее, на такте 2, производится выборка ко­манды I2, а при обращении к кэшу происходит промах. Из-за этого работа блока выборки команд приостанавливается до получения команды I2. Мы полагаем, что команда I2 поступает и загружается в буфер Bl в конце такта 5. С этого момента возобновляется нормальная работа конвейера.

а

б

Рис. 9.4. Останов конвейера, вызванный промахом при обращении к кэшу на шаге F2:

шаги при выполнении команды на последовательных тактах (а); действия, выполняемые на ступенях конвейера во время последовательных тактов (б)

Рис. 9.4, б— это альтернативное изображение происходящего в конвейере в слу­чае промаха при обращении к кэш-памяти. Показано, какие операции выполня­ются во время каждого такта на ступенях конвейера. Обратите внимание: во вре­мя тактов 3-5 простаивает блок декодирования, во время тактов 4-6 — блок вы­полнения, а во время тактов 5-7 — блок записи. Периоды простоя иногда называют остановом, конвейера или пузырями. Образовавшись в результате задержки на од­ной ступени, пузырь спускается вниз, пока не достигнет последнего блока.

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

Пример структурного конфликта приведен на рис. 9.5. Показано, как на 4-ступенчатом конвейере выполняется команда

Load R2,X(R1)

На шаге Е2 такта 4 вычисляется адрес памяти X+[R1], по которому происхо­дит обращение к памяти на такте 5. Прочитанный из памяти операнд на такте 6 записывается в регистр R2. Это означает, что шаг выполнения этой команды за­нимает два такта (4 и 5). В результате конвейер приостанавливается на один такт, поскольку обеим командам, I2 и I3, на такте 6 требуется доступ к регистровому файлу. И хотя в наличии имеются и команды и данные, конвейер приостанавли­вается из-за того, что единственный аппаратный ресурс, регистровый файл, не способен одновременно обрабатывать две операции. Если бы у регистрового фай­ла было два входных порта, он смог бы обработать за один прием две операции за­писи, и конвейер бы не остановился. В общем случае для предотвращения струк­турных конфликтов нужно, чтобы в микросхеме процессора было достаточное количество аппаратных ресурсов.

Рис. 9.5. Воздействие команды загрузки на работу конвейера

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

Важнейшей задачей разработчиков процессоров является выявление конфлик­тов, которые могут привести к приостановке процессора, и поиск путей их устра­нения. Следующие разделы содержат подробную информацию о конфликтах раз­личных типов, а также технологиях, позволяющих снизить их отрицательное воздействие на производительность. К вопросу производительности мы вернемся в разделе 9.8.