Архитектура процессоров AMD
Перейдем к рассмотрению микроархитектуры процессора AMD Athlon 64, который лежит в основе процессоров 10 поколения (Phenom II). Как ожидается, в середине 2010 года на смену этой отлично обкатанной, но устаревшей архитектуре придет новая, известная в данный момент под кодовым именем Bulldozer.

AMD Athlon 64
Существует достаточно много версий ядра процессоров AMD Athlon 64, которые различаются технологией производства, размером кэш-памяти и другими незначительными изменениями архитектуры.
Однако в основе всех этих ядер лежит одна и та же микроархитектура. Микроархитектура AMD существенно отличается от рассмотренной микроархитектуры процессоров Intel. Сравнивая конструктивную схему ядра процессора на основе микроархитектуры AMD 64 со схемой легендарного К7 (ядра, ставшего основой процессоров AMD Athlon), можно заметить, что общих черт у них больше, чем различий. Однако, несмотря на внешнее сходство, новое ядро процессора все же претерпело существенные изменения. Итак, обо всем по порядку.
Ядро процессора
Схема работы ядра нового процессора в полной мере соответствует рассмотренной схеме «классического» процессора. Поток инструкций в формате х86-64 ISA (о том, что это такое, мы расскажем чуть позже) поступает в схему предпроцессора (Front End) из кэша L1. Кэш первого уровня (L1) остался точно таким же, как и в процессорах семейства Athlon ХР, то есть имеет общий размер 128 Кбайт и разделен на кэш данных (D-cache) и кэш инструкций (I-cache), каждый размером по 64 Кбайт. Кэш L1 остался ассоциативным двухканальным с размером кэш-блока 64 байт. Кэш инструкций поддерживает два набора дескрипторов (тегов): fetch port (порт выборки) и snoop (слежение).

Архитектура процессора AMD Athlon 64
Кэш данных поддерживает 40-битный физический и 48-битный линейный адреса и уже три типа тегов: port A, port В и snoop. Кроме того, кэш данных поддерживает две 64-битные операции записи/чтения за один такт в различные банки кэша. Кэш второго уровня (L2) может иметь максимальный размер до 1 Мбайт. Сам кэш является эксклюзивным по отношению к кэшу L1,16-канальным, ассоциативным. Как и в большинстве современных х86-совместимых процессоров, имеющих внутреннюю RISC-архитектуру, в процессоре с архитектурой AMD 64 внешние CISC- команды декодируются во внутренние RISC-инструкции, для чего используется декодер команд.
Сначала инструкции х86 разделяются на большие (Large х86 Instruction) и маленькие (Small х86 Instruction). Большие, или сложные, инструкции поступают в программный (Microcode Engine) декодер, а маленькие, или простые, — в аппаратный (Fastpath) декодер. Оба декодера выполняют одну и ту же задачу — транслируют х86-инструкции в простейшие машинные команды (микрооперации), называемые Ops. Сами х86-команды могут быть переменной длины, а вот длина микроопераций уже фиксированная.
Простые инструкции при декодировании представляются с помощью двух-трех Ops-команд, и с этой задачей вполне может справиться аппаратный декодер, построенный на логических схемах. Сложные команды при декодировании могут представляться несколькими десятками и даже сотнями Ops-инструкций. Чтобы их декодировать, используется специализированный программный декодер, представляющий собой своеобразный процессор. Такой декодер содержит программный код, хранящийся в MIS (Microcode Instruction Sequencer), на основе которого воспроизводится последовательность Ops-инструкций.

Структурная схема процессора AMD Athlon 64
Каждый из двух декодеров может обрабатывать инструкцию длиной до 16 байт и выдавать по три Ops-инструкции за такт, поэтому в общей сложности оба декодера производят шесть декодированных инструкций за каждый такт процессора.
Попутно отметим, что декодер в новом ядре претерпел существенные изменения. Именно в него были добавлены две ступени конвейера по сравнению с ядром процессора Athlon ХР. Кроме того, известно, что если в ядре Athlon ХР команды SSE декодировались с использованием Microcode Engine, то есть считались сложными, то в новом ядре эти команды декодируются с использованием Fastpath, то есть являются простыми.
После прохождения декодера Ops-инструкции (по три за каждый такт) поступают во временный буфер хранения, называемый Instruction Control Unit (ICU). Этот буфер рассчитан на хранение 72 декодированных инструкций. Впрочем, хранение — не единственное предназначение ICU, а его главная задача заключается в диспетчеризации трех инструкций за такт по функциональным устройствам. То есть ICU распределяет инструкции в зависимости от их назначения и посылает инструкции по работе с целыми числами в целочисленный планировщик (Int. Scheduler), а инструкции для работы с вещественными числами — в планировщик для работы с вещественными числами (FPU Scheduler).
Планировщик для работы с вещественными числами рассчитан на 36 инструкций (как и в процессоре Athlon ХР), и его основная задача заключается в том, чтобы распределять команды по исполнительным блокам по мере их готовности. Просматривая все 36 поступающих инструкций, FPU-планировщик переупорядочивает следование команд, строя спекулятивные предположения о дальнейшем ходе программы, чтобы создать несколько полностью независимых друг от друга очередей инструкций, которые можно выполнять параллельно. В ядре процессора имеются три исполнительных блока нужных в работе с вещественными числами (FADD, FMUL и FMISC), поэтому FPU-планировщик должен формировать по три инструкции за такт, направляя их на исполнительные блоки.
Все целочисленные инструкции направляются в планировщик инструкций для работы с целыми числами, образованный тремя станциями резервирования (RES), каждая из которых рассчитана на восемь инструкций. Все три станции, таким образом, формируют планировщик на 24 инструкции (емкость аналогичного планировщика в процессоре Athlon ХР составляла 18 инструкций). Этот планировщик выполняет те же функции, что и FPU-планировщик. Различие заключается в том, что в процессоре имеется семь функциональных исполнительных блоков по работе с целыми числами (три устройства ALU, три устройства AGU и одно устройство MULT).
Исполнительные устройства также претерпели некоторые изменения по сравнению с процессором Athlon ХР. Как уже отмечалось, для работы с вещественными числами реализовано три функциональных устройства FPU, каждое из которых представляет собой 17-ступенчатый конвейер (как и в процессоре Athlon ХР), то есть в работе с вещественными числами предусмотрено три разделенных конвейера. Подобная реализация блока FPU позволяет выполнять до трех вещественных операций за такт, причем такая производительность является рекордной для х86-совместимых процессоров.
Блок операций с целыми числами также полностью конвейеризирован, но по сравнению с процессором Athlon ХР длина конвейера увеличена с 10 до 12 ступеней. Блок состоит из трех распараллеленных частей, что в итоге позволяет выполнять три целочисленные операции за один такт (кроме умножения). В умножении требуется три такта в случае 32-битных чисел и пять тактов в случае 64-битных.
Говоря об архитектурных особенностях нового ядра, нельзя не упомянуть об изменениях, коснувшихся кэша TLB (Translation Look-aside Buffers). Кэш TLB — это специальный кэш процессора, хранящий карту декодированных адресов инструкций и данных, что позволяет значительно сократить время доступа к ним. Данный кэш предназначен для уменьшения времени преобразования виртуального адреса данных или инструкций в физический. Дело в том, что процессор, в силу своих особенностей, не может хранить и использовать физические адреса, а пользуется виртуальной адресацией. Преобразование виртуального адреса в физический занимает приблизительно три такта процессора. TLB-кэш хранит результаты предыдущих преобразований, благодаря чему преобразование адреса данных, использовавшихся ранее, возможно осуществлять за один такт.
Ядро процессора имеет двухуровневый TLB (LI TLB и L2 TLB), также разделяющийся на буфер данных и буфер инструкций. LI TLB кэширует 40 адресов инструкций и 40 адресов данных. Этот кэш является полностью ассоциативным и поддерживает страницы емкостью как 4 Кбайт, так и 2 или 4 Мбайт.
Кэш L2 TLB является четырехканальным ассоциативным кэшем с поддержкой страниц емкостью 4 Кбайт. Этот кэш рассчитан на 512 записей, что в два раза больше, чем в процессоре Athlon ХР.
64-разрядная архитектура процессора
Как уже отмечалось, одним из главных новшеств процессоров AMD Athlon 64 является 64-разрядная архитектура х86-64 ISA. Прежде всего попытаемся ответить на вопрос: зачем вообще нужны 64-разрядные процессоры и имеют ли они преимущество перед 32-разрядными? Давайте вспомним, что 32-разрядная адресация памяти позволяет адресовать только 4 Гбайт памяти. Конечно, для пользовательских приложений на данный момент такого объема вполне хватает, но... это сейчас. А завтра все может измениться. В серверных приложениях 4 Гбайт памяти уже сегодня может оказаться явно недостаточно. Правда, современные серверные процессоры и чипсеты с х86-32-архитектурой позволяют адресовать более чем 4 Гбайт памяти (типичным значением является 12 Гбайт), но достигается это не за счет плоской прямой адресации, а за счет эмуляции 36-битной адресации (которая позволяет адресовать до 64 Гбайт памяти). Впрочем, такая адресация имеет и свои минусы. Во-первых, это отражается на производительности, а во-вторых, при такой эмуляции максимальная память, которую может использовать один поток приложения, все равно не превышает 4 Гбайт.
64-битная адресация, используемая в процессорах AMD Athlon 64, является полностью совместимой с архитектурой х86-32, то есть на таком процессоре вполне можно использовать и 32-разрядные приложения — просто при этом возможности процессора задействуются не в полной мере, но в любом случае дополнительный запас адресации не повредит. Последнее обстоятельство, то есть возможность использования обычных 32-разрядных приложений, в этом плане особенно важно. Для таких процессоров не потребуется специализированных операционных систем и программ, и нет нужды ждать, пока производители ПО перекомпилируют свои приложения.
Для реализации 64-разрядности в процессор добавлено несколько новых регистров, а существующие регистры соответственно расширены с 32 до 64 бит. Так, к восьми регистрам общего назначения добавлено еще восемь 64-битных регистров, использование которых возможно только при соответствующей перекомпиляции программного кода.
Расширение 32-битных регистров до 64-битных осуществляется точно так же, как в свое время (с момента появления процессора i386) 16-битные регистры были расширены до 32-битных.
Для реализации возможности работы как с 32-битными, так и с 64-битными приложениями процессор поддерживает два режима работы: Long Mode и Legacy Mode. В Long Mode используется 64-битный режим работы, причем здесь также предусмотрено два режима: 64-битный и Compability Mode (совместимый). 64-битный режим работы — это, собственно, истинный 64-битный режим, задействующий все дополнительные регистры процессора и 64-битные расширенные регистры. Для работы в этом режиме требуется соответствующая перекомпиляция ПО.
В режиме Compability Mode дополнительные регистры не задействуются, а в регистрах общего назначения используется только 32-битная часть. Единственное, что в данном случае напоминает о 64-битной архитектуре, — это использование 64-разрядной адресации и 64-битной операционной системы. В данном режиме не требуется перекомпиляции приложений для их нормальной работы.
В режиме Legacy Mode используется 32-разрядная операционная система, то есть 32-разрядная адресация. Кроме того, не задействуются дополнительные регистры, а в регистрах общего назначения используются только первые 32 бита. Таким образом, Legacy Mode — это традиционный 32-битный режим работы процессора.
Описав особенности ядра процессора, можно перейти к рассмотрению других элементов его архитектуры.
Контроллер памяти
Контроллер памяти в AMD Athlon 64 интегрирован в сам процессор. Традиционно он располагается в северном мосте чипсета на материнской плате. Собственно, контроллер памяти — это основной функциональный блок северного моста. Недаром в чипсетах Intel этот мост называют МСН (Memory Controller Hub). Преимущество такого решения очевидно — контроллер памяти, интегрированный в процессор, обеспечивает низкую латентность при обращении к памяти. Контроллер памяти процессора поддерживает ООИ2-память (DDR2-533/667/800) в двухканальном режиме работы и имеет ширину шины 64 бита.
Сам по себе контроллер памяти включает два функциональных блока: контроллер памяти МСТ и контроллер DRAM DCT. DCT — это физический интерфейс, зависящий от конкретного типа используемой памяти. МСТ — интерфейс согласования ядра процессора с DCT, не зависящий от типа используемой памяти.
Контроллер HyperTransport
Революционным новшеством процессора AMD Athlon 64 является поддержка шины Hyper Transport — универсальной шины межчипового соединения. В ее основу положены две концепции: универсальность и масштабируемость. Универсальность шины Hyper Transport заключается в том, что она позволяет связывать между собой не только процессоры, но и другие компоненты материнской платы, о чем мы еще расскажем. Масштабируемость шины дает возможность наращивать пропускную способность в зависимости от конкретных нужд пользователя.
Устройства, связываемые по шине Hyper Transport, соединяются по принципу «точка — точка» (peer-to-peer), что подразумевает возможность связывания в цепочку множества устройств без использования специализированных коммутаторов. Передача и прием данных могут происходить в асинхронном режиме, причем передача данных организована в виде пакетов длиной до 64 байт.
Масштабируемость шины HyperTransport обеспечивается посредством магистрали шириной 2, 4, 8,16 и 32 бита в каждом направлении. Кроме того, предусматривается возможность работы на различных тактовых частотах. При этом передача данных происходит по обоим фронтам тактового импульса.
