Организация процессоров
Даже при условии некоторого увеличения времени выполнения одной команды (небольшое снижение быстродействия) производительность при полном заполнении конвейера будет близка к величине 1/Tк, где Tк – такт конвейера, в данном случае – время выполнения одного этапа. Это позволило бы сразу увеличить производительность процессора в 5 раз ! Однако на практике добиться этого оказывается сложно. И препятствуют этому так называемые конфликты при конвейеризации.
Конфликтом при конвейеризации команд называют ситуацию, которая препятствует выполнению очередной команды из потока команд в предназначенном для нее такте.
Конфликты делятся на три основные группы:
1. Структурные или ресурсные.
Возникают в результате того, что аппаратные средства не могут поддерживать все комбинации команд в режиме их одновременного выполнения с совмещением на конвейере. Это происходит в случае, если какие-то устройства в процессоре не конвейеризованы, либо – присутствуют в единственном экземпляре (не распараллелены). Например, могут возникать конфликты при обращении к общей КЭШ-памяти: одну команду необходимо извлечь из памяти (на первом этапе выполнения), а другая пытается записать результат в память на заключительном этапе. Для борьбы с ресурсными конфликтами в основном применяют три способа:
- приостановка конвейера (pipeline stall, pipeline “bubble” – конвейерный “пузырь”) до разрешения конфликта (до завершения первой конфликтующей команды);
- дублирование аппаратных средств, вызывающих конфликт, например, разделение КЭШ-памяти на КЭШ команд и КЭШ данных;
- ускорение или конвейеризация проблемного устройства, что позволяет снизить затраты времени на приостановку.
Решение об увеличении аппаратных затрат в последних двух случаях принимают, если конфликт возникает часто, так как дополнительные затраты могут быть существеннее, чем потери производительности от приостановки конвейера, если она происходит редко.
2. Конфликты программные или информационные. Делятся на две подгруппы:
а) конфликты по данным, возникающие в случае, если выполнение следующей команды зависит от результата предыдущей.
|