Полочный буфер
Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Октябрь 2019 г. ) |
Полочный буфер — это метод, используемый в компьютерных процессорах для повышения эффективности суперскалярных процессоров. Он позволяет отправлять несколько инструкций одновременно независимо от зависимостей данных между этими инструкциями. Это позволяет выполнять внеочередное выполнение , что увеличивает пропускную способность микропроцессора.
Фон
[ редактировать ]Суперскалярный процессор позволяет одновременно выполнять несколько инструкций в ядре самого процессора, хотя такое поведение не следует путать с многопроцессорной системой. Большинство современных процессоров являются суперскалярными. В суперскалярном процессоре несколько инструкций выполняются из одного потока. Многоядерные процессоры содержат несколько процессоров, выполняющих отдельные потоки.
Проблемы с зависимостями данных
[ редактировать ]Выполнение инструкций параллельно (т.е. одновременно) вызывает проблемы с зависимостями данных, а это означает, что некоторые инструкции могут зависеть от результатов других, и, следовательно, необходимо соблюдать осторожность, чтобы выполняться в правильном порядке.
Возьмем, к примеру, следующую последовательность инструкций:
г1 = г2 + г3
г7 = г1 + г4
Обновление r7 вводит зависимость данных (чтение после записи) . Первая строка инструкций должна завершиться до начала выполнения второй, поскольку r7 требует, чтобы перед выполнением было известно правильное значение r1 (регистр 1). Команды этого типа не могут выполняться одновременно или одновременно, порядок операций неявно последовательный.
Как это работает
[ редактировать ]В суперскалярном процессоре окно инструкций процессора заполняется определенным количеством инструкций (так называемая скорость выдачи). В зависимости от схемы, которую суперскалярный процессор использует для отправки этих инструкций из окна в исполнительное ядро ЦП, могут возникнуть проблемы, если существует зависимость, мало чем отличающаяся от показанной выше.
Рассмотрим окно инструкций шириной в 3 инструкции, содержащее i1, i2, i3 (инструкции 1, 2 и 3). Предположим, что i2 зависит от инструкции, которая еще не завершила выполнение и еще не может быть выполнена.
Без использования полочного буфера суперскалярный процессор выполнит i1, подождет, пока можно будет выполнить i2, а затем выполнит i2 и i3 одновременно.
Однако при использовании полочного буфера окно инструкций будет очищено в полочные буферы независимо от содержимого. Затем процессор будет искать подходящее количество инструкций в полочных буферах, которые могут выполняться параллельно (т. е. без каких-либо зависимостей).
Следовательно, процессор имеет больше шансов одновременно выполнить максимальное количество инструкций и максимизировать пропускную способность.
Ссылки
[ редактировать ]- Дезсо Сима, Дизайнерское пространство стеллажей (PDF) , заархивировано из оригинала (PDF) 28 сентября 2013 г.