Процессорная микроархитектура Intel следующего поколения
Ядро процессора на базе микроархитектуры Nehalem
Вычислительное ядро процессора на базе микроархитектуры Intel Core
Отличия микроархитектуры Nehalem от Intel Core
Технология Hyper-Тhreading в микроархитектуре Nehalem
Иерархия кэш-памяти в микроархитектуре Nehalem
О новой процессорной микроархитектуре Nehalem говорят уже не первый год. И в преддверии начала массового производства процессоров нового поколения, которое запланировано на конец текущего года, появляется все больше и больше подробностей относительно микроархитектуры Nehalem. В данной статье мы постараемся свести воедино все официальные сведения о новой микроархитектуре, известные на данный момент, а также расскажем об особенностях процессоров Intel и платформ следующего поколения.
Общие сведения
Как известно, в конце текущего года компания Intel собирается приступить к массовому выпуску процессоров на базе микроархитетуры Nehalem (процессоры Nehalem) для сегмента высокопроизводительных настольных ПК и двухпроцессорных серверных систем. Для других сегментов рынка названные процессоры будут представлены в 2009 году. Процессоры Nehalem будут выпускаться в двух-, четырех- и восьмиядерном вариантах.
Сначала компания Intel выпустит четырехъядерный процессор с кодовым названием Bloomfield. Этот процессор, ориентированный на высокопроизводительные компьютеры, будет изготавливаться по 45-нанометровой технологии, а его TDP составит 130 Вт. Процессор Bloomfield будет иметь разъем LGA 1366, то есть у него будет уже 1366 контактов. Размер упаковки процессора составит 42,5x45 мм (упаковки процессора с разъемом LGA 775 — 37,5x37,5 мм). Конструктивно процессор Bloomfield будет представлять собой четыре ядра на одном кристалле, то есть будет истинно четырехъядерным. Заметим, что процессор Bloomfield будет включать 731 млн транзисторов.
Вслед за процессором Bloomfield в 2009 году появятся четырехъядерный процессор Lynnfield и двухъядерный процессор Havendale. Они будут ориентированы уже на сегмент массовых ПК и оснащены разъемом LGA 1160. Таким образом, процессоры нового поколения будут снабжены двумя вариантами разъемов, что, конечно же, создаст определенные неудобства для пользователей. Отличительной особенностью процессоров Nehalem станет наличие в них интегрированного контроллера памяти DDR3, поэтому с памятью DDR2 новые процессоры будут уже несовместимы. Причем в процессоре Bloomfield будет установлен уже трехканальный контроллер памяти (Integrated Memory Controller, IMC) DDR3. Попутно заметим, что интегрированный контроллер памяти будет поддерживать память DDR3-800/1066/1333 и применение до двух DIMM-слотов на каждый канал. По некоторым данным (правда, официального подтверждения на этот счет нет), процессоры Lynnfield и Havendale будут оснащены двухканальным контроллером памяти.
Следующая особенность процессоров Nehalem заключается в том, что на кристалле процессора расположен разделяемый между всеми ядрами кэш L3. Для процессора Bloomfield размер кэша L3 составит 8 Мбайт. Отметим, что в некоторых моделях процессоров Nehalem (предположительно в процессорах для ноутбуков) кэш L3 может отсутствовать.
Напомним, что в процессорах с архитектурой Intel Core используется разделяемый между всеми ядрами кэш L2. В процессорах с архитектурой Nehalem кэш L2 не является разделяемым и находится в эксклюзивном применении каждого ядра процессора, но зато появился разделяемый кэш L3.
В процессоре Bloomfield каждому ядру процессора отводится кэш L2 размером 256 Кбайт.
Еще одна особенность процессоров на базе микроархитектуры Nehalem заключается в том, что вместо шины FSB, которая ранее использовалась для связи процессора с чипсетом, теперь применяется принципиально иной интерфейс, называемый Intel QuickPath Interconnect (QPI). Эта новая шина увеличивает скорость передачи данных в 4-8 раз в сравнении с шиной FSB. Естественно, на кристалле процессора также располагается контроллер шины QPI.
Шина QPI используется для связи процессора с чипсетом и для связи процессоров друг с другом (в случае многопроцессорных конфигураций). QPI является последовательной, высокоскоростной двунаправленной шиной. Ее ширина в каждую сторону (передача и прием) составляет по 20 бит (20 отдельных пар линий), при этом 16 бит отводится для передачи данных, две линии зарезервированы для передачи служебных сигналов и еще две — для передачи кодов коррекции ошибок CRC. C учетом еще двух пар линий, применяемых для синхронизации сигналов (одна на прием и одна на передачу), получаем, что шина QPI состоит из 42 пар линий, то есть является 84-контактной. Пропускная способность шины QPI составляет 25,6 Гбайт/с, хотя такая единица измерения, как гигабайт в секунду (Гбайт/с), более не будет использоваться для характеристики QPI-шины. Вместо этого будет применяться термин «трансферы в секунду», то есть количество передач запакетированных данных по шине в секунду.
Вообще, нужно отметить, что архитектура процессора Nehalem подразумевает модульную двухуровневую структуру (рис. 1). На одном уровне (уровень Core Logic) располагаются ядра процессора, количество которых, как уже отмечалось, может варьироваться от двух до восьми. На другом уровне (уровень Uncore Logic) находятся такие компоненты процессора, как L3-кэш, контроллер памяти и интерфейсы QPI. Причем компоненты уровня Core Logic, то есть ядра процессора, и компоненты уровня Uncore Logic электрически и по частоте независимы друг от друга. Это означает, что компоненты уровня Uncore Logic не синхронизованы по частоте с ядрами процессора, то есть кэш L3 будет работать на частоте, отличающейся от частоты работы ядер процессора и соответственно кэшей L1 и L2. Пока частоту работы элементов Ucore Logic компания Intel держит в секрете. Известно лишь, что все компоненты уровня Uncore Logic (контроллер памяти, кэш L3 и шина QPI) будут работать на одной частоте. Тут нужно подчеркнуть, что частота работы контроллера памяти и частота работы памяти — это не одно и то же, хотя они и взаимосвязаны, а зная, что QPI процессора имеет характеристику, к примеру, 6,4 Гтрансфера/с, нельзя сказать, какова при этом частота работы шины QPI. Пока что известно лишь то, что максимальная частота работы компонентов Uncore Logic составит 2,8 ГГц, а максимальная частота ядер процессора — 3,2 ГГц.
Рис. 1. Двухуровневая структура процессора Nehalem
При этом ожидается, что пользователю будет предоставлена возможность через настройки BIOS разгонять по частоте элементы Uncore Logic, но разгон будет производиться синхронно для всех элементов уровня. Также это означает, что каждый процессор будет ориентирован на использование только одного типа памяти. То есть если процессор поддерживает память DDR3-1066, то с ним, в принципе, можно будет использовать и менее скоростную память, но в этом случае понизится частота и всех остальных компонентов уровня Uncore Logic. К примеру, будут существовать варианты процессоров Bloomfield с QPI 6,4; 4,8 и 3,2 Гтрансфер/с. Процессор с QPI 6,4 Гтрансфер/с будет поддерживать память DDR3-1333, процессор с QPI 4,8 Гтрансфер/с — память DDR3-1066, ну а процессор с QPI 3,2 Гтрансфер/с — память DDR3-800. Вот такой «зоопарк» получится.
Кроме того, в некоторые модели процессоров Nehalem также будет интегрироваться графический контроллер, который ранее, так же как и контроллер памяти, встраивался в северный мост чипсета. Причем в новые процессоры будет интегрироваться тот самый графический контроллер, который имеется сегодня у Intel. Естественно, название у графического контроллера будет другое, но никаких конструктивных изменений в его архитектуре пока не произойдет. Правда, нужно иметь в виду, что если ранее графический контроллер был составной частью северного моста чипсета и выполнялся (как и сам чипсет) по 90-нм техпроцессу, то теперь он станет составной частью процессора и, как и сам процессор, будет выполняться по 45-нм техпроцессу. По всей видимости, это позволит увеличить тактовую частоту графического ядра, а следовательно, и производительность интегрированной графики. Однако официально подтвержденных данных на этот счет пока нет.
Но и это еще не всё. Процессоры Nehalem будут поддерживать технологию многопоточной обработки Simultaneous Multi-Threading, которая известна под названием Hyper-Threading. Напомним, что данная технология использовалась еще в процессорах Intel Pentium 4 с микроархитектурой NetBurst, однако в процессорах c микроархитектурой Intel Core она отсутствовала. С учетом технологии Hyper-Threading операционная система будет позиционировать двухъядерный процессор Nehalem как четыре отдельных логических процессора или ядра, а четырехъядерный — как восемь отдельных логических процессоров.
В процессорах на базе микроархитектуры Nehalem повышена эффективность выполнения команд по сравнению с процессорами на базе микроархитектуры предыдущего поколения, что позволяет выполнять вычисления без избыточной конвейерной обработки данных.
В микроархитектуре Nehalem реализован набор инструкций SSE4.2 для увеличения скорости обработки мультимедийных и веб-приложений.
Все компоненты новой микроархитектуры Nehalem разрабатывались с учетом эффективности энергопотребления. Новые функции и технологии внедрялись только в том случае, если увеличение производительности более 1% достигалось ростом потребляемой энергии менее чем на 1%. То есть в процессорах Nehalem реализованы только энергоэффективные функции.
Ну и еще одна инновационная особенность новой микроархитектуры Nehalem заключается в новом подходе к управлению питанием.
Сегодня увеличение числа ядер процессора не приводит к возрастанию эффективности работы приложений, которые не поддерживают обработку нескольких потоков. В данном случае страдает и энергоэффективность, поскольку при выполнении однопоточных приложений применяется только одно ядро многоядерного процессора, а незадействованные ядра «греются» впустую.
Микроархитектура Nehalem предусматривает инновационную систему управления питанием и тактовой частотой загруженных и простаивающих ядер, которая позволит в значительной степени сократить расход энергии незадействованными в обработке приложений ядрами, обеспечивая тем самым низкий уровень энергопотребления процессора. Кроме того, подобная система управления питанием позволяет повысить эффективность работы операционной системы и приложений.
Ядро процессора на базе микроархитектуры Nehalem
Рассмотрев в общих чертах особенности новой микроархитектуры Nehalem и процессора Bloomfield, давайте более детально ознакомимся с особенностями ядра процессора на базе микроархитектуры Nehalem.
Новая микроархитектура Nehalem пор сути является развитием микроархитектуры Intel Core, то есть это своего рода улучшенный вариант микроархитектуры Intel Core. Дабы разобраться с тем, какие улучшения были сделаны в микроархитектуре Nehalem в сравнении с архитектурой Intel Core, напомним принцип работы вычислительного ядра процессора на базе микроархитектуры Intel Core.
Вычислительное ядро процессора на базе микроархитектуры Intel Core
При работе ядра процессора на базе микроархитектуры Intel Core инструкции x86 выбираются из кэша инструкций L1 (Instruction Сache) размером 32 Кбайт (рис. 2). Команды загружают из кэша блоками фиксированной длины, из которых выделяются инструкции, направляемые на декодирование. Поскольку инструкции x86 имеют переменную длину, а у блоков, которыми команды загружаются из кэша, фиксированная длина, при декодировании команд нужно определить границы между отдельными командами.
Рис. 2. Структурная схема ядра процессора
на базе микроархитектуры Intel Core и Nehalem
Информация о размерах команд хранится в кэше инструкций L1 в специальных полях (по 3 бита информации на каждый байт инструкций). В принципе, эту информацию для определения границ команд можно было бы использовать в самом декодере непосредственно в процессе декодирования команд. Однако это неизбежно отразилось бы на скорости декодирования, при этом нельзя было бы декодировать одновременно несколько команд. Поэтому перед декодированием производится выделение команд из выбранного блока. Данная процедура называется предварительным декодированием (PreDecode). Процедура предварительного декодирования позволяет поддерживать постоянный темп декодирования независимо от длины и структуры команд.
Процессоры с архитектурой Intel Core производят выборку команд 16-байтными блоками, то есть за каждый такт из кэша загружается 16-байтный блок команд.
Говоря о процедуре выборки программных инструкций в микроархитектуре Intel Core, необходимо также отметить наличие блока обнаружения программных циклов (Loop Stream Detector), который принимает непосредственное участие в процессе выборки инструкций. В любом программном коде практически всегда присутствуют программные циклы. Во избежание повторов в выполнении операций (предсказания ветвлений, выборки) в процессорах с архитектурой Intel Core используется технология обнаружения циклов (Loop Stream Detector). В архитектуре Intel Core применяется буфер Loop Stream Detector на 18 инструкций, причем сам буфер располагается до декодера. То есть в архитектуре Intel Core могут отслеживаться и распознаваться только циклы, содержащие не более 18 инструкций. При обнаружении программного цикла инструкции в цикле пропускают фазы выборки (Fetch) и предсказания ветвлений в программе (Branch Prediction), а сами команды генерируются и поступают в декодер непосредственно из Loop Stream Detector (рис. 3). С одной стороны, это позволяет снизить энергопотребление ядра процессора, а с другой — обойти фазу выборки команд. Если в цикле насчитывается более 18 инструкций, то инструкции каждый раз будут проходить все стандартные шаги.
Рис. 3. Расположение модуля Loop Stream Detector
в процессоре с микроархитектурой Intel Core
После операции выборки команды организуются в очередь (Instruction Queue), а затем передаются в декодер. При декодировании (Decode) команды преобразуются в машинные микрооперации (micro-op).
Декодер ядра процессора с архитектурой Intel Core является четырехканальным и может декодировать в каждом такте до четырех инструкций x86. За каждый такт из кэша загружается 16-байтный блок команд, из которого в процессе предварительного декодирования выделяются отдельные команды. В принципе, длина одной команды может достигать 16 байт, однако средняя длина команд составляет 4 байта. Поэтому в среднем в каждом блоке загружаются четыре команды, которые в случае применения четырехканального декодера одновременно декодируются за один такт.
Четырехканальный декодер состоит из трех простых декодеров, декодирующих простые инструкции в одну микрооперацию, и одного сложного, способного декодировать одну инструкцию в четыре микрооперации (декодер типа 4-1-1-1). Для еще более сложных инструкций, которые декодируются более чем в четыре микрооперации, сложный декодер соединен с блоком uCode Sequenser, используемым для декодирования подобных инструкций.
Естественно, что декодирование четырех инструкций за такт возможно только в том случае, если в одном 16-байтном блоке содержится не менее четырех инструкций. Однако существуют команды и длиннее 4 байт, и в случае загрузки нескольких таких команд в одном блоке эффективность декодирования снижается.
При декодировании инструкций в микроархитектуре Intel Core применяется технология MacroFusion, смысл которой заключается в слиянии двух x86-инструкций в одну. В предыдущих версиях процессорной микроархитектуры каждая инструкция в формате x86 декодировалась независимо от остальных. При использовании технологии MacroFusion некоторые пары инструкций (например, инструкция сравнения и условного перехода) при декодировании могут быть слиты в одну микроинструкцию (micro-op), которая в дальнейшем будет выполняться именно как одна микроинструкция. Отметим, что для эффективного поддержания технологии MacroFusion в архитектуре Intel Core применялись расширенные блоки ALU (Arithmetical Logic Unit), способные поддержать выполнение слитых микроинструкций. Отметим также, что без технологии MacroFusion за каждый такт процессора могло декодироваться только четыре инструкции (в четырехканальном декодере), при наличии технологии MacroFusion в каждом такте могло считываться пять инструкций, которые за счет слияния преобразуются в четыре и подвергаются декодированию.
Кроме того, на стадии декодирования в микроархитектуре Intel Core также реализована технология слияния микроопераций micro-ops fusion, которая заключается в том, что в ряде случаев две микрооперации сливаются в одну, содержащую два элементарных действия. В дальнейшем две такие слитые микрооперации обрабатываются как одна, что в результате позволяет снизить количество обрабатываемых микроопераций и тем самым увеличить общее число исполняемых процессором инструкций за один такт.
После процесса декодирования инструкций x86 начинается этап их исполнения. Первоначально происходит переименование и распределение дополнительных регистров процессора (Allocate & Rename), которые не определены архитектурой набора команд. Переименование регистров позволяет добиться исполнения команд вне очереди. Идея переименования регистров заключается в следующем. В архитектуре x86 количество регистров общего назначения сравнительно невелико: доступно восемь регистров в 32-битном режиме, и 16 — в 64-битном. Представим, что исполняемая команда дожидается загрузки значений операндов в регистр из памяти. Это долгая операция, и хорошо бы на это время разрешить использовать этот регистр для другой команды, операнды которой находятся ближе (например, в кэше первого уровня). Для этого временно переименовывается «ждущий» регистр и отслеживается история переименования. А «готовому к работе» регистру присваивается стандартное имя, чтобы снабженную операндами команду исполнить прямо сейчас. Когда придут данные из памяти, обращаются к истории переименования и возвращают изначальному регистру его законное имя. Иными словами, техника переименования регистров позволяет сократить простои, а ведение истории переименования применяется для нивелирования конфликтов.
На следующем этапе (буфер переупорядочения (ReOrder Buffer)) происходит переупорядочение микроопераций не в порядке их поступления (Out-of-Order) с тем, чтобы впоследствии можно было реализовать их более эффективное выполнение на исполнительных блоках. Отметим, что буфер переупорядочения ReOrder Buffer и блок отставки (Retirement Unit) совмещены в едином блоке процессора, но первоначально производится переупорядочение инструкций, а блок Retirement Unit включается в работу позже, когда надо выдать исполненные инструкции в заданном программой порядке.
Далее происходит распределение микроопераций по исполнительным блокам. В блоке процессора Reservation Station формирует очереди микроопераций, в результате чего микрооперации попадают на один из портов функциональных устройств (dispatch ports). Этот процесс называется диспетчеризацией (Dispatch), а сами порты выполняют функцию шлюза к функциональным устройствам.
После того как микрооперации пройдут порты диспетчеризации, они направляются в соответствующие функциональные блоки для дальнейшего выполнения.
Отличия микроархитектуры Nehalem от Intel Core
Напомним, что одной из особенностей архитектуры Intel Core была совокупность технологий, получивших общее название Intel Wide Dynamic Execution. К наиболее важными технологиям из набора Intel Wide Dynamic Execution относятся следующие:
- механизм декодирования до четырех инструкций за такт;
- технология слияния макроопераций MacroFusion;
- технология слияния микроопераций micro-ops fusion.
Intel Wide Dynamic Execution используется и в архитектуре Nehalem, но в данном случае речь идет уже об усовершенствованной технологии.
Итак, рассмотрим нововведения, реализованные в микроархитектуре Nehalem. Первое из них заключается в реализации технологии слияния макроопераций MacroFusion. Во-первых, расширен набор команд, для которых возможно слияние макроопераций. Во-вторых, в микроархитектуре Intel Core слияние макроопераций не поддерживалось для 64-битного режима работы процессора, то есть технология MacroFusion была реализована только в 32-битном режиме. В архитектуре Nehalem это узкое место устранено и операции слияния работают как в 32-, так и 64-битном режиме процессора.
Следующее усовершенствование микроархитектуры Nehalem касается технологии обнаружения программных циклов Loop Stream Detector. В архитектуре Nehalem применяется улучшенный блок обнаружения циклов — теперь он расположен не перед, а за декодером и рассчитан на 28 декодированных инструкций, то есть можно обнаруживать на 60% более длинные циклы (рис. 4). Кроме того, поскольку Loop Stream Detector хранит декодированные инструкции (так как размещается после декодера), инструкции будут «пропускать» не только фазу предсказания ветвлений и выборки, как раньше, но и фазу декодирования. Таким образом, в Nehalem инструкции в цикле будут проходить через конвейер быстрее и чаще.
Рис. 4. Расположение модуля Loop Stream Detector
в процессоре с микроархитектурой Nehalem
Еще одно важное нововведение в архитектуре Nehalem — это использование двухуровневой иерархии буфера ассоциативной трансляции (Translation Lookaside Buffer, TLB) или буфера трансляции виртуальных адресов страниц памяти в физические.
То есть если в архитектуре Intel Core традиционно использовалось два отдельных TLB буфера для инструкции (ITLB) и данных (DTLB), которые можно рассматривать как буферы первого уровня, то теперь дополнительно введен унифицированный TLB-буфер для данных и команд, который является буфером второго уровня. TLB-буфер второго уровня рассчитан на 512 записей, причем поддерживаются записи только для страниц памяти размером 4K (Small Page). При этом ITLB-буфер рассчитан на 128 записей страниц памяти типа Small Page и семь записей (в расчете на один поток) для страниц типа Large Page (размером 2M/4M). Буфер DTLB рассчитан на 64 записи страниц памяти типа Small Page и 32 записи для страниц типа Large Page.
Естественно, что описанными изменениями в архитектуре Nehalem в сравнении с архитектурой Intel Core дело не ограничивается. Так, увеличен размер буфера переупорядочения (ReOrder Buffer, ROB) — если ранее он был рассчитан на 98 микроинструкций, то теперь в нем можно размещать 128 микроинструкций. Кроме того, существенно улучшен механизм предсказания ветвлений.
Подверглись переработке и исполнительные блоки ядра процессора. Процессор на базе микроархитектуры Nehalem способен выполнять до шести операций за один такт. При этом возможно выполнение одновременно трех вычислительных операций и трех операций с памятью (рис. 5).
Рис. 5. Исполнительные блоки ядра процессора Nehalem
Еще одно существенное нововведение — это новый набор расширений инструкций SSE4.2. Он включает поддержку всех 47 команд SSE4, а также семь новых программно-ориентированных ускорителей (Application Targeted Accelerator, ATA) обработки строк и текстовой информации. По утверждению разработчиков, дополнительные ускорители будут полезны, например, в задачах лексического и синтаксического анализа, при работе с регулярными выражениями и поиске вирусов.
Говоря об особенностях новой микроархитектуры Nehalem, остается добавить, что длина конвейера в процессоре Nehalem составляет 16 ступеней. Напомним, что в процессоре c микроархитектурой Intel Core конвейер включал 14 ступеней, а в процессоре Northwood — 31 ступень.
Технология Hyper-Тhreading в микроархитектуре Nehalem
Как известно, технология Hyper-Тhreading используется для того, чтобы наиболее эффективно загрузить все имеющиеся исполнительные блоки процессора и тем самым избежать появления пустых циклов. Технология Hyper-Тhreading была анонсирована компанией Intel еще в 2002 году и по сути является технологией многопоточной обработки команд. Фактически технология Hyper-Threading позволяет организовать два логических процессора в одном физическом.
Поскольку технология Hyper-Тhreading, которая будет реализована в микроархитектуре Nehalem, практически ничем не отличается от технологии Hyper-Тhreading, применяемой в микроархитетуре Intel Burst, мы лишь вкратце напомним основные принципы ее реализации.
Для реализации параллельной обработки инструкции в технологии Hyper-Threading все инструкции разделяются на два параллельных потока (попутно заметим, что в скором будущем компания Intel собирается реализовать технологию Hyper-Threading с четырьмя параллельными потоками).
Конструктивно ядро процессора с поддержкой технологии Hyper-Threading состоит из двух логических процессоров, каждый из которых имеет свои регистры и контроллер прерываний (Architecture State, AS), а значит, две параллельно исполняемые задачи работают с собственными независимыми регистрами и прерываниями, но при этом используют одни и те же ресурсы процессора для выполнения своих задач. После активации каждый из логических процессоров может самостоятельно и независимо от другого процессора выполнять свою задачу, обрабатывать прерывания либо блокироваться. Таким образом, от реальной двухпроцессорной конфигурации новая технология отличается лишь тем, что оба логических процессора применяют одни и те же исполняющие ресурсы, одну и ту же разделяемую между двумя потоками кэш-память и одну и ту же системную шину. Использование двух логических процессоров позволяет усилить параллелизм на уровне потока, реализованный в современных операционных системах и высокоэффективных приложениях. Команды от обоих исполняемых параллельно потоков одновременно посылаются ядру процессора для обработки. Применяя технологию out-of-order (исполнение командных инструкций не в порядке их поступления), ядро процессора тоже способно параллельно обрабатывать оба потока за счет использования нескольких исполнительных модулей.
Идея технологии Hyper-Threading основана на том, что, как бы хорошо ни был оптимизирован программный код, не все исполнительные модули процессора оказываются задействованными на протяжении каждого тактового цикла. Было бы вполне логично организовать работу процессора таким образом, чтобы в каждом тактовом цикле максимально использовать его возможности. Именно эту идею и реализует технология Hyper-Threading, подключая незадействованные ресурсы процессора к выполнению параллельной задачи.
Поясним все вышесказанное на примере. Представьте себе гипотетический процессор, в котором имеются четыре исполнительных блока: два для работы с целыми числами (арифметико-логическое устройство, ALU), один для работы с числами с плавающей точкой (FPU) и один для записи и чтения данных из памяти (Store/Load, S/L). Кроме того, пусть каждая операция осуществляется за один такт процессора. Далее предположим, что выполняется программа, состоящая из трех инструкций: первые две — арифметические действия с целыми числами, а последняя — сохранение результата. В этом случае вся программа будет выполнена за два такта процессора: в первом такте задействуются два блока ALU-процессора (красный квадрат на рис. 6), во втором — блок записи и чтения данных из памяти S/L.
Рис. 6. Реализация параллелизма
на уровне инструкций
(Instruction Level Parallelism, ILP)
В современных приложениях в любой момент, как правило, выполняется не одна, а несколько задач или несколько потоков (threads) одной задачи, называемых также нитями. Давайте посмотрим, как будет вести себя наш гипотетический процессор при выполнении двух разных потоков задач (рис. 7). Красные квадраты соответствуют применению исполнительных блоков процессора одного потока, а синие — другого. Если бы оба потока исполнялись изолированно, то для выполнения первого и второго потоков потребовалось бы по пять тактов процессора. При одновременном исполнении обоих потоков процессор будет постоянно переключаться между обоими потоками, следовательно, за один такт процессора выполняются только инструкции какого-либо одного из потоков. Для исполнения обоих потоков потребуется в общей сложности десять процессорных тактов.
Рис. 7. Выполнение двух потоков на процессоре
без реализации и с реализацией технологии Hyper-Threading
Теперь подумаем над тем, как можно повысить скорость выполнения задачи в рассмотренном примере. Как видно из рис. 7, на каждом такте процессора используются далеко не все исполнительные блоки процессора, поэтому имеется возможность частично совместить выполнение инструкций отдельных потоков на каждом такте процессора. В нашем примере выполнение двух арифметических операций с целыми числами первого потока можно совместить с загрузкой данных из памяти второго потока и выполнить все три операции за один такт процессора. Аналогично на втором такте процессора можно совместить операцию сохранения результатов первого потока с двумя операциями второго потока и т.д. Собственно, в таком параллельном выполнении двух потоков и заключается основная идея технологии Hyper-Threading.
Конечно, описанная ситуация является идеализированной и на практике выигрыш от применения технологии Hyper-Threading куда более скромен. Дело в том, что возможность одновременного выполнения на одном такте процессора инструкций от разных потоков ограничивается тем, что эти инструкции могут задействовать одни и те же исполнительные блоки процессора.
Иерархия кэш-памяти в микроархитектуре Nehalem
Как мы уже отмечали, одна из главных особенностей новой микроархитектуры — это изменение структуры кэш-памяти процессора (рис. 8). Собственно, кэш-память первого уровня (L1) практически не претерпела изменений. Изменился лишь размер TLB-буфера и ассоциативность кэша инструкций. Если ранее кэш L1 делился на 32-килобайтный кэш данных и 32-килобайтный кэш инструкций и оба кэша являлись 8-канальными, а размер строки кэша составлял 64 байт, то теперь кэш L1 делится на 8-канальный 32-килобайтный кэш данных и 4-канальный 32-килобайтный кэш инструкций.
Рис. 8. Структура кэш-памяти
процессора Nehalem
Новизна заключается в том, что к каждому ядру процессора теперь добавлены унифицированный (единый для инструкций и данных) кэш второго уровня (L2) размером 256 Кбайт и разделяемый между всеми ядрами процессора кэш третьего уровня (L3).
Кэш L2 также является 8-канальным, а размер строки кэша составляет 64 байт. Кэш L3 является 16-канальным.
Размер разделяемого кэша L3 может быть различным и зависит от числа ядер процессора. В частности, как мы уже отмечали, для четырехъядерного процессора Bloomfield размер L3-кэша составляет 8 Мбайт.
Кэш L3 является инклюзивным (inclusive) по своей архитектуре по отношению к кэшам L1 и L2, то есть в кэше L3 всегда дублируется содержимое кэшей L1 и L2. Отметим, что кэши L1 и L2 не являются ни инклюзивными, ни эксклюзивными по отношению друг к другу.
Использование именно инклюзивного L3-кэша имеет свои преимущества по сравнению с эксклюзивной архитектурой. Рассмотрим несколько характерных примеров чтения данных из кэша L3. Предположим сначала, что ядро процессора Core 0, обнаружив, что требуемых ему данных нет ни в кэше L1, ни в кэше L2, обращается к кэшу L3 (рис. 9). Если требуемых данных нет также и в кэше L3, то в случае эксклюзивной архитектуры кэша L3 потребовалось бы также проверить наличие требуемых данных в кэшах L1 и L2 каждого из ядер — Core 1, Core 2 и Core 3 (рис. 10). В случае инклюзивной архитектуры кэша L3 необходимость в подобной проверке отпадает, поскольку инклюзивная архитектура кэша L3 гарантирует, что при отсутствии данных в кэше L3 они будут отсутствовать и в L1-, и L2-кэше.
Рис. 9. Ядро Core 0, обнаружив, что требуемых ему данных
нет ни в кэше L1,
ни в кэше L2, обращается к кэшу L3
Рис. 10. В случае эксклюзивной архитектуры кэша L3
при отсутствии данных в кэше L3 необходимо проверить
наличие этих данных в кэшах L1 и L2 каждого из ядер —
Core 1, Core 2 и Core 3
Рис. 11. Если требуемые ядру Core 0 данные обнаруживаются
в кэше L3,
то при эксклюзивной архитектуре кэша L3 больше
не нужно предпринимать каких-либо действий, поскольку
эта архитектура гарантирует отсутствие
таких данных в кэшах L1 и L2 остальных ядер
Рис. 12. Для того чтобы определить, в кэш-памяти
какого именно ядра находятся данные, в тэг-поле
кэш-строки L3-кэша записывается, к какому
из ядер принадлежат данные
Если же требуемые ядру Core 0 данные обнаруживаются в кэше L3, то при эксклюзивной архитектуре кэша более не требуется предпринимать каких-либо действий, поскольку эта архитектура гарантирует отсутствие таких данных в кэшах L1 и L2 ядер Core 1, Core 2 и Core 3 (рис. 11). При инклюзивной архитектуре кэша L3 наличие требуемых данных в кэше L3 означает, что эти данные также содержатся и в каком-то из кэшей ядра Core 1, Core 2 или Core 3. Однако в архитектуре Nehalem в этом случае не требуется дополнительной проверки кэшей L1 и L2 всех остальных ядер. Достигается это тем, что в тэг-поле кэш-строки L3-кэша записывается, к какому из ядер принадлежат данные (рис. 12), поэтому достаточно лишь прочитать содержимое этого тэга.
Заключение
Как уже отмечалось, новые процессоры Nehalem будут несовместимы с современными чипсетами Intel 4-й серии. Более того, для них придется использовать кулеры с новой системой крепления. Одновременно с выходом процессора Bloomfield — первого четырехъядерного процессора на базе микроархитектуры Nehalem — будет анонсирован чипсет Intel X58 Express, имеющий кодовое название Tylersburg. Пока что подробных данных относительно этого чипсета нет. Известно лишь, что это будет двухчиповое решение, то есть северный мост в паре с традиционным южным мостом. Причем будет использоваться южный мост ICH10R — тот самый, который сейчас применяется в чипсетах Intel 4-й серии. За счет переноса контроллера памяти на процессор северный мост чипсета Tylersburg существенно упростится. Известно, что северный мост чипсета будет поддерживать два интерфейса PCI Express 2.0 x16 или четыре интерфейса PCI Express 2.0 x8.
Ну и последняя особенность чипсета Intel X58 Express заключается в том, что в нем будет реализована поддержка режима NVIDIA SLI.
Как стало известно, компания Intel получила от NVIDIA лицензию на использование технологии SLI. Взамен NVIDIA получила от Intel лицензию на использование шины QPI в своих чипсетах для процессоров Intel. Правда, по слухам, первоначально компания NVIDIA будет производить чипсеты только для процессора Lynnfield с разъемом LGA 1160.
Известно, что режим SLI на платах с чипсетами Intel будет реализован за счет использования дополнительного чипа NVIDIA nForce 200 chip (BR04). Таким образом, платы на базе чипсета Intel X58 Express можно будет использовать как с видеокартами ATI в режиме CrossFire, так и с видеокартами NVIDIA в режиме SLI.