Введение

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

Предыстория

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

Как это работает

С суперскалярным процессором окно инструкций процессора заполняется определенным количеством инструкций (известным как скорость выдачи). В зависимости от схемы, которую суперскалярный процессор использует для отправки этих инструкций из окна в исполнительное ядро ЦП, могут возникнуть проблемы, если существует зависимость, аналогичная описанной выше. Рассмотрим окно инструкций шириной 3 инструкции, содержащее i1, i2, i3 (инструкции 1, 2 и 3). Предположим, что i2 зависит от инструкции, которая еще не завершила выполнение, и ее пока нельзя выполнить. Без использования промежуточного буфера суперскалярный процессор выполнит i1, будет ждать, пока i2 сможет быть выполнена, а затем выполнит i2 и i3 одновременно. Однако при использовании промежуточного буфера окно инструкций будет опустошаться в промежуточные буферы независимо от их содержимого. Затем процессор будет искать в промежуточных буферах подходящее количество инструкций, которые могут быть выполнены параллельно (то есть без зависимостей). Таким образом, у процессора появляется больше возможностей для одновременного выполнения максимального количества инструкций и максимизации пропускной способности.