Энергия и энергетика сегодня

Процессоры семейства Intel

Алгоритм, отвечающий за планирование выполнения микрокоманд, является крайне важным для производительности процессора в целом.

Если в каждом такте для каждого ресурса готова к выполнению только одна микрокоманда, то проблемы выбора не возникает. Но если готовых к выполнению на данном ресурсе микрокоманд несколько, то какую из них выбрать? Можно доверить выбор случаю. Можно применить алгоритм "первый пришел - первый обслужен". Идеальным был бы выбор микрокоманды, выполнение которой привело бы к максимальному сокращению графа потоков данных выполняемой программы. Однако поскольку нет возможности определить такую микрокоманду в ходе выполнения программы, используется алгоритм планирования, имитирующий модель "первый пришел - первый обслужен", предпочитая смежное выполнение смежных микрокоманд.

Поскольку система команд Intel содержит множество команд перехода, многие микрокоманды также являются переходами. Алгоритм, реализованный в буфере переходов, позволяет в большинстве случаев правильно предсказать, состоится или не состоится переход, но иногда он все же будет ошибаться. Рассмотрим для примера случай, когда буфер переходов предсказывает переход назад в конце цикла: до тех пор, пока условие выхода из цикла не выполняется, переход будет предсказываться верно, однако когда это условие станет истинным, предсказание будет ошибочным.

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

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

Устройство отката также проверяет статус микрокоманд в пуле команд: оно ищет микрокоманды, которые уже выполнены и могут быть удалены из пула. Именно при удалении микрокоманды результаты ее выполнения, хранящиеся в пуле команд, реально изменяют состояние вычислительной системы, например, происходит запись в регистры.

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

Процесс отката занимает два такта. В первом такте устройство отката считывает пул команд и отыскивает готовые к откату микрокоманды; затем оно определяет, какие из этих микрокоманд могут быть удалены из пула в соответствии с исходным порядком команд в программе. Во втором такте результаты отката записываются в пул команд и в регистровый файл отката. Устройство отката может обработать три микрокоманды за такт.

Интерфейс шины

Структура интерфейса шины изображена на рисунке 6.

Есть два типа обращений к памяти: чтение из памяти в регистр и запись из регистра в память.

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

При записи надо задать адрес памяти, размер блока записываемых данных и сами данные. Поэтому команда записи кодируется двумя микрокомандами: первая генерирует адрес, вторая готовит данные.

Эти микрокоманды планируются независимо и могут выполняться параллельно; они могут переупорядочиваться в буфере записи.

Запись в память никогда не выполняется опережающим образом, так как нет эффективного способа организации отката в случае неверного предсказания. Разные команды записи никогда не переупорядочиваются друг относительно друга. Буфер записи инициирует запись, только когда сформированы и адрес, и данные, и нет ожидающих выполнения более ранних команд записи.

При изучении вопроса о возможности и целесообразности переупорядочения доступа к памяти инженеры "Intel" пришли к следующим выводам.

Команда записи не должна обгонять идущую впереди команду записи, так как это может лишь незначительно увеличить производительность.

Можно запретить командам записи обгонять команды чтения из памяти, так как это приведет лишь к незначительной потере производительности.

Запрет командам чтения обгонять другие команды чтения или команды записи может повлечь существенные потери в производительности.

Перейти на страницу: 1 2 3 4 5 6 7 8 9 10

Back to Top