Микроархитектура AMD Bobcat против Intel Atom
Внеочередное выполнение команд
Сравнение микроархитектур AMD Bobcat и Intel Atom
Процессоры на базе микроархитектуры AMD Bobcat
Грядущий 2011 год ознаменуется сразу несколькими важными событиями на рынке процессоров: компания Intel анонсирует новую процессорную микроархитектуру Sandy Bridge, а компания AMD — сразу две микроархитектуры: Bobcat и Bulldozer. Если точнее, то микроархитектура AMD Bobcat будет официально объявлена в конце этого года, однако продукты на основе процессоров с микроархитектурой AMD Bobcat станут доступны лишь в следующем году. Так что баталии на рынке процессоров могут развернуться нешуточные.
В прошлом номере нашего журнала мы детально рассмотрели особенности микроархитектуры Intel Sandy Bridge, а в данной статье поговорим об AMD Bobcat, сравнив ее с решениями конкурента.
Общие сведения
Несмотря на то что микроархитектура AMD Bobcat, как ожидается, будет объявлена еще до конца текущего года, а решения с процессорами на ее основе появятся в продаже в начале следующего, о ней известно куда меньше, нежели о микроархитектуре Bulldozer, которую компания объявит лишь в 2011 году. Мы попытались собрать все сведения о микроархитектуре AMD Bobcat и предлагаем их вниманию читателей.
Процессорная микроархитектура AMD Bobcat должна была появиться еще в 2009 году, но, как мы уже отмечали, процессоры на ее основе выйдут лишь в 2011 году, то есть с задержкой в три года. Впрочем, в случае AMD говорить о задержке с выходом новых процессорных микроархитектур, возможно, не совсем уместно. Дело в том, что компания Intel имеет четкий план внедрения новой процессорной микроархитектуры каждые два года (в сегменте мобильных, настольных и серверных процессоров x86). У компании AMD подобного плана не существует: новые процессорные микроархитектуры внедряются по мере их готовности и не так часто, как это происходит у компании Intel. А потому появление каждой новой процессорной микроархитектуры AMD — это действительно неординарное событие.
Впрочем, мы несколько отвлеклись от темы. Итак, процессорная микроархитектура Bobcat ориентирована на рынок процессоров для нетубуков, планшетов, ультрамобильных ноутбуков и прочих мобильных устройств с низким энергопотреблением. В этом смысле микроархитектура Bobcat является прямым конкурентом микроархитектуры Intel Atom. По одним данным, энергопотребление процессора с микроархитектурой Bobcat составит менее 1 Вт, а по другим — от 1 до 10 Вт.
Справедливости ради отметим, что если в сегменте мобильных, настольных и серверных процессоров x86 компания Intel следует стратегии смены микроархитектуры каждые два года, то в сегменте процессоров для нетбуков, неттопов и прочих гаджетов такой стратегии у нее нет. Так, процессорная микроархитектура Intel Atom не изменялась со времени ее анонсирования в 2007 году.
Наверное, самое важное различие между Bobcat и Intel Atom заключается в том, что в микроархитектуре Bobcat предусмотрена возможность внеочередного выполнения команд (Out-of-Order), в то время как микроархитектура Intel Atom предусматривает лишь возможность последовательного выполнения команд (In Order). Собственно, из-за этой особенности процессоров Bobcat их иногда в шутку называют процессорами Intel Atom с внеочередным выполнением команд (Bobcat=Out of Order Intel Atom).
Внеочередное выполнение команд
Сделаем небольшое отступление, чтобы объяснить, что такое внеочередное выполнение команд, дабы стало понятно, почему такая возможность процессоров столь важна и почему она не предусмотрена в процессорах Intel Atom.
Вплоть до появления микроархитектуры Intel Pentium Pro (P6) все процессоры выполняли инструкции (микрооперации) в порядке их поступления. В случае, когда для выполнения очередной микрооперации требуется знание результата предыдущей микрооперации, такая микроархитектура последовательного выполнения микроопераций вполне логична и оправданна. Однако, как правило, фрагменты программного кода независимы друг от друга, то есть несколько операций (необязательно последовательных) могут выполняться одновременно при наличии соответствующего количества исполняющих блоков. Рассмотрим элементарный пример простейшего программного кода:
A=B+C.
D=C+A.
E=F+G.
H=K+E.
Пусть все операнды являются целочисленными и в гипотетическом процессоре имеются два исполнительных блока для работы с целочисленными данными. Предположим (конечно, упрощенно), что для выполнения каждой операции требуется ровно n тактов работы процессора. В случае процессора с микроархитектурой выполнения инструкций в порядке их поступления рассмотренный программный код может быть выполнен за 3n такта, поскольку 2-я и 3-я инструкции независимы друг от друга и могут выполняться параллельно на двух исполнительных блоках. Однако нетрудно заметить, что если изменить порядок выполнения инструкций, то данную программу можно выполнить и за 2n тактов. Действительно, 1-ю и 3-ю инструкции, а также 2-ю и 4-ю инструкции можно выполнять параллельно. Процессоры, способные выполнять переупорядочение инструкций не в порядке их поступления (Out-of-Order), называются процессорами с внеочередным выполнением инструкций.
Вообще, процессоры, оснащенные механизмом параллельного исполнения нескольких идущих подряд команд (так называемые суперскалярные процессоры), вовсе не обязаны быть процессорами с внеочередным выполнением инструкций. Верно, впрочем, и обратное утверждение: процессор с внеочередным выполнением инструкций гипотетически может и не иметь суперскалярной микроархитектуры (хотя таких процессоров в реальности не существует). Всё дело в том, что техника переупорядочения инструкций используется не только для того, чтобы повысить уровень параллелизма их выполнения, но и для сглаживания латентности доступа к оперативной памяти.
Если, например, инструкция A обратилась к оперативной памяти, а нужных данных в кэше не оказалось, то процессор с внеочередным выполнением инструкций сможет пропустить вперед другие инструкции, не зависящие от результатов выполнения инструкции A.
Отметим, что первый суперскалярный процессор, поддерживающий внеочередное выполнение инструкций, был разработан Сеймуром Креем (Seymour Cray) еще в 60-х годах XX века. Компания Intel выпустила свой первый суперскалярный процессор с внеочердным выполнением инструкций в 1995 году (Intel Pentium Pro), а компания AMD — в 1996-м (K5). С тех пор все процессоры Intel и AMD были суперскалярными с внеочередным выполнением команд. Все, но только не процессор Intel Atom, который был разработан компанией Intel в 2007 году для весьма специфического сегмента рынка. Собственно, процессор Intel Atom имеет суперскалярную архитектуру, но без возможности переупорядочения команд. Казалось бы, почему компания Intel не предусмотрела в этом процессоре такой функциональности, если возможность переупорядочения команд позволяет существенно повысить производительность процессора?
Ответ прост: Intel Atom изначально разрабатывался как недорогой процессор с очень низким энергопотреблением для специфического класса устройств. Сразу предполагалось, что процессором Intel Atom будут оснащаться устройства выхода в Интернет, и не более того. Понятно, что для обеспечения выхода в Сеть высокая производительность процессора не нужна, а потому не было смысла наделять процессор Intel Atom дополнительной логикой внеочередного выполнения команд (Out-of-Order). Собственно, наличие логики Out-of-Order сделало бы процессор Intel Atom, во-первых, более дорогим, во-вторых, существенно увеличило бы его энергопотребление, втретьих, повысило бы размер кристалла, а вчетвертых, процессор обладал бы избыточной производительностью. В то время, когда разрабатывался процессор Intel Atom, отказ от использования блока Out-of-Order был самым эффективным способом существенно уменьшить энергопотребление процессора, а сверхнизкое энергопотребление и есть главная отличительная черта Intel Atom.
Сегодня концепция использования интернет-устройств на базе процессоров Intel Atom несколько изменилась. Фактически из устройств выхода в Интернет с минимальной функциональностью эти устройства трансформировались в устройства потребления контента. В связи с этим теперь наблюдается явный дефицит производительности процессоров Intel Atom. Частично проблему недостаточной производительности компания Intel решила за счет перехода от одноядерных к двухъядерным моделям процессоров Intel Atom, однако понятно, что это лишь попытка залатать дыры, так как без кардинального пересмотра микроархитектуры процессора проблему дефицита его производительности решить нельзя. А потому можно предположить, что в следующем поколении микроархитектуры Intel Atom блок Out-of-Order всё же будет добавлен. Правда, когда компания Intel объявит новую мироархитектуру процессора Intel Atom, пока неизвестно (предположительно это будет в 2013 году).
На фоне явного дефицита процессора Intel Atom появление новой конкурентной суперскалярной микроархитектуры AMD Bobcat с внеочередным выполнением команд кажется очень своевременным. Пока еще рано говорить о том, насколько хорошим получится у компании AMD процессор Bobcat, но, скорее всего, он сможет весьма успешно конкурировать с процессорами Intel Atom, опережая их по производительности. Вопрос лишь в том, сможет ли Bobcat обеспечить при этом столь же низкое энергопотребление, как процессор Intel Atom.
Сравнение микроархитектур AMD Bobcat и Intel Atom
Как мы уже отмечали, не успела компания AMD придать гласности общие детали микроархитектуры AMD Bobcat, как эту микроархитектуру окрестили Out-of-Order Intel Atom. Действительно, между микроархитектурами Intel Atom и AMD Bobcat много общего. Так, длина конвейера в AMD Bobcat составляет 15 ступеней (рис. 1), а в Intel Atom — 16 (рис. 2).
Рис. 1. Конвейер микроархитектуры AMD Bobcat
Рис. 2. Конвейер микроархитектуры Intel Atom
Теперь самое время рассмотреть микроархитектуру AMD Bobcat более детально и сравнить ее с микроархитектурой Intel Atom.
Блоксхема ядра процессора на базе AMD Bobcat показана на рис. 3, а на базе Intel Atom — на рис. 4.
Рис. 3. Блок-схема ядра процессора на базе микроархитектуры AMD Bobcat
Рис. 4. Блок-схема ядра процессора на базе микроархитектуры Intel Atom
Ядро процессора AMD Bobcat имеет кэш L1 размером 64 Кбайт, который делится на кэш инструкций (L1I) размером 32 Кбайт и кэш данных (L1D) также размером 32 Кбайт. Оба кэша являются 8-канальными с латентностью в три такта. Пожалуй, это всё, что известно относительно кэша L1 в микроархитектуре AMD Bobcat. Остальные характеристики (длина строки, протокол поддержания когерентности, политика доступа и записи, алгоритм замещения, архитектура (включающая или исключающая)) пока не разглашаются компанией AMD. Кэш L2 функционирует на половинной частоте ядра и имеет размер 512 Кбайт. О нем известно лишь то, что он является 16-канальным, а латентность доступа к кэшу составляет 17 тактов.
Для сравнения отметим, что в процессоре Intel Atom кэш L1 разбит на кэш инструкций размером 32 Кбайт и кэш данных размером 24 Кбайт. Кэш L1I является 8-канальным с временем доступа в 3 такта, а кэш L1D — 6-канальным с временем доступа в 3 такта.
Кэш L2 в процессоре Intel Atom имеет размер 512 Кбайт и является 8-канальным с временем доступа 19 тактов.
В микроархитектуре AMD Bobcat используется блок предсказания ветвлений (Branch Predictor) и двухуровневый (отдельно для команд и данных) буфер преобразования виртуальных адресов в физические (TLB-буфер). Увы, но подробностей относительно блока предсказания ветвлений и TLB-буфера компания AMD пока не разглашает. Напомним, что в микроархитектуре Intel Atom используется двухуровневый адаптивный предсказатель ветвлений с таблицей глобальной истории переходов (GBHT) на 4096 ячеек и 12-битной индексацией. Буфер адресов переходов (BTB) имеет всего 128 ячеек.
При работе любого x86-процессора инструкции x86 выбираются из кэша L1I. Команды загружают из кэша блоками фиксированной длины, из которых выделяются инструкции, направляемые на декодирование. Поскольку инструкции x86 имеют переменную длину, а блоки, которыми команды загружаются из кэша, — фиксированную длину, при декодировании команд нужно определить границы между отдельными командами.
Как правило, информация о размерах команд хранится в кэше инструкций L1 в специальных полях. Если точнее, то для этого применяется так называемый буфер тэгов предекодирования, связанный с L1I. В принципе, эту информацию для определения границ команд можно было бы использовать в самом декодере непосредственно в процессе декодирования команд. Однако это неизбежно отразилось бы на скорости декодирования, да и нельзя было бы декодировать одновременно несколько команд. Поэтому перед декодированием производится выделение команд из выбранного блока. Данная процедура называется предварительным декодированием (PreDecode). Процедура предварительного декодирования позволяет поддерживать постоянный темп декодирования независимо от длины и структуры команд.
Известно, что в микроархитектуре Intel Atom x86-инструкции загружаются из кэша L1I блоками по 8 байт. С учетом того, что средняя длина x86-инструкции составляет 4 байта, получаем, что в среднем в процессоре Intel Atom за каждый такт из кэша L1I загружаются две команды. Для ускорения предварительного декодирования, то есть выделения отдельных инструкций из загруженного блока инструкций, кэш L1I связан с буфером тэгов предекодирования, где хранится разметка границ команд.
Что касается микроархитектуры AMD Bobcat, то мы не обладаем данными относительно того, какими блоками происходит загрузка x86-инструкций и как осуществляется предварительное декодирование. Но исходя из того, что в AMD Bobcat применяется двухканальный декодер, можно предположить, что, как и в Intel Atom, x86-инструкции загружаются блоками по 8 байт, а это позволяет в среднем передавать на декодирование две инструкции за каждый такт (из расчета средней длины инструкции в 4 байт). Опять-таки можно лишь предположить, что схема выделения команд из загружаемого блока используется точно такая же, как и в процессоре Intel Atom.
После выделения из загруженных блоков отдельные инструкции организуются в очередь (Instruction Queue), а затем передаются в декодер. При декодировании (Decode) команды преобразуются в машинные микрооперации.
В микроархитектуре Intel Atom для декодирования x86-инструкций применяется двухканальный декодер, состоящий из двух простых декодеров, каждый из которых может декодировать в каждом такте по одной простой инструкции x86 в одну микрооперацию. Вообще, в традиционных схемах декодера обычно присутствует сложный декодер, который способен декодировать сложные инструкции, распадающиеся на тричетыре микрооперации. Но в микроархитектуре Intel Atom сложный декодер не используется, а для декодирования всех сложных инструкций, которые распадаются на более чем одну микрооперацию, применяется блок uCode Sequenser (микросеквенсор). В микроархитектуре Intel Atom микросеквенсор выдает по две микрооперации за такт. Попутно заметим, что в традиционных схемах декодеров микросеквенсор используется в том случае, когда x86-инструкция распадается на количество микроопераций, превышающее число выдаваемых за такт сложным декодером, то есть когда сложный декодер не способен декодировать инструкцию.
В микроархитектуре Intel Atom с двухканальным декодером декодирование двух инструкций за такт возможно только в том случае, если в одном 8-байтном блоке содержится не менее двух x86-инструкций. Однако существуют команды и длиннее 4 байт, и при загрузке нескольких таких команд в одном блоке эффективность декодирования снижается.
В микроархитектуре AMD Bobcat для декодирования x86-инструкций также применяется двухканальный декодер, связанный с микросеквенсером (uCode Sequenser). Собственно, компания AMD не разглашает подробностей относительно используемого декодера, но можно предположить, что здесь всё точно так же, как и в микроархитектуре Intel Atom, то есть двухканальный декодер состоит из двух простых декодеров, способных декодировать в каждом такте по одной простой инструкции x86, а для декодирования всех сложных инструкций применяется микросеквенсер.
Отметим, что в микроархитектуре Intel Atom используется технология Micro-Fusion, то есть слияние двух микроопераций в одну, содержащую два элементарных действия. В дальнейшем две такие слитые микрооперации обрабатываются как одна, что в результате позволяет снизить количество обрабатываемых микроопераций и тем самым увеличить общее количество исполняемых процессором инструкций за один такт. Понятно, что слияние двух микроопераций возможно далеко не для всех пар микроопераций.
Применяется ли технология слияния микроопераций в микроархитектуре AMD Bobcat, нам не известно. Во всяком случае, эта технология применительно к микроархитектуре AMD Bobcat нигде не упоминается.
После процесса декодирования x86-инструкций начинается этап их исполнения. Собственно, в этомто и заключается главное различие между микроархитектурами Intel Atom и AMD Bobcat.
В микроархитектуре Intel Atom все декодированные микрооперации сначала поступают в буфер очереди микроопераций (Instruction Queues), рассчитанный на 32 микрооперации, после чего передаются на два исполнительных кластера: скалярный целочисленный (общего назначения) для работы с целочисленными данными и векторно-вещественный для работы с данными FP/SIMD. Ситуация здесь подобна той, что имела место с u- и v-конвейерами в процессорах Intel Pentium III, один из которых был основным (для работы с целочисленными данными), а второй — вспомогательным. Исполнительные кластеры (их можно также называть исполнительными конвейерами — суть от этого не меняется) могут обмениваться друг с другом данными (например, при преобразовании форматов), для чего требуется четыре-пять тактов.
Исполнительный кластер общего назначения, который вполне можно назвать главным кластером, соединен к кэшем данных L1D. А вот векторно-вещественный кластер не может напрямую общаться с кэшем L1D.
Каждый исполнительный кластер может выполнять две команды за такт процессора, но не более двух в сумме.
Пожалуй, стоит также обратить внимание на тот факт, что в каждом кластере используется физический регистровый файл (FP и INT Register File), в котором хранятся операнды микроопераций. Это позволяет микрооперациям сохранять лишь указатели на операнды, но не сами операнды. С одной стороны, такой подход дает возможность уменьшить энергопотребление процессора, поскольку перемещение по конвейеру микроопераций вместе с их операндами требует существенных затрат энергии, а с другой — использование физического регистрового файла позволяет сэкономить на размере кристалла.
Ну а теперь посмотрим на постпроцессор в микроархитектуре AMD Bobcat.
Первое, что бросается в глаза, — это наличие всё тех же двух исполнительных кластеров, как и в микроархитектуре Intel Atom. Первый кластер (INT Cluster), который можно назвать основным, предназначен для целочисленных операций, а второй (FP Cluster) — для работы с вещественными данными.
Самое главное, что оба исполнительных кластера наделены логикой Out-of-Order, то есть имеют блоки переупорядочения микроопераций для их внеочередного выполнения.
Первоначально происходит переименование и распределение дополнительных регистров процессора (блоки INT Rename и FP Rename), которые не определены архитектурой набора команд. Переименование регистров позволяет добиться исполнения команд вне очереди. Идея переименования регистров заключается в следующем. В архитектуре x86 количество регистров общего назначения сравнительно невелико: доступно восемь регистров в 32-битном режиме и 16 — в 64-битном. Представим, что исполняемая команда дожидается загрузки значений операндов в регистр из памяти. Это долгая операция, и было бы удобно на это время использовать данный регистр для другой команды, операнды которой находятся ближе (например, в кэше первого уровня). Для этого «ждущий» регистр временно переименовывается и отслеживается история переименования. А «готовому к работе» регистру присваивается стандартное имя, чтобы снабженную операндами команду исполнить прямо сейчас. По приходе данных из памяти обращаются к истории переименования и возвращают изначальному регистру его законное имя. Техника переименования регистров позволяет сократить простои, а ведение истории переименования применяется для нивелирования конфликтов.
На следующем этапе происходит переупорядочение микроопераций не в порядке их поступления (Out-of-Order) с тем, чтобы впоследствии можно было реализовать их более эффективное выполнение на исполнительных блоках. Для этого используется буфер переупорядочения (ReOrder Buffer, ROB). К сожалению, компания AMD не оглашала характеристики блока Out-of-Order, в частности неизвестен размер буфера ROB, как, впрочем, и размеры других буферов.
После переупорядочения микроопераций происходит их распределение по исполнительным блокам, для чего применяются планировщики задач (Scheduler), выполняющие функцию диспетчеризации и связанные с портами функциональных устройств (dispatch ports). Опять-таки никакие подробности неизвестны, то есть мы не знаем, на какое количество микроопераций рассчитаны планировщики задач. Известно лишь, что в AMD Bobcat используются три отдельных планировщика: один для вещественных операций (в кластере для работы с FP-данными) и два отдельных планировщика в кластере для работы с целочисленными данными, один из которых предназначен для целочисленных арифметических операций, а второй — для загрузки блоков генерации адресов памяти (Address Generation Unit, AGU).
Всего в целочисленном кластере имеются четыре функциональных устройства. Одно функциональное устройство может производить только простейшие арифметические операции (блок ALU); другое функциональное устройство, кроме блока ALU, содержит целочисленный умножитель. Кроме того, имеются блок AGU для загрузки адреса (LAGU) и блок для хранения (SAGU).
Вещественный кластер содержит два исполнительных конвейера (они различаются своей функциональностью), но оба конвейера являются 64-битными, то есть все команды векторной обработки будут исполняться вдвое дольше, чем у настольных процессоров. Попутно заметим, что в микроархитектуре AMD Bobcat предусмотрена поддержка таких SIMD-расширений, как SSE, SSE2, SSE3 и SSE4A. А вот расширения 3DNow и AVX поддерживаться не будут.
Отметим, что в AMD Bobcat, так же как и в Intel Atom, используются физические регистровые файлы (PRF) отдельно для целочисленного и вещественного кластеров, что позволяет существенно сэкономить на энергопотреблении процессора.
Процессоры на базе микроархитектуры AMD Bobcat
Итак, мы в общих чертах рассмотрели особенности микроархитектуры AMD Bobcat и попытались, насколько это возможно, сравнить ее с микроархитектурой Intel Atom. Остается добавить, что процессоры Intel Atom поддерживают технологию Hyper-Threading, а процессоры с микроархитектурой AMD Bobcat — нет.
Процессоры на базе микроархитектуры AMD Bobcat станут первым воплощением концепции AMD Fusion, то есть будут объединять вычислительные ядра x86 и графическое ядро на одном кристалле. Напомним, что такие процессоры в терминологии компании AMD называются APU (Acceleration Processor Unit).
Первой реализацией APU c процессорными ядрами на базе микроархитектуры AMD Bobcat станет двухъядерный процессор с кодовым наименованием Ontario. Этот APU, представляющий собой систему на чипе (System on Chip, SoC), будет интегрировать в себе два ядра AMD Bobcat, новейший графический ускоритель Cedar (80 потоковых процессоров) с поддержкой DirectX 11 и контроллер памяти DDR3.
Выпускаться APU Ontario будет компанией TSMC, причем по 40-нм техпроцессу. Отметим, что в производстве CPU и GPU традиционно используются различные нормы техпроцессов. В частности, сейчас компания Intel производит свои процессоры по техпроцессу 32 нм, а в следующем году перейдет на техпроцесс 22 нм. Процессоры компании AMD производятся по 45-нм техпроцессу, на следующий год переход запланирован на 32-нм техпроцесс.
Компания TSMC занимается производством графических процессоров, причем как для компании AMD, так и для компании NVIDIA. В настоящее время все современные графические процессоры основаны на базе 40-нм техпроцесса (ранее они базировались на 55-?нм техпроцессе), именно поэтому APU Ontario будет производиться по 40-нм техпроцессу.