Буфер для стеллажей - Shelving buffer

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

Фон

А суперскалярный процессор позволяет одновременно выполнять несколько инструкций в ядре самого процессора, хотя такое поведение не следует путать с многопроцессорной системой. Большинство современных процессоров суперскалярны. В суперскалярном процессоре несколько инструкций отправляются из одного потока. Многоядерные процессоры содержат несколько процессоров, каждый из которых выполняет отдельные потоки.

Проблемы с зависимостями данных

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

Возьмем, к примеру, такую ​​последовательность инструкций:

г1 = г2 + г3
г7 = г1 + г4

Обновление до r7 представляет (чтение после записи) зависимость данных. Первая строка инструкций должна быть завершена до того, как начнется выполнение второй, так как r7 требует, чтобы правильное значение r1 (регистр 1) было известно до выполнения. Этот тип инструкций не может выполняться одновременно или одновременно, порядок операций неявно является последовательным.

Как это устроено

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

Рассмотрим окно инструкций шириной 3 инструкции, содержащее i1, i2, i3 (инструкции 1,2 и 3). Предположим, что i2 зависит от инструкции, выполнение которой еще не завершено, и еще не может быть выполнено.

Без использования полочного буфера суперскалярный процессор выполнит i1, дождется выполнения i2 и затем выполнит i2 и i3 одновременно.

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

Следовательно, у процессора больше шансов выполнить максимальное количество инструкций одновременно и максимизировать пропускную способность.

Рекомендации

  • Дезо Сима, Дизайн пространства стеллажа (PDF), заархивировано из оригинал (PDF) в 2013-09-28