Регистры отладки и тестирования. Регистры первых трех групп используются при выполнении прикладных программ, третьей группы – системных операций, четвертой – при отладке и тестировании. Регистры общего назначения Восемь 32-разрядных регистров (EAX, ECX, EDX, EBS, EBP, ESP, ESI, EDI) предназначены для хранения данных и адресов. Они поддерживают работу с данными разрядностью 1, 8, 16 и 32 бита, битовыми полями длиной от 1 до 32 бит и адресами размером 16 и 32 бита. Младшие 16 разрядов этих регистров (рис.3.2) доступны отдельно при использовании соответствующего имени, например регистр ЕАХ (имя АХ для 16 разрядов). При операциях с байтами можно отдельно обращаться к младшему байту (разряды 0–7) и старшему байту (8–15) по именам AL и AH. Доступ к отдельным байтам обеспечивает дополнительную гибкость при операциях с данными. Рис. 3.2. Структура регистра общего назначения ЕАХ Регистры сегментов и дескрипторы сегментов Шесть 16-разрядных сегментных регистров (CS, SS, DS, ES, FS, GS) содержат значения селекторов сегментов, указывающих на текущие адресуемые сегменты памяти. С каждым из них связан программно-недоступный регистр дескриптора сегмента (см. рис. 3.3). В защищенном режиме каждый сегмент может иметь размер от 1 байта до 4 Гбайт, в режиме реальных адресов максимальный размер сегмента составляет 64 Кбайта. Селектор в CS обеспечивает обращение к текущему сегменту команд, селектор в SS – к текущему сегменту стека, селекторы в DS, ES, FS, GS – к текущим сегментам данных. Каждый регистр дескриптора содержит базовый адрес сегмента, 32-разрядный размер сегмента и другие необходимые атрибуты. Регистры сегментов | Регистры дескрипторов | | 15 0 | | | | | | | Селектор | CS | | Базовый адрес | Размер сегмента | Другие атрибуты | | Селектор | SS | | | | | | | | | | Селектор | DS | | | | | | | | | | Селектор | ES | | | | | | | | | | Селектор | FS | | | | | | | | | | Селектор | GS | | | | | | | | | Рис. 3.3. Регистры сегментов и соответствующие регистры дескрипторов Когда в регистр сегмента загружается новое значение селектора, содержимое соответствующего регистра дескриптора автоматически корректируется. В реальном режиме базовый адрес сегмента получается путем сдвига значения селектора на 4 разряда влево (20 разрядов), максимальный размер и атрибуты сегмента в реальном режиме имеют фиксированные значения. Указатель команд Указатель команд (рис. 3.4) представляет собой 32-разрядный регистр с именем EIP, содержимое которого используется в качестве смещения при определении адреса следующей выполняемой команды. Смещение задается относительно базового адреса сегмента команд CS. Младшие 16 бит (0–15) содержат 16-разрядный указатель команд с именем IP, который используется при 16-разрядной адресации.  Рис. 3.4. Структура регистра указателя команд Указатель команд непосредственно программисту недоступен. Его содержимое изменяется при выполнении команд передачи управления и прерываний. Регистр флагов Регистр флагов является 32-разрядным, имеет имя EFLAGS. Его разряды содержат признаки результата выполнения команды, управляют обработкой прерываний, последовательностью вызываемых задач, вводом/выводом и рядом других процедур. Регистры процессора обработки чисел с плавающей точкой Набор регистров, входящих в блок FPU, изображен на рис. 3.5. При работе FPU 80-разрядные регистры ST0–ST7 образуют кольцевой стек, в котором хранятся числа с плавающей точкой, представленные в формате с расширенной точностью. Регистры данных Регистр тегов 79 78 64 63 0 1 0 ST0 | | | MM0 | | Тег(0) | ST1 | | | MM1 | | Тег(1) | ST2 | | | MM2 | | Тег(2) | ST3 | | | MM3 | | Тег(3) | ST4 | | | MM4 | | Тег(4) | ST5 | | | MM5 | | Тег(5) | ST6 | | | MM6 | | Тег(6) | ST7 | | | MM7 | | Тег(7) | 15 0 | | 47 0 | Регистр управления | | Указатель команд | Регистр состояния | | Указатель данных | Рис. 3.5. Регистры блока FPU Регистр тегов FPUсодержит 16-разрядное слово, включающее восемь двухбитовых тегов. Каждый тег (признак) характеризует содержимое одного из регистров данных. Тег определяет, является ли регистр пустым (незаполненным) – код 11 или в него введено конечное число – 00 (достоверное значение), или нуль – 01, неопределенное значение (бесконечность) – 10 (нет числа и неподдерживаемый формат). Слово тегов позволяет оптимизировать функционирование FPU посредством идентификации пустых и непустых регистров данных, проверить содержимое регистра без сложного декодирования хранящихся в нем данных. Регистры ММХ-технологии При реализации ММХ-команд регистры данных FPU используются как 64-разрядные регистры ММ0–ММ7 (см. рис. 3.5), где могут храниться несколько целочисленных операндов (восемь 8-разрядных, четыре 16-разрядных, два 32-разрядных или один 64-разрядный), над которыми одновременно выполняется поступившая в процессор команда. Регистры SSE расширений Убран абзац, убран рисунок | | Потоковые команды расширений SSE используют восемь 128-разрядных регистров ХММ0–ХММ7, в которых могут храниться несколько вещественных или целочисленных операндов. Системные регистры Системные регистры управляют функционированием микропроцессора в целом и режимами работы отдельных внутренних блоков: процессора с плавающей точкой, кэш-памятью, диспетчера памяти. Эти регистры доступны только в защищенном режиме для программ. Набор системных регистров включает регистры управления, регистры системных адресов и сегментов. Регистры управления 32-разрядные, служат для фиксации общего состояния процессора. Эти регистры вместе с регистрами системных адресов хранят информацию о состоянии процессора, которое затрагивает все задачи. Регистры отладки и тестирования Набор программно-доступных регистров поддерживает отладку программ и тестирования внутренних блоков процессора. Встроенный алгоритм самотестирования (BIST) осуществляет поиск ошибки в микрокоде и в больших логических матрицах, а также тестирование кэш-памяти команд и данных, буферов ассоциативной трансляции (TLB) и устройств постоянной памяти. Внутренние счетчики контролируют работу процессора и проводят подсчет событий. Введена новая функция – мониторинг термического состояния системной платы. Переименование регистров В современных процессорах используются блоки регистров замещения (регистровые файлы) для целочисленных, вещественных и векторных данных. Для любого указанного в команде логического регистра (программно можно обращаться в х86 только к 8-ми регистрам общего назначения GPR, 8-ми регистрам с плавающей точкой ST или 8-ми ММХ / ХММ-регистрам) выделяется один из физических регистров соответствующего блока регистров замещения, содержащего например 128 регистров. Эта процедура (переименование регистров) позволяет увеличить количество используемых регистров процессора, а также позволяет выполнять команды, в которых задействованы одни и те же логические регистры, одновременно или с изменением их последовательности. 3.3.2. Регистровые структуры процессоров AMD64 (Intel64) В процессорах x86-64 (AMD64), Intel64 архитектур (рис. 3.6) существующие в х86 регистры общего назначения (GPR) расширены с 32 до 64 бит (RAX, RBX, RCX, RDX, RBP, RSP, RSI, RDI) и к ним добавлены еще 8 новых 64-разрядных регистров (R8–R15). Также 8 новых 128-ми битных регистров (XMM8–XMM15) добавлено в блок SSE, что обеспечивает поддержку SSE2.  Рис. 3.6. Регистровые структуры процессоров AMD64 (Intel64) В блоке FPU используются существующие в х87 регистры данных ST0–ST7 (80-разрядные) и 64-разрядные мультимедийные регистры ММ0–ММ7, объединенные в общее пространство с регистрами ST. Регистр указателя команд (RIP) и регистр флагов (RFLAGS) также расширены до 64 разрядов. 3.3.3. Регистровые структуры процессоров IA-64 В состав регистровых файлов IA-64 (рис.3.7) входят: 128 регистров общего назначения GPR (64-разрядных); 128 регистров с плавающей запятой FR (82-разрядных); 128 прикладных регистров (в основном 64-разрядных) AR; 64 одноразрядных регистров предикатов PR; 8 регистров переходов BR (64-разрядных); не менее 4-х регистров идентификатора процесса CPUID; счетчик команд IP; регистр маркера текущего окна CFM стека регистров и др.  Рис. 3.7. Регистровые структуры процессоров IA-64 64-разрядные регистры GPR0–GPR127 применяются не только для целочисленных операций IA-64; GPR8–GPR31 в режиме IA-32 используются также под целочисленные регистры и регистры селекторов и дескрипторов сегментов IA-32. GPR0–GPR31 называются статическими регистрами (GPR0 всегда содержит 0), а GPR32–GPR127 – стекируемыми регистрами. Статические регистры «видны» всем программам. Стекируемые регистры становятся доступными в программной единице через окно стека регистров, включающее локальные и выходные регистры, число которых задается командой alloc. 82-разрядные регистры с плавающей запятой FR0–FR127 также подразделяются на статические (FR0–FR31, причем всегда FR0 = 0.0, FR1 = 1.0) и вращаемые (FR32–FR127). FR8–FR31 в режиме IA-32 содержат числа с плавающей запятой и мультимедийные регистры. Вращение регистров является в некотором роде частным случаем переименования регистров, применяемого в современных суперскалярных процессорах с внеочередным выполнением команд. В отличие от них (переименование регистров осуществляется аппаратно) вращение регистров в IA-64 управляется программно. Прикладные регистры AR0–AR127 – специализированные. Ряд AR-регистров является фактически регистрами IA-32. AR0–AR7 называются регистрами ядра. Запись в них привилегированна, но они доступны на чтение в любом приложении и используются для передачи приложению сообщений от операционной системы. AR16 (RSC) – регистр конфигурации стека регистров, используемый для управления работой стека регистров IA-64. AR40 (FPSR) – регистр состояния для команд с плавающей запятой IA-64. Регистры предикатов PR0–PR63 являются одноразрядными, в них помещаются результаты выполнения команд сравнения. Обычно эти команды устанавливают сразу два соседних регистра PR в состояния «1» – истина, «0» – ложь или наоборот в зависимости от значения условия. Такая избыточность обеспечивает дополнительную гибкость. 64-разрядные регистры переходов BR0–BR7 применяются для указания адреса перехода в соответствующих командах перехода (если адрес перехода не кодируется в команде явно). В регистрах CPUID 0 и CPUID 1 находится информация о производителе, в регистре CPUID 2 – серийный номер процессора, а в регистре CPUID 3 задается тип процессора (семейство, модель, версия архитектуры и т. п.) и число CPUID-регистров. Разряды регистра CPUID4 указывают на поддержку конкретных особенностей IA-64, которые реализованы в данном процессоре. 3.4. Структурная организация современных универсальных микропроцессоров Характерными чертами современных универсальных микропроцессоров являются: 1. Суперскалярная архитектура, обеспечивающая одновременное выполнение нескольких команд в параллельно работающих исполнительных устройствах. 2. Динамическое изменение последовательности команд (выполнение команд с опережением – спекулятивное выполнение). 3. Конвейерное исполнение команд. 4. Предсказание направления ветвлений. 5. Предварительная выборка команд и данных. 6. Параллельная обработка потоков данных. 7. Многоядерная структура. 8. Многопотоковая обработка команд. 9. Пониженное энергопотребление. Практическая реализация данных принципов в структурах различных процессоров имеет ряд существенных особенностей, связанных с их микроархитектурой. Микроархитектура процессора определяет реализацию его внутренней структуры, принципы выполнения поступающих команд, способы размещения и обработки данных. 3.4.1. Стратегия развития процессоров Intel Стратегия развития Intel заключается во внедрении новых микроархитектур процессоров, основанных на новых поколениях полупроводниковой производственной технологии. Темпы выпуска инновационных микроархитектур и полупроводниковых технологий основаны на принципе, который корпорация Intel называет моделью «TICK-TOCK» («ТИК-ТАК»). Каждый «TICK» обозначает (табл. 3.1) новый этап развития полупроводниковых технологий (техпроцесс – 65 нм, 45 нм, 32 нм), а каждый «TOCK» – создание новой микроархитектуры (Intel Core, Nehalem, Sandy Bridge). Переход на новый техпроцесс сопровождается выпуском соответствующих семейств процессоров (Penryn, Westmere). Этот цикл, как правило, повторяется каждые 2 года. Новаторская микроархитектура «обкатывается» на текущем производственном процессе, затем переносится на новую производственную технологию. Данная модель развития позволяет осуществлять внедрение единообразной процессорной микроархитектуры во всех сегментах рынка. Таблица 3.1 Стратегия развития процессоров Intel Intel Core NEW Microarchitecture | Penryn NEW Process | Nehalem NEW Microarchitecture | Westmere NEW Process | Sandy Bridge NEW Microarchitecture | 65 nm | 45 nm | 45 nm | 32 nm | 32 nm | 2006 г. | 2007 г. | 2008 г. | 2009 г. | 2010 г. | TOCK | TICK | TOCK | TICK | TOCK | Стратегия развития архитектуры и полупроводниковой технологии, реализуемая корпорацией Intel, не только позволяет выпускать новые решения в соответствии с запланированными темпами, но и способствует внедрению инновационных решений в отрасли на уровне платформ, расширяя использование преимуществ высокой производительности и энергоэкономичности. 3.4.2. Особенности многоядерной процессорной микроархитектуры Intel Core Микроархитектура Intel Core наследует философию эффективного энергопотребления, впервые реализованную в процессорах Intel Pentium M для мобильных ПК. Заимствовав лучшее от ставших основой для настольных и мобильных процессоров Intel микроархитектур Net Burst и Mobile, микроархитектура Intel Core содержит сотни нововведений, но основные из них сводятся к пяти технологическим решениям: 1. Технология Intel Wide Dynamic Execution (широкое динамическое исполнение). 2. Технология Intel Advanced Digital Media Boost (улучшенные цифровые медиа возможности). 3. Технология Intel Advanced Smart Cache (улучшенный интеллектуальный кэш). 4. Технология Intel Smart Memory Access (интеллектуальный доступ к памяти). 5. Технология Intel Intelligent Power Capability (интерактивное подключение подсистем). Рассмотрим подробнее каждую из перечисленных технологий. Технология Intel Wide Dynamic Execution Динамическое исполнение команд подразумевает суперскалярную архитектуру, способную выполнять анализ потока команд и обладающую возможностями спекулятивного (упреждающего) и внеочередного исполнения команд. В новой архитектуре с «широким» динамическим исполнением связывают, во-первых, возможность исполнения большего числа операций за такт, чем это было раньше. Благодаря добавлению в каждое ядро декодеров и исполнительных устройств, каждое из ядер сможет выбирать из программного кода и исполнять до четырех х86 инструкций одновременно с помощью 14-стадийных конвейеров, в то время как предыдущие процессоры Intel, AMD (как настольные, так и мобильные) могли обрабатывать не более трех инструкций за такт. На 4 декодера (один для сложных инструкций и три – для простых) микроархитектура Core предполагает наличие 6 портов запуска (один – Load, два – Store и три – универсальных) исполнительных устройств. Кроме того, микроархитектура Core получила более совершенный блок предсказания переходов и более вместительные буферы команд, используемые на различных этапах анализа кода для оптимизации скорости исполнения. Во-вторых, в дополнении к весьма удачной технологии micro-ops fusion (x86 инструкция распадается на последовательность микрокоманд, которые выполняются процессором в этой же последовательности) микроархитектура Core получила технологию macro fusion. Данная технология направлена на увеличение числа исполняемых за такт команд и заключается в том, что ряд пар связанных между собой последовательных х86 инструкций, таких как, например, сравнение со следующим за ним условным переходом, представляются декодером одной микрокомандой. Таким образом, пять выбранных х86 инструкций могут в каждом такте преобразовываться в четыре микрокоманды. Этим достигается как увеличение темпа исполнения кода, так и некоторая экономия энергии. Технология Intel Advanced Digital Media Boost До настоящего времени процессоры Intel исполняли одну SSE-инструкцию (SSE, SSE2, SSE3), работающую с 128-битными операндами, лишь за 2 такта. Один такт тратился на обработку старших 64 бит, второй такт – на обработку младших. Новая же микроархитектура позволяет ускорить работу с SSE инструкциями в два раза. Блоки SSE в данных процессорах полностью 128-битные, что дает возможность увеличить количество данных, обрабатываемых процессором за такт. Кроме этого Intel в очередной раз провел ревизию системы команд SSE. Результатом стало расширение SSSE3 еще 32-мя новыми командами, а для процессоров (Penryn), выполненных по 45-нм технологическому процессу, использование нового набора команд SSE4.1, в который добавлено 47 новых команд, позволяющих ускорить, в том числе, кодирование видеозаписей с высоким разрешением и обработку фотоизображений. Технология Intel Advanced Smart Cache Процессоры с микроархитектурой Core имеют разделяемый между двумя ядрами L2 кэш. Плюсов такого подхода несколько: 1. Появляется возможность у процессора гибко регулировать размеры областей кэша, используемых каждым из ядер. Доступ ко всему объему L2 кэша может получить любое из ядер процессора (когда одно из ядер бездействует). Если же одновременно работают два ядра, то кэш делится между ними пропорционально, в зависимости от частоты обращений каждого ядра к оперативной памяти. Если оба ядра работают синхронно с одними и теми же данными, то хранятся они в общем L2 кэше только однократно. Таким образом, разделяемый интеллектуальный L2 кэш гораздо более эффективен и, даже можно сказать, более вместителен, чем два отдельных кэша, разделенных между ядрами. 2. Значительно снижается нагрузка на оперативную память системы и на процессорную шину. В этом случае перед системой не стоит задача контроля и обеспечения когерентности кэш-памяти различных ядер. Технология Intel Smart Memory Access Под этим названием объединены несколько технологий. 1. Усовершенствованный алгоритм предварительной выборки данных. Микроархитектура Core предполагает реализацию в процессоре 6 независимых блоков предварительной выборки данных. Два блока нагружаются задачей предварительной выборки данных из памяти в общий L2 кэш. Еще по два блока работают с кэшами L1 каждого ядра. Каждый из этих блоков независимо друг от друга отслеживает закономерные обращения (потоковые, либо с постоянным шагом внутри массива) исполнительных устройств к данным. Базируясь на собранной статистике, блоки предварительной выборки стремятся подгружать данные из памяти в процессорный кэш еще до того, как к ним последует обращение. Также, L1 кэш каждого из ядер процессоров, построенных на базе Core, имеет по одному блоку предварительной выборки инструкций, работающих по аналогичному алгоритму. 2. Memory disambiguation (устранение противоречий при доступе к памяти). Данная технология направлена на повышение эффективности работы алгоритмов внеочередного исполнения инструкций, осуществляющих чтение/выгрузку (Load) и запись/сохранение (Store) данных в память. Технология Intel Intelligent Power Capability При разработке новой микроархитектуры Core инженеры стремились к оптимизации параметра «производительность на ватт». Поэтому они сразу предусмотрели набор технологий, направленных на снижение энергопотребления и тепловыделения, в первую очередь хорошо зарекомендовавшие себя технологии Intel Speed Step (динамическое изменение тактовой частоты процессора в зависимости от текущих потребностей в вычислительной мощности), Halt State (отключает некоторые блоки процессора во время их бездействия) и др. Но главная особенность новой архитектуры в том, что процессоры получили возможность интерактивного подключения тех собственных подсистем, которые используются в данный момент. Причем речь в данном случае идет не о ядрах целиком. Декомпозиция процессора на отдельные функциональные узлы выполнена на гораздо более низком уровне. Каждое из процессорных ядер поделено на большое количество блоков и внутренних шин, питание которыми управляется раздельно посредством специализированных дополнительных логических схем. Недостатки микроархитектуры Intel Core Существенным недостатком процессоров микроархитектуры Intel Core стал их немодульный дизайн(немодульное проектирование). Они изначально проектировались как двухъядерные полупроводниковые кристаллы. Последующий же переход к выпуску многоядерных представителей Core 2 стал выявлять слабые места такого подхода. Так, 4-х ядерные и 6-ти ядерные представители микроархитектуры Intel Core просто собирались из нескольких 2-х ядерных кристаллов, что приводило к затруднению взаимодействия между ними. Обмен данными между разрозненными ядрами организовывался через системную память, что порой вызывало большие задержки, обусловленные ограниченной пропускной способностью процессорной шины. Еще одно узкое место возникало в многопроцессорных системах. Хотя Intel уже решил проблему с разделением системной шины, выпустив чипсеты, предлагающие собственную шину каждому процессору, производительность часто ограничивалась недостаточно высокой пропускной способностью шины памяти. Таким образом, дальнейшее увеличение многоядерности и многопроцессорности, выбранное основным вектором увеличения производительности современных систем, рано или поздно должны были завести Intel в тупик, даже несмотря на то, что сама по себе микроархитектура Intel Core представляется очень удачной. 3.4.3. Микроархитектура Intel Nehalem Микроархитектура Nehalem является дальнейшим развитием рассмотренной выше микроархитектуры Intel Core. Основные отличительные черты Nehalem Основными отличительными чертами данной микроархитектуры являются следующие: 1. Усовершенствованное по сравнению с Core вычислительное ядро. 2. Многопоточная технология SMT (Simultaneous Multi-Threading), позволяющая исполнять одновременно два вычислительных потока на одном ядре. 3. Три уровня кэш-памяти: L1 кэш размером 64 Кбайта на каждое ядро, L2 кэш размером 256 Кбайт на каждое ядро, общий разделяемый L3 кэш размером 4, 8 до 24 Мбайт. 4. Интегрированный в процессор контроллер памяти с поддержкой нескольких каналов DDR3 SDRAM. 5. Новая шина QPI с топологией точка-точка для связи процессора с чипсетом и процессоров между собой. 6. Модульная структура. 7. Монолитная конструкция – процессор состоит из одного полупроводникового кристалла. 8. Технологический процесс с нормами производства не менее 45 нм. 9. Использование двух, четырех или восьми ядер. 10. Управление питанием и Turbo-режим. Усовершенствования вычислительного ядра Несмотря на то, что процессоры семейства Nehalem преподносятся Intel, как носители новой микроархитектуры, основная их часть – вычислительное ядро – по сравнению с Core изменилась не столь значительно, наибольшие улучшения кроются в инфраструктуре. На рис. 3.8 представлена обобщенная структура ядра процессора с микроархитектурой Intel Nehalem. В рассматриваемом ядре так называемый предпроцессор содержит следующие блоки: блок выборки команд и преддекодирования; блок предсказания переходов (ветвлений); блок очередей инструкций; декодер инструкций; блок обнаружения циклов в программе. Рис. 3.8. Структура ядра процессора микроархитектуры Nehalem Сначала х86 инструкции выбираются (Fletch) из кэш-памяти команд. Если в потоке команд оказывается команда условного перехода (ветвление программы), то включается механизм предсказания ветвления, который формирует адрес следующей выбираемой команды до того, как будет определено условие выполнения перехода. Основной частью блока предсказания ветвлений является ассоциативная память, называемая буфером адресов ветвлений ВТВ (Branch Target Buffer), в котором хранятся адреса ранее выполненных переходов. Кроме того, ВТВ содержит биты, хранящие предысторию ветвления, которые указывают, выполнялся ли переход при предыдущих выборках данной команды. При поступлении очередной команды условного перехода указанный в ней адрес сравнивается с содержимым ВТВ. Если этот адрес не содержится в ВТВ, то есть ранее не производились переходы по данному адресу, то предсказывается отсутствие ветвления. В этом случае продолжается выборка и декодирование команд, следующих за командой пере- хода. При совпадении указанного в команде адреса перехода с каким-либо из адресов, хранящихся в ВТВ, производится анализ предыстории. В процессе анализа определяется чаще всего реализуемое направление ветвления, а также выявляются чередующиеся переходы. Если предсказывается выполнение ветвления, то выбирается и загружается в конвейер команда, размещенная по предсказанному адресу. В дополнение к уже имеющемуся в Intel Core блоку предсказания переходов был добавлен в Nehalem ещё один «предсказатель» второго уровня. Он работает медленнее, чем первый, но зато благодаря более вместительному буферу, накапливающему статистику переходов, обладает лучшей глубиной анализа. Далее разделенные х86 инструкции (Pre Decode) на простые и сложные организуются в виде очередей (Instruction Queues) на входах четырех декодеров. Декодеры преобразуют х86 команды в микрокоманды, под управлением которых в процессоре выполняются элементарные операции (микрооперации). Как в Intel Core, три декодера используются для обработки простых инструкций, один – для сложных. Каждая простая х86 инструкция преобразуется в 1–2 микрокоманды, а для сложной инструкции из памяти микрокода (u Code ROM) выбирается последовательность микрокоманд (микропрограмма), которая содержит более двух микрокоманд (технология micro-ops fusion). Используя технологию macro fusion, четыре декодера могут обработать одновременно пять х86 команд, преобразуя их в четыре микрокоманды. В Nehalem увеличилось число пар x86 команд, декодируемых в рамках этой технологии «одним махом». Кроме того, технология macro fusion стала работать и в 64-битном режиме, в то время как в процессорах семейства Core 2 она могла активироваться лишь при работе процессора с 32-битным кодом. Следующее усовершенствование, связанное с повышением продуктивности начальной части исполнительного конвейера, коснулось блока обнаружения циклов в программе Loop Stream Detector. Этот блок появился впервые в процессорах с микроархитектурой Core и предназначался для ускорения обработки циклов. Определяя в программе циклы небольшой длины, Loop Stream Detector (LSD) сохранял их в специальном буфере, что давало возможность процессору обходиться без их многократной выборки из кэша и предсказания переходов внутри этих циклов. В процессорах Nehalem блок LSD стал ещё более эффективен благодаря его переносу за стадию декодирования инструкций. Иными словами, теперь в буфере LSD сохраняются циклы в декодированном виде, из-за чего этот блок стал несколько похож на Trace Cache процессоров Pentium 4. Однако, Loop Stream Detector в Nehalem – это особенный кэш. Во-первых, он имеет очень небольшой размер, всего 28 микроопераций, во-вторых, в нём сохраняются исключительно циклы. После декодирования производится переименование регистров, переупорядочение (Retirement Unit) и сохранение до момента выполнения 128 микрокоманд в буфере (Reorder Buffer). Это количество микрокоманд на 33% больше, чем в Intel Core (96 микрокоманд). На следующем этапе планировщик (Scheduler) через станцию резервирования (Reservation Station – RES), вместимостью до 36 инструкций (Intel Core – 32 инструкции), отправляет микрокоманды непосредственно на исполнительные устройства. Также как Core 2, процессоры с микроархитектурой Nehalem способны отправлять на выполнение до шести микроопераций одновременно. В каждом ядре процессора Intel Nehalem используются три универсальных порта (Port0, Port1, Port5) для связи с различными исполнительными устройствами, два порта (Port3, Port4) для организации записи/загрузки (Store) адреса и данных в память и один (Port2) для организации чтения/выгрузки (Load) данных из памяти. Универсальные порты осуществляют связь с тремя блоками для обработки целочисленных 64-битных данных (ALU), выполнения сдвигов (Shift) и операций сравнения (LEA); с тремя блоками для обработки чисел с плавающей точкой (FAdd, FMul, FPShuffes); с тремя 128-битными блоками для обработки потоковых данных (SSE); с одним блоком для исполнения переходов (Branch); со специальными блоками Divide (деление), Complex Integer (сложные целочисленные операции). В данном процессоре (ядре), как и в любом другом современном процессоре, реализована конвейерная технология обработки команд. Длина каждого из четырех конвейеров составляет 14 ступеней. В микроархитектуре Nehalem Intel продолжила взятый ранее курс на увеличение числа поддерживаемых SIMD инструкций. Пополненный набор команд расширился за счет семи новых инструкций и получил название SSE4.2. В SSE4.2 добавлено пять инструкций, предназначенных для ускорения синтаксического анализа XML-файлов. Также с помощью этих же инструкций возможно увеличение скорости обработки строк и текстов. Ещё две новые инструкции из набора SSE4.2 нацелены на совершенно иные приложения. Первая из них аккумулирует контрольную сумму, а вторая подсчитывает число ненулевых бит в источнике. Новая структура кэш-памяти От двухуровневой структуры кэш-памяти в Intel Core с общим на каждые два ядра L2 кэшем в процессорах Nehalem остался только кэш первого уровня суммарным объёмом 64 Кб, который делится на две равные части для хранения инструкций и данных. Использование разделяемого L2 кэша оказалось весьма проблематичным при увеличении количества ядер. Поэтому в микроархитектуре Nehalem, предполагающей наличие в процессоре до 8 ядер, кэш второго уровня не является разделяемым. Каждое из ядер получило свой собственный L2 кэш со сравнительно небольшим объёмом 256 Кбайт. К двум уровням кэша в Nehalem добавился и L3 кэш, который объединяет ядра между собой и является разделяемым. В результате, L2 кэш выступает буфером при обращениях процессорных ядер в разделяемую кэш-память, имеющую достаточно большой объём. Использование трёхуровневой кэш-памяти невольно вызывает ассоциации с процессорами AMD с микроархитектурой K10, однако кэш-память Nehalem устроена всё же совершенно по-другому. Во-первых, L3 кэш в Nehalem работает на более высокой частоте, которая для первых представителей этого семейства установлена равной 2,66 ГГц. Во-вторых, Intel не стал отказываться от дублирования данных, хранящихся в кэшах первого и второго уровней, в L3 кэше, что обеспечивает в многоядерных процессорах более высокую скорость работы подсистемы памяти. Несмотря на кардинальный пересмотр системы кэширования, алгоритмы работы блоков предварительной выборки не изменились, они в Nehalem целиком позаимствованы из Intel Core. Это означает, что упреждающая выборка данных и инструкций производится только в кэш-память первого и второго уровня. Даже при использовании старых алгоритмов, результативность работы блоков предварительной выборки улучшилась. Объясняется это тем, что L2 кэш в Nehalem индивидуален для каждого ядра, а при такой организации кэш-памяти гораздо легче отслеживать шаблоны в обращениях. Кроме того, благодаря появлению L3 кэша работа блока предварительной выборки не наносит существенного ущерба пропускной способности шины памяти. Кроме того существенно увеличился размер TLB (Translation-Lookaside Buffer). TLB – это высокоскоростной буфер, который используется для установления соответствия между виртуальными и физическими адресами страниц. Увеличение размера TLB, таким образом, позволяет повысить число страниц памяти, которые могут быть одновременно использованы без дополнительных дорогостоящих преобразований по таблицам трансляции адресов, находящимся в обычной памяти. Более того, TLB в процессорах Nehalem стал двухуровневым. Фактически, к унаследованному от процессоров Core 2 TLB был добавлен ещё один буфер второго уровня. При этом новый L2 TLB отличается не только высокой вместительностью, позволяющей сохранять до 512 записей, но и сравнительно низкой латентностью. Ещё одна особенность L2 TLB заключается в том, что он унифицирован и способен транслировать адреса страниц любого размера. Изменения в системе TLB сделаны, в первую очередь, с прицелом на серверные приложения, активно оперирующие большими объёмами памяти. Однако и в «настольных» задачах увеличенное число вхождений TLB может оказать положительное влияние на быстродействие подсистемы памяти. Реализация многопоточности Возвращение в Nehalem технологии SMT – одно из самых существенных нововведений, способных положительно повлиять на производительность (в процессорах Pentium 4, эта же технология преподносилась под маркетинговым именем Hyper-Threading). Внедрение SMT в Nehalem не потребовало существенного увеличения сложности процессора. Продублированы в ядре, фактически, лишь процессорные регистры. Все остальные ресурсы при включении SMT разделяются в процессоре между потоками динамически (например, Reservation Station или кэш-память), либо жёстко пополам (например, Reorder Buffer). Как и в процессорах Pentium 4, активация SMT в Nehalem приводит к тому, что каждое физическое ядро видится операционной системой как пара логических ядер. Например, четырёхъядерный Nehalem будет распознаваться программным обеспечением как процессор с восемью ядрами. Интегрированный в процессор контроллер памяти Nehalem стала первой интеловской микроархитектурой, предполагающей интеграцию контроллера памяти внутрь процессора. Главное свойство контроллера памяти процессоров семейства Nehalem – гибкость. Учитывая модульный дизайн всего семейства процессоров, которое может содержать сильно различающиеся по характеристикам и рыночному позиционированию продукты, Intel предусмотрела возможность не только включать или отключать поддержку буферизированных модулей, но и варьировать число каналов и скорость памяти. При этом первые процессоры с микроархитектурой Nehalem в четырёхъядерном варианте, получили трёхканальный контроллер памяти с поддержкой DDR3 SDRAM. Пропускная способность подсистемы памяти в случае использования трёх модулей DDR3 достигает 25,6 Гбайт/с. Основное преимущество переноса контроллера DRAM в процессор заключается не столько в росте пропускной способности, сколько в уменьшении латентности подсистемы памяти. Ещё одно косвенное преимущество встроенного в процессор контроллера памяти заключается в том, что его функционирование теперь не зависит ни от чипсета, ни от материнской платы. В результате, Nehalem показывает одинаковую скорость работы с памятью при работе в платформах различных разработчиков и производителей. Новая процессорная шина QPI Микроархитектура Nehalem универсальна, она используется как в настольных, мобильных, так и в серверных продуктах. Поэтому при разработке данной микроархитектуры было уделено внимание проектированию новой процессорной шины, которая оказалась бы применима в многопроцессорных системах, обеспечивая необходимую пропускную способность и масштабируемость. Используемая ранее шина FSB в многопроцессорных системах оказывается неприменима, необходимо использовать «распределенную» модель памяти NUMA (Non-Uniform Memory Access), а, следовательно, нужно прямое и высокоскоростное соединение между процессорами. Для решения этой задачи был построен специальный последовательный интерфейс CSI (Common System Interface) с топологией точка-точка, переименованный впоследствии в QPI (QuickPath Interconnect). С технической точки зрения шина QPI представляет собой два 20-битных соединения, ориентированных на передачу данных в прямом и обратном направлении. 16 бит предназначаются для передачи данных, оставшиеся четыре – носят вспомогательный характер, они используются протоколом и коррекцией ошибок. Эта шина работает на максимальной скорости 6,4 миллиона передач данных в секунду (GT/s) и имеет, соответственно, пропускную способность 12,8 Гбайт/с в каждую сторону или 25,6 Гбайт/с суммарно. В зависимости от рыночного ориентирования, процессоры с микроархитектурой Nehalem могут комплектоваться одним или несколькими интерфейсами QPI. В итоге в многопроцессорной системе каждый из процессоров может иметь прямую связь с конечным числом процессоров системы. Модульная структура процессора Важным нововведением в Nehalem стал модульный дизайн процессора. Фактически, микроархитектура сама по себе включает лишь несколько «строительных блоков», из которых на этапе конечного проектирования и производства может быть собран итоговый процессор. Этот набор строительных блоков включает в себя (рис. 3.9) процессорное ядро с L2 кэшем (Core), L3 кэш, контроллер шины (QPIC), контроллер памяти (MC), графическое ядро (GPU), контроллер потребляемой энергии (PCU) и т. д.  Рис. 3. 9. Модульная структура процессора Необходимые «кубики» собираются в едином полупроводниковом кристалле и преподносятся в качестве решения для того или иного рыночного сегмента. Например, процессор Bloomfield, включает в себя четыре ядра, L3 кэш, контроллер памяти и один контроллер шины QPI. Серверные же процессоры с той же архитектурой будут включать до восьми ядер, до четырёх контроллеров QPI для объединения в многопроцессорные системы, L3 кэш и контроллер памяти. Бюджетные же модели семейства Nehalem располагают двумя ядрами, контроллером памяти, встроенным графическим ядром и контроллером шины DMI, необходимым для прямой связи с южным мостом. Управление питанием и Turbo-режим Многие изменения, реализованные инженерами Intel в процессорах Nehalem, связаны с оптимизацией микроархитектуры под врожденное многоядерное строение. Поэтому необходимость пересмотра системы управления питанием процессора назрела сама собой. Многоядерные процессоры с микроархитектурой Соre очень неэкономичны с той точки зрения, что управление энергосбережением в них происходит по единому алгоритму, который практически не учитывает состояния отдельных ядер. И поэтому, например, нередки ситуации, когда одно находящееся под вычислительной нагрузкой ядро препятствует переходу в энергосберегающие состояния остальных ядер, несмотря на то, что они, фактически, простаивают. Именно поэтому микроархитектура Nehalem предполагает наличие в процессоре еще одного важного блока – PCU (Power Control Unit). Этот блок представляет собой встроенный в процессор программируемый микроконтроллер (то есть, по сути процессор в процессоре), целью которого является «интеллектуальное» управление потреблением энергии. Неудивительно, что при этом PCU имеет достаточно сложную конструкцию: на его реализацию ушел примерно 1 миллион транзисторов. Основным предназначением PCU является управление частотой и напряжением питания отдельных ядер, для чего этот блок имеет все необходимые средства. Он получает от всех ядер со встроенных в них датчиков всю информацию о температуре, напряжении и силе тока. Основываясь на этих данных, PCU может переводить отдельные ядра в энергосберегающие состояния, а также управлять их частотой и напряжением питания. В частности, PCU может независимо друг от друга отключать неактивные ядра, переводя их в состояние глубокого сна, в котором энергопотребление ядра приближается к нулевой отметке. Главное преимущество этой технологии состоит в том, что управление питанием отдельных ядер осуществляется целиком внутри процессора и не требует усложнения схемы конвертера питания на материнской плате. Что же касается общих для всех ядер процессорных блоков, таких как контроллеры памяти и интерфейса QPI, то они переходят в энергосберегающие состояния, когда в состоянии сна находятся все процессорные ядра. Технология Turbo Boost Наличие в процессоре контроллера, способного независимо управлять состоянием процессорных ядер, позволило Intel реализовать и еще одну интересную технологию, получившую название Turbo Boost Technology. Эта технология вводит понятие турбо-режима, в котором отдельные ядра могут работать на частоте, превосходящей номинальную, то есть разгоняться. Основной принцип Turbo Boost Technology состоит в том, что при переходе отдельных ядер в энергосберегающие состояния снижается общее энергопотребление и тепловыделение процессора, а это в свою очередь позволяет нарастить частоты остальных ядер без риска выйти за установленные рамки TDP. Фактически, прообраз этой технологии уже был реализован в двухъядерных мобильных процессорах поколения Penryn, однако в Nehalem её развитие продвинулось еще дальше. В новых процессорах, если нет риска выйти за границу типичного энергопотребления и тепловыделения, PCU может повышать частоты процессорных ядер на один шаг выше номинала (133 МГц). Это может происходить, например, при слабо распараллеленной нагрузке, когда часть ядер находится в состоянии простоя. Более того, при соблюдении описанных условий, частота одного из ядер может быть увеличена и на два шага выше номинала (266 МГц). Следует отметить, что необходимым условием включения турбо-режима вовсе не является переход одного или нескольких ядер в энергосберегающее состояние. Это – всего лишь один из возможных сценариев. Так как PCU имеет все средства для получения данных о фактическом состоянии процессорных ядер, турбо-режим может задействоваться и в тех случаях, когда все ядра работают, но нагрузка на часть из них невелика. Большим преимуществом Turbo Boost Technology является ее полная прозрачность для операционной системы. Эта технология реализована исключительно аппаратными средствами и не требует использования никаких программных утилит для своей активации. Процессоры Nehalem Первыми серийными процессорами, основанными на новой микроархитектуре Nehalem, стали настольные модели, известные под кодовым именем Bloomfield. Эти процессоры имеют четырёхядерное строение. Помимо процессорных ядер, в полупроводниковый кристалл Bloomfield включен кэш третьего уровня объёмом 8 Мбайт, трёхканальный контроллер памяти с поддержкой DDR3 SDRAM и один интерфейс QPI. Процессоры с ядром Bloomfiled продаются под именем Core i7 серия 9хх (табл. 3.2). Процессоры Core i7-9хх отличаются от своих предшественников поколения Core 2 не только с точки зрения внутренностей, но и снаружи. Так, новые процессоры используют разъём LGA1366, существенно превосходящий по числу контактов и габаритам привычный LGA775. Стал массивнее и сам процессор. Таблица 3.2 Характеристики процессоров Intel Bloomfield, Intel Lynnfield Характеристики процессора | Core i7 860 | Core i7 870 | Core i7 920 | Core i7 940 | Core i7 950 | Core i7 960 | Техпроцесс ядра CPU, нм | | Количество ядер CPU / исполняемых потоков, шт. | 4/8 | Объем L3 кэш памяти, Мб | | Номинальная частота ЦП, ГГц | 2.8 | 2.93 | 2.66 | 2.93 | 3.06 | 3.2 | Частота ЦП с Turbo Boost (максимум), ГГц | 3.46 | 3.6 | 2.93 | 3.2 | 3.33 | 3.46 | Поддержка НТ (SMT) | Есть | Поддерживаемая память, частота памяти, МГц | DDR3 1066/1333 | DDR3 800/1066 | Количество каналов памяти | | | | | | | Максимальная скорость памяти, Гбайт/сек | | | 25.6 | 25.6 | 25.6 | 25.6 | Технология Intel 64 | Есть | Технология Intel VT-x | Есть | Технология Intel VT-d | Есть | Нет | Технология Intel TXT | Есть | Нет | Технология Intel Speedstep | Есть | TDP, Вт | | | По тактовым частотам процессоры с ядром Bloomfield мало отличаются от своих предшественников из четырёхъядерного семейства Core 2 Quad. А это значит, что преимущество процессоров нового поколения обеспечивается исключительно архитектурными решениями и но-выми технологиями. Что же касается типичного тепловыделения, то у процессоров Bloomfield оно на 45 Вт выше, чем у процессоров Core 2 Quad. Однако в то же время старшие представители четырёхъядерного семейства с микроархитектурой Core, относящиеся к серии Extreme Edition, имеют значение TDP 136 Вт. Процессоры Bloomfield с включённой технологией SMT видны в системе как восьмиядерные. Половина ядер при этом «виртуальна», но Windows Vista никак не фиксирует этот факт. Здесь необходимо сделать важное замечание относительно, детектируемой в диагностической утилите CPU-Z, частоты шины 133 МГц. Дело в том, что также как и в современных процессорах AMD, Intel в Bloomfield отказалась от использования фронтальной шины в её классическом понимании. Частота 133 МГц в данном случае – это просто частота тактового генератора, формирующего все остальные частоты. Например, частота процессора получается как произведение этой величины на коэффициент умножения, аналогичным образом формируется и частота шины памяти, которая использует свой собственный набор множителей. Интерфейс QPI, связывающий процессор с северным мостом, также использует эту частоту в качестве базовой, умножая её на свой собственный коэффициент. Процессорный коэффициент умножения, также как и в предыдущих моделях CPU, будет фиксироваться. Исключение здесь составит ориентированная на оверклокеров модель Core i7-965 Extreme Edition, которая будет обладать разблокированным множителем. Для частоты шины памяти процессоры Core i7-9хх предлагают несколько доступных множителей. Например, Core i7-965 Extreme Edition предлагает выбор между 6x, 8x, 10x и 12x, что означает поддержку этим процессором DDR3-800/1067/1333/1600 SDRAM. Частота интерфейса QPI будет варьироваться в разных моделях CPU. Так, в Core i7-965 Extreme Edition эта шина работает на частоте 3,2 ГГц, в то время как на Core i7-940, 920 её частота понижена до 2,4 ГГц. Следующая линейка процессоров Intel Core i7-8хх с ядром Lynnfield отличается от предыдущей (см. табл. 3.2) двухканальным интегрированным контроллером памяти, уменьшенным TDP, увеличенной частотой шины памяти 1066/1333 МГц, встроенным в процессор контроллером шины графического адаптера PCI Express x16, использованием системной шины DMI для связи процессора с южным мостом чипсета, более агрессивной реализацией технологии Turbo Boost. С помощью этой технологии в процессорах с ядром Bloomfield номинальная частота процессоров может быть увеличена на две ступени (266 МГц) базовой частоты тактового генератора (133 МГц). В процессорах же с ядром Lynnfield – на 5 ступеней (665 МГц). Из табл. 3.2 следует, что все процессоры поддерживают технологии Intel 64, Intel VT-x, Intel Speed Step, Intel Turbo Boost. Процессоры с ядром Lynnfield поддерживают технологии Intel VT-d, Intel TXT. Технология VT-x – технология виртуализации, позволяющая запускать виртуальную или «гостевую» операционную систему из под основной ОС. Технология VT-d – данная технология дополняет Intel VT-x и добавляет новый уровень аппаратной поддержки виртуализации устройств ввода/вывода. Технология TXT – (Trusted Execution Technology, ранее известная как LaGrande) – защищает информацию, хранящуюся в виртуальных вычислительных средах. Благодаря изолированию используемой памяти посредством аппаратной системы защиты, эта технология обеспечивает безопасность информации, хранящейся в одном виртуальном разделе, и предохраняет от несанкционированного доступа со стороны приложений, расположенных в другом разделе. 3.4.4. Семейство процессоров Intel Westmere Основываясь на ошеломляющем успехе 45-нм производственного процесса с диэлектриками high-k и транзисторами с металлическими затворами, корпорация Intel в конце 2009 г. запустила 32-нм производственную технологию, в которой используются диэлектрики high-k и транзисторы с металлическими затворами второго поколения. Эта технология стала основой для новой 32-нм версии микроархитектуры Intel Nehalem. Новые процессоры Intel семейства Westmere стали первыми процессорами, созданными по нормам 32-нм техпроцесса. Эти процессоры известны под кодовыми названиями Clarkdale и Arrandale, предназначены для применения, соответственно, в настольных компьютерах и ноутбуках, и входят в модельные линейки Intel Core i3, i5, i7. Процессоры Intel Westmere представляют собой двухъядерные решения. Кроме того, в их конструкции присутствуют два несущих кристалла (см. рис. 3.10), один из которых, выпускаемый по 32-нм техпроцессу, включает в себя два вычислительных ядра, разделяемую L3 кэш-память, контроллер шины QPI. Второй, более крупный кристалл, изготавливаемый по 45-нм технологии, содержит графический процессор GPU, двухканальный контроллер памяти DDR3, контроллер интерфейса PCI Express 2.0 и контроллер шин DMI и FDI (Flexible Display Interface). Взаимодействие между двумя кристаллами происходит по высокоскоростной шине QPI. В таблице 3.3 приведены характеристики процессоров Intel Clarkdale. Таблица 3.3. Характеристики процессоров Intel Clarkdale Характеристики процессора | Core i3 530 | Core i3 540 | Core i5 650 | Core i5 660 | Core i5 661 | Core i5 670 | Техпроцесс ядра CPU, нм | | Техпроцесс ядра GPU, нм | | Количество ядер CPU / исполняемых потоков, шт. | 2/4 | Объем L3 кэш памяти, Мб | | Номинальная частота ЦП, ГГц | 2.93 | 3.06 | 3.2 | 3.33 | 3.33 | 3.46 | Частота ЦП с Turbo Boost (максимум), ГГц | N/A | N/A | 3.46 | 3.6 | 3.6 | 3.73 | Частота GPU, МГц | | | | | | | Поддержка НТ | Есть | Поддерживаемая память, частота памяти, МГц | Dual Channel DDR3, 1333 | Технология Intel vPro | Нет | Нет | Есть | Есть | Нет | Есть | Технология Intel VT-x | Есть | Технология Intel VT-d | Нет | Нет | Есть | Есть | Нет | Есть | Технология Intel TXT | Нет | Нет | Есть | Есть | Нет | Есть | Набор инструкций AES-NI | Нет | Нет | Есть | TDP, Вт | | | | Из таблицы следует, что все процессоры поддерживают технологию Hyper-Threading (HT) или SMT, увеличивающую число вычислительных потоков, и технологию виртуализации VT-x. В большинстве процессоров реализованы новые инструкции из расширения AES-NI для ускорения выполнения алгоритмов шифрования и расшифровки. В этих же процессорах выполняется технология Turbo Boost, которая позволяет разгонять одно из вычислительных ядер до повышенных частот, что ускоряет работу с однопоточными приложениями. Последний рекорд был установлен в начале 2010 г. тайваньским энтузиастом. Тогда процессор Core i5-670 с базовой частотой 3,46 ГГц, для охлаждения которого использовался жидкий азот, был разогнан до 7 ГГц, что подтверждают опубликованные скриншоты приложения CPU-Z. Кроме того, половина процессоров (см. табл. 3.3) поддерживают технологии: Intel vPro, Intel VT-d, Intel TXT. Технология Intel vPro – аппаратно-программный комплекс, который позволяет получить удаленный доступ к компьютеру для мониторинга параметров системы, технического обслуживания и удаленного управления, вне зависимости от состояния операционной системы. Очевидно, что данная технология актуальна для корпоративного сектора, где своевременное обслуживание ПК – одна из приоритетных задач IT-отделов.  Рис. 3.10. Структура процессоров Intel семейства Westmere 3.4.5. Микроархитектура AMD К10 Микроархитектура AMD К10 является логическим продолжением вполне удачной в свое время (2003 г.) микроархитектуры К8 (AMD Athlon64), обладавшей двумя важными достоинствами: встроенным в кристалл процессора контроллером памяти и независимой шиной Hyper-Transport. Микроархитектура К8 использовалась для построения только первого поколения двухъядерных процессоров. Для создания последующих поколений двухъядерных и четырехъядерных процессоров AMD использовала микроархитектуру К9 (AMD Athlon64 Х2), а с 2007 года – К10. Тогда AMD удалось опередить Intel в выпуске настоящего четырехъядерного процессора (AMD Phenom). В то время, как CPU семейства Core 2 Quad представляли собой склейку пары двухъядерных CPU, выполненных в одном процессорном корпусе, AMD Phenom являлся полноценным четырехъядерным решением. Впрочем, компоновка четырех процессорных ядер на одном кристалле имела и обратную сторону. Дело в том, что такие полупроводниковые кристаллы, произведенные по 65-нм технологии, получили достаточно большие геометрические размеры. Это, естественно, привело к ощутимому снижению выхода годных кристаллов и повышению себестоимости производства. Однако, AMD смогла придумать, каким образом можно избавиться от значительной части отбраковки. Компания начала поставки трехъядерных и двухъядерных процессоров, которые изготавливались из кристаллов Phenom с одним или двумя бракованными ядрами (AMD Phenom X3, Phenom X2). Другая проблема, вытекающая из большого размера кристалла процессоров первого поколения К10 – относительно невысокие тактовые частоты, диктуемые необходимостью держать тепловыделение CPU в приемлемых рамках. Эта проблема частично решена AMD в процессорах второго поколения Phenom II и Athlon II, когда производство CPU встало на более современный 45-нм техпроцесс. Структура ядра процессора AMD К10 Каждое ядро процессора имеет выделенный кэш L1 данных и инструкций размером по 64 Кбайт (КВ) каждый, а также выделенный кэш L2 размером 512 КВ (см. рис. 3.11). Кроме того реализован разделяемый между всеми ядрами кэш L3 размером 2 МВ (такой кэш отсутствовал в микроархитектуре AMD K8). Процессор К10 производит выборку инструкций (Instruction Fetch Unit) из кэша команд L1 выровненными 32-байтными блоками, в отличие от процессоров К8 и Intel Core, которые производили выборку 16- байтными блоками.  Рис. 3.11. Структурная схема ядра процессора на базе микроархитектуры AMD K10 В архитектуре AMD K8 длина блока выборки инструкций была согласована с возможностями декодера. В архитектуре К10 возможности декодера изменились, в результате чего потребовалось изменить и размер блока выборки, чтобы темп выборки инструкций был сбалансирован со скоростью работы декодера. В К10 предсказание переходов (Branch Prediction Unit) существенно улучшено. Во-первых, появился механизм предсказания косвенных переходов, т. е. переходов, которые производятся по указателю, динамически вычисляемому при выполнении кода программы. Во-вторых, предсказание выполняется на основе анализа 12 предыдущих переходов, что повышает точность предсказаний. В-третьих, вдвое (с 12 до 24 элементов) увеличена глубина стека возврата. Как большинство современных х86-процессоров, имеющих внутреннюю RISC-архитектуру, в процессоре К10 внешние х86-команды декодируются во внутренние RISC-инструкции, для чего используется декодер команд. Процесс декодирования состоит из двух этапов. На первом этапе выбранные из кэша L1 блоки инструкций длиной 32 байта (256 бит) помещаются в специальный буфер преддекодирования (Predecode/Pick Buffer), где происходит выделение инструкций из блоков, определение их типов и отсылка в соответствующие каналы декодера. Декодер транслирует х86-инструкции в простейшие машинные команды (микрооперации), называемые micro-ops (µOp). Сами х86-команды могут быть переменной длины, а вот длина микроопераций уже фиксированная. Инструкции х86 разделяются на простые и сложные. Простые инструкции при декодировании представляются с помощью одной-двух микроопераций, а сложные команды – тремя и более микрооперациями. Простые инструкции отсылаются в аппаратный декодер, построенный на логических схемах и называемый Direct Path, а сложные – в микропрограммный декодер, называемый Vector Path. Он содержит память микрокода, в которой хранятся последовательности микроопераций. Аппаратный декодер Direct Path является трехканальным и может декодировать за один такт: три простые инструкции, если каждая из них транслируется в одну микрооперацию; либо одну простую инструкцию, транслируемую в две микрооперации, и одну простую инструкцию, транслируемую в одну микрооперацию; либо две простые инструкции за два такта, если каждая инструкция транслируется в две микрооперации (полторы инструкции за такт). Таким образом, за каждый такт аппаратный декодер выдает три микрооперации. Микропрограммный декодер Vector Path также способен выдавать по три микрооперации за такт при декодировании сложных инструкций. При этом сложные инструкции не могут декодироваться одновременно с простыми, т. е. при работе трехканального аппаратного декодера микропрограммный декодер не используется, а при декодировании сложных инструкций, наоборот, бездействует аппаратный декодер. Микрооперации, полученные в результате декодирования инструкций в декодерах Vector Path и Direct Path поступают в буфер Pack Buffer, где они объединяются в группы по три микрооперации. В том случае, когда за один такт в буфер поступает не три, а одна или две микрооперации (в результате задержек с выбором инструкций), группы заполняются пустыми микрооперациями, но так, чтобы в каждой группе было ровно три микрооперации. Далее группы микроинструкций отправляются на исполнение. Если посмотреть на схему декодера в микроархитектурах К8 и К10, то видимых различий казалось бы нет. Действительно, схема работы декодера осталась без изменений. Разница в данном случае заключается в том, какие |