Микроархитектура Sandy Bridge, страница 2

       Рис X.1  Иллюстрация принципа Tick-Tock развития микропроцессоров

               корпорации Intel

Опубликованный план фирма Intel выполняла неукоснительно, и в настоящем 2011 году поступили в широкую продажу микропроцессоры новой микроархитектуры Sandy Bridge на базе 32 нм технологического процесса. Считается, что ядра микропроцессоров типа Westmere являются последними представителями поколения Intel Core, а микроархитектурa Sandy Bridge является первенцем нового поколения – IntelCoreII.

В микропроцессорах архитектуры Sandy Bridge сохранился принцип «динамического исполнения команд», который провозглашен еще при разработке микропроцессоров поколения P6, усовершенствован при разработке микропроцессоров архитектур Intel Core и Nehalem и существенно расширен в микроархитектуре Sandy Bridge.

Этот принцип включает в себя три базовых концепции: предсказание переходов (Branchprediction), динамический анализ потока данных (Dynamicdataflowanalysis) и спекулятивное выполнение инструкций (‘Speculativeexecution). Эти концепции возникли и стали реализовываться в связи с внедрением в процессоры, для повышения их производительности, конвейерного принципа выполнения команд.

Предсказание переходов (ветвлений) – это концепция, которая возникла в связи с появлением конвейерного способа исполнения команд и реализуется довольно давно. В микропроцессорах Intel начиная с процессоров семейства P6, а также в RISC процессорах и даже в микроархитектуре целого ряда высокопроизводительных процессоров типа mainframe, причем с каждой новой микроархитектурой все более и более совершенствуется. Связано это с тем, что в большинстве пользовательским программ на долю условных переходов приходится от 10 % до 20 % команд и до 10 % команд безусловных переходов. И когда в потоке инструкций встречается инструкция безусловного перехода, выборка следующей инструкции может осуществиться только на той ступени конвейера, когда выбран адрес перехода. А когда встречается инструкция условного перехода, то вопрос об адресации передачи управления может быть решен только после исполнения инструкции, вырабатывающей условие перехода, т.е. только тогда, когда она достигнет по конвейеру соответствующего исполнительного блока и будет выполнена. Следовательно, если предварительный адрес передачи управления будет выбран неправильно, то все команды, которые уже находятся на различных ступенях конвейера, придется сбрасывать и на конвейер подавать новую цепочку инструкций, начиная с точки разветвления. Все это приводит к существенному снижению производительности процессора и компьютера в целом.

Поэтому прежде чем подавать инструкции на конвейер, они анализируются в так называемом специальном блоке предсказания переходов (ветвлений) (BranchPredictionUnit). Цель анализа – определить точки ветвления в исполняемом потоке инструкций и предсказать наиболее вероятные ветви (пути) по которым пойдет обработка инструкций после точек ветвления. После определения ветви, инструкции к ней относящиеся тут же ставятся в очередь на исполнение. Этим минимизируется количество сбросов конвейера, и тем самым повышается производительность процессора. Конечно, такой порядок очередности поступления потока инструкций на конвейер даст выигрыш только в том случае, если алгоритм определения наиболее вероятных ветвей исполнения программы реализуется достаточно эффективно. Если ветвь программы предсказана неверно, то процессору придется исполнять инструкции, принадлежащие как неправильно угаданной, так и истинной ветви, т.е. проделать в данном случае двойную работу. Однако современные алгоритмы предсказания переходов, как показывает практика работы на тестах SPEC,  позволяет правильно предсказывать до 98-99 % ветвлений программы.

Обычно разделяют две основных группы методов предсказания ветвлений: статические и динамические.

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

Примером статического предсказания переходов может также служить предположение, что любой прямой переход, т.е. переход на более старшие адреса, не выполняется, а переход обратный, т.е. на более младшие адреса – выполняется всегда. Вероятность справедливости такого утверждения довольно высока и основывается на том, что переход на более младшие адреса характерен при организации циклов, которые в программах встречаются довольно часто. Действительно, проведенные исследования показывают, что переходы назад обычно соответствуют циклу и выполняются в 90 % случаев, а переходы вперед большей частью соответствуют ветвлению и выполняются в 50 % случаев.

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

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

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

·  Предсказать, является ли только что выбранная команда командой ветвления;

·  Предсказать, будет ли переход или нет;

·  Предсказать адрес перехода.