Микроархиетктура intel Nehalem
Всем привет! Сегодня мы разбираем микроархитектуру nehalem, которая пришла на смену Yorkfield. Выходит в 4-ом квартале 2008 года. Процессоры, построенные на данной микроархитектуре выпускались на сокеты 1156 и 1366. Первые из них выпускались на 45-нм техпроцессе, а в 2010 выходит Westmere, основанный на 32-нм техпроцессе. Площадь кристалла 45 нанометровых nehalem для десктопных i7 (без видеоядра) составляла 296мм2, а количество транзисторов составило 731млн. Westmere не выпускалась для Lynnfield(кодовое название десктопных nehalem), поэтому точного сравнения не будет. Тем не менее, 6-ти ядерный Westmere на 1366 имеет площадь кристалла 248мм2. А что у нас было на Yorkfield? Там один кристалл имел площадь 107мм2. Когда говорят про четырёхядерные модели, то два кристалла просто складывают, получая всего 214мм2. Почему там два кристалла и что изменилось в nehalem? Сейчас мы об этом и поговорим
Количество ядер и кристаллов
Yorkfield является «Тиком» Penryn, так если уменьшенный техпроцесс на старой микроархитектуре. Если конкретно про Kentsfield(первый дизайн 4-ёх ядер для peryn), то площадь одного кристалла составляет 143мм2. Intel смогли в один кристалл вместить 4 ядра, а на Westerme 6 ядер. Это если мы говорим про адекватную площадь кристалла, а так есть и 10-ти ядерные модели. В nehalem добавлен встроенный в процессор контроллер памяти и новый L3 кэш общий для всех ядер. Всё это в одном кристалле. Наши core 2 quad таким похвастаться не могли.
Подход к созданию микроархитектуры Nehalem
Nehalem изначально разрабатывался модульной. Сделаем все необходимые компоненты процессора, изобразив их в виде «кирпичиков», которые будем собирать для различных версий процессоров. Раньше просто добавляли количество кристаллов. Такая структура будет намного эффективнее для всех сегментов рынка.
Выборка инструкций
Начинаем с самого начала front-end — выборка инструкций.
Сам блок выборки инструкций (Instruction Fetch) выбирает из кэша L1(через ITLB) 16 байт (кто бы мог подумать) инструкций за такт и передает их в буфер Pre Decode. L1I кэш имеет объем 32-кб и 4-ёх канальный.
L2 TLB, который предназначен только для small page, рассчитан на 512 записей. ITLB кэш рассчитан на 128 записей для small page и на 7 для large page. DTLB предназначен на 64 записи для small page и на 32 записей для large page. L2 кэш на ядро является 8-канальным и имеет объём 256кб. L1D (Data cache) имеет объём 32кб. Выборка инструкцией работает вместе с блоком предсказания ветвлений. TLB буфер выполняет адресацию виртуальных адресов страниц в физические.
Предсказание ветвлений
Блок предсказания ветвлений (BPU) прогнозирует, будет ли ветвь взята или нет. Динамическое предсказание переходов на этапе Fetch по адресу инструкции (IP) происходит обращение к BTB, если запись для адреса инструкции есть, значит загруженная инструкция –это ветвление, тогда в BTB имеется адрес перехода (target address). Используя историю ветвлений, осуществляется выбор: выполнять переход или нет. История ветвлений содержится в буфере BTB (Branch Target Buffer). После предсказания инструкции выполняются спекулятивно. В nehalem применяется двухуровневый предсказатель ветвлений. Он может обрабатывать максимум четыре инструкции вызова на 16 байтов кода. Другое улучшение характерно для Return Stack Buffer (RSB), который хранит адрес возврата функций, когда они вызываются. RSB рассчитан на 16 записей, где хранятся указатели пересылки, связанные с инструкциями вызова и возврата. В nehalem добавили систему переименования для этого буфера, чтобы избежать неправильные предсказания инструкций возврата.
Pre Decode и Instruction Queue
После всех тех действий, которые описаны выше, макроопераций отправляются в буфер PreDecode. Там происходит определение длин инструкций, их префиксов и типов. С пропускной способностью в 6 макроопераций за такт они поступают в буфер очереди макроопераций IQ. В IQ находится 18 макроопераций.
И с пропускной способностью в 5 макроопераций за такт, отправляются макрооперации на декодирование.
Декодирование
Декодеров тут 3 простых и 1 сложный. Простые декодеры декодируют по одной макрооперации в одну микрооперацию, а сложный — от одной до четырёх сложных макроопераций в одну и до четырёх микрооперации. Сложный декодер имеет специальный микрокод, используемый, когда инструкции декодируются в более, чем 4 микрооперации. Кстати nehalem поддерживает макрослиаяние, суть которого слияние двух макроопераций в одну, что увеличивает пропускную способность. Декодированные инструкции или микрооперации отправляются в Decoded Instruction Queue (DIQ). Количество микроопераций — 28. Также есть Loop Stream Detector, который работает как небольшая кэш-память, которая "замыкает" первые ступени конвейера в подобных ситуациях. В nehalem LSD подвергается улучшению. После декодирования микрооперации теперь имеют постоянную длину и регулярный формат. Далее следует распределение и переименование регистров.
Переименование регистров и распределение ресурсов
И тут мы плавно переходим на back-end часть. 4 микрооперации за такт отпраляются в Register Renaming, Resource Allocation (RRRA). Register Renaming служит для переименовывания архитектурных регистров в микроархитектурные регистры для предотвращения конфликтов данных. Resource Allocation выделят блоки в ROB и RU для поступающих микроопераций. ROB — хранит микрооперации с их состояниями в исходном порядке. RU — отслеживает, чтобы запись результатов в архитектурные регистры выполнялась в прямой последовательности. В ROB хранится 128 микроопераций. Далее следует выполнение.
Выполнение и запись результатов
36 микроопераций находятся в URS, также в URS присутствует динамический планировщик. Когда операнды микроопераций готовы, они направляются на один из портов для выполнения. Максимальное количество микроопераций за такт — 6. Портов у nehalem всего 6: Port 0, Port 1, Port 2, Port 3, Port 4, Port 5. Появилась поддержка SSE 4.2 инструкций. Из них Port 2, Port 3 и Port 4 согласются с MOB'ом и отвечают за операции, связанные с памятью. Вот объемы всех описанных буферов:
Кроме регистров(PRF) как для целочисленных, так и для операций с плавающей запятой. После всех тех операций происхдит запись результатов в память.
Некоторые нововведения
Intel в своих nehalem использовали шину QPI, конкурирующая с шиной HT 3.0. Максимальная частота такой шины — 3.2 ГГц. Имеет кэш-конгретность, последовательная. На серверных 2011 применялась двойная QPI, увеличивая её производительность. В двух направлениях пропускная способность составляет 25.6 гб/с, если частота равна 3.2ГГц. Появилось 2 AGU для адрессации. Контроллер памяти DDR3 теперь встроен в процессор и является двухканальным для десктоп, а для серверов — трехканальный. Добавили общий для всех ядер L3 кэш, вернули поддержку HyperTreading, добавили технологию turbo boost 1.0. Количество стадий конвейера: 16 стадий.
Вот такой вот наш nehalem со многими нововведениями и улучшениями.
Спасибо за внимание!
