Intel и AMD: понемногу об архитектурных новшествах

«Не поймите меня правильно»

Картина 1: Прибытие Intel, как архитектурного паровоза

Не будем ломать копий (и так, если помнится, изведено немало леса) на тему, каким должен был быть Pentium 4 и каким он стал — первая «работа над ошибками» (Northwood) уже на носу. Давайте, лучше, приглядимся, что скрывается за возможной сменой железнодорожной колеи (читай архитектуры), которая вот уже не первый год отодвигается от поезда информационной индустрии, словно горизонт. Итак, взгляд Intel:

  1. Плавно продвигать совершенно новую архитектуру IA-64, начав с серверного сегмента и постепенно, в течении 4-х и более лет, спускать ее вниз.
  2. Практически полностью программная (очень медленная) совместимость с IA-32 оставлена только для выполнения не подлежащего перекомпиляции «критического наследия».
  3. Операционная система должна быть «исконно» IA-64.
  4. Наблюдается негласная тенденция прощупать возможность по переходу к *NIX подобным системам (вероятно, новые системы с человеческим лицом, а-ля MacOS X) от Windows (имеется ввиду Windows старой архитектуры).
  5. Все это время планируется параллельно развивать линейку IA-32 процессоров, не совершая резкого перехода, а следуя по пути их постепенного вытеснения, включая появление совместимых по шине моделей IA-64 и IA-32.

Очевидно, что подобная рокировка может сдвинуть MS с того насиженного места монополиста «массовых» ОС, которое она сейчас занимает. С другой стороны, переход на IA-64 успешно затягивается вследствие целого набора причин, и это может помочь MS адаптироваться к 64 битной архитектуре, тем же образом, коим в свое время она отреагировала на широкое распространение 32-х бит.

Давайте вспомним, как некогда необходимость как можно скорее полноценно использовать преимущества 32 битной адресации и страничного MMU породила на свет гибрид интерфейсов и API Windows с многозадачным ядром серьезной архитектуры (Windows NT). Который, кстати, спроектировала команда серьезного идеолога не менее серьезных систем, пришедшего в Microsoft из DEC. Впрочем, стройная архитектура ядра еще не гарантировала общую стройность системы, сравнимую с гораздо более аристократичными OpenVMS или *NIX, в комплекте с интерфейсом Windows, в одной коробке — как известно, MS способна исковеркать и запутать любое стройное начинание. Что, собственно, и произошло — современные вариации на тему NT ужасают своей громоздкостью, мешаниной технологий и API. Не рискну судить насколько это хорошо или плохо, но системы MS скорее не проектируются, а эволюционно развиваются, зачастую методом многочисленных проб и ошибок. Избежать рудиментов в ходе такого биологического подхода, как известно, невозможно. Но самое опасное — это переборщить с мутациями, которые вполне могут выйти из под контроля (камень в огород .NET со всеми прибамбахами, типа активации).

Итак — два возможных сценария:

  1. Дальнейшее развитие NT, портированной на IA-64.
  2. Создание нового, более отвечающего времени, ядра системы и перенос на него API (не всех, а самых перспективных) из NT. Остальные приложения выполняются в режиме эмуляции (виртуальной NT машины), как это было в свое время с DOS задачами под NT.

Понятно, что MS удобнее первый сценарий — переход на новую архитектуру системы всегда давался этой софтопекарне нелегко. Однако, если она почувствует, что положение портированной Windows NT на 64 битной сцене слишком «шатко» — MS способна решиться и на второй сценарий. Насколько успешно в технологическом плане? Не успешнее, чем это было с NT — чуда ждать не приходится. А в маркетинговом — скорее наоборот: тут, как известно, MS способна творить сплошные чудеса.

Тем временем, задержка с внедрением IA-64 играет MS на руку, да и не последняя причина задержки (если так можно выразиться) — она сама, а точнее, специфика изначально плохо портируемого исходного кода Win32*, огромными объемами которого на данный момент запаслись практически все известные производители программных продуктов.

Кроме «софтверных» сдерживающих факторов, Intel существенно ограничена факторами экономическими — IA-64 весьма охоча до пропускной полосы памяти, и желательная для нее 128-битность процессорной шины продолжает (уже достаточно давно) быть неприемлемой, с экономической точки зрения, для массового сектора ПК. Следовательно, приходится ждать технологии памяти (вот беда, растут они медленно), и использовать для повышения полосы пропускания не ширину шины, а более хитрые DDR/QDR и иже с ними интерфейсы. Кроме того, средние цены на ПК падают, что, вкупе с надвинувшимся кризисом IT, сдерживает любые технологические инициативы, направленные на скачкообразное усложнение чего-либо ради существенного увеличения производительности. Ну и, последняя проблема — невостребованность этой самой производительности современными приложениями — т. е. разрыв в скорости развития между железными и программными технологиями, который все более затрудняет работу маркетологов, не способных эффективно убедить кого-либо в необходимости перехода на новую архитектуру.

Исходя из всего изложенного можно выделить два основных препятствия, сдерживающих развитие архитектуры ПК. Назовем их фактор «Э» (экономический) и фактор «С» (софтовый).

Фактор «Э» в принципе преодолевается — хотя бы благодаря возможности масштабировать архитектуры, продавая их, в том числе, и в серверном или научноконструкторском секторе, снимая жирные сливки с целью окупить разработку еще до выхода на массовый рынок. А вот с фактором «С» необходимо мириться — каких-либо качественных сдвигов тут пока не предвидится.

Мы приходим к парадоксальному выводу — тот самый всем привычный тандем Wintel в данный момент существенно сдерживает Intel. Нелегко быть паравозом, который тащит всю индустрию. Возможно, гораздо легче быть паровозом который ее тормозит (намек в сторону MS), по крайней мере в моменты кризиса, когда все начинает катится в тартарары.

Картина 2: AMD, как бережливый экстендер своих владений

Протолкнуть полностью новую (несовместимую с x86) архитектуру на рынок AMD не способна. Кроме того, ей совершенно бессмысленно это делать — она не претендует на место паравоза, а скорее наоборот, играет роль моторно-генераторного вагона, в моменты кризиса успешно преобразовывая остаточную энергию движения поезда IT-индустрии в деньги. Итак, что мы имеем здесь:

  1. Продвигать двоично совместимую с IA-32 архитектуру x86-64, являющуюся 64 бит расширением классической IA-32.
  2. Также, как и Intel начать продвижение с серверного сектора (кто бы сомневался)
  3. Сделать ставку на поддержку этой расширенной архитектуры операционными системами Microsoft, особенно в свете возможного провала MS на поле IA-64

Разумеется, AMD тоже рискует, но ее риск совершенно иного порядка. Она рискует как обычно — просто уменьшением роста и так не очень большой доли рынка, вследствие возможного успеха IA-64. Т.е. она находится в более выгодном, нежели Intel, положении. Даже если роль операционок MS существенно снизится в результате какого-либо чуда, на смену им придут портируемые открытые системы, которые в той же степени развяжут руки Intel, в которой и AMD. Более того, эмуляция, необходимая для совместимости со старыми приложениями, дастся AMD легче.

Еще один интересный аспект — любой «ленивый» кризис индустрии играет скорее на руку AMD. Все начинают считать деньги, активность перемещается в менее развитые регионы, да и просто репутация «недорогих» решений идет за AMD уже достаточно давно, хотя, ныне она уже и не столь радикальна. Вместе с хорошей начинкой (диск, ускоритель) решения на базе платформы от Intel немного дороже и порой немного медленнее. Последний же пункт (топовая производительность процессора) в последнее время все менее важен. Гораздо больше хочется получить адекватное 3D ускорение, нормальный объем памяти и, самое главное, надежность и сохранность данных. А кто-то идет дальше, задумываясь о тишине или объеме системного блока (все эти рассуждения следуют в разумных пределах — разумеется, я говорю о еще производимых процессорах, скажем 600 МГц и выше, скорость которых, что называется, достаточна).

Интересен и подход этих компаний к маркетингу — Intel с удовольствием спонсирует рекламу своих дилеров и реселлеров, проводит множество программ, нацеленых на поддержку фирм торгующих компонентами и решениями. AMD рассказывает о том, какие они бедные, как им тяжело, и в лучшем случае присылает готовые рекламные материалы (проспекты), которые реселлеры должны в итоге сами и распространять. Основным же маркетинговым аргументом, как и прежде, остается либо цена, либо производительность/цена. При этом, в последнее время AMD все же осознала необходимость серьезных рекламных кампаний, но, они будут проводиться фирмой напрямую, в обход партнеров более низких уровней.

Прошу не принимать вышеизложенные факты за выражение моей антипатии или симпатии к AMD (уже надоело, честное слово :-) ) — это просто описание различных подходов к бизнесу — фактически, обе фирмы все делают вполне здраво и разумно, особенно разумно поступает AMD. Они заняли позицию, котороя не позволяет им существенно перевернуть сложившуюся на рынке ситуацию, но при этом здорово страхует их при любом раскладе (а ведь ныне кризис). Еще и на рекламе экономят, а продажы при этом медленно, но верно растут… Но, подобный подход годен только при наличии хорошего паровоза (читай Intel). А если с ним что-то случится, что будет тогда?

Вопрос надежности можно объяснить просто — за все приходится платить, в том числе, за более дешевый и при этом более быстрый процессор. А выгодно ли (или нет) платить за какие-то дополнительные средства защиты — каждый должен решать сам.

Картина 3: 64 борозды и простор регистрового поля…

А собственно, так ли они нужны эти 64 бита? Да, мы слышали об огромных базах данных, но наших личных ПК это вряд ли касается. Да, современные носители давно превысили 32-х битный порог (4 ГБ). Да, память этот порог скоро перейдет (как раз, магическая цифра в 4 года, при сохранении нынешних темпов развития). Да, большие файлы с видео будет проще держать. Точность и скорость вычислений? Тут хватает SIMD расширений. Ускорение пересылки данных? Да нет, все как обычно упрется в процессорную шину. Увеличение эффективности исполнения кода и использования блоков процессора (побочное следствие перекомпиляции)? Здесь (в разы) основное преимущество за новой архитектурой IA-64, да и то, все очень плотно завязано на успехи компиляторов, а процессор Hammer от AMD получит только считанные проценты преимущества в новом коде. С другой стороны, от Hammer не требуется расходовать 64 бита (а следовательно память) там, где они не нужны, достаточно просто запустить старый 32 битный код…

Кроме того, не будем забывать, что в последнее время разрыв по производительности между RISC и x86 процессорами уменьшается, пусть и ценою большего тепловыделения и сложности разработки последних.

Картина 4: AMD, с «Hammer» в руках, починяет x86

Давайте посмотрим поближе, что представляет собою новая архитектура x86-64 от AMD:

  1. 8 новых регистров общего назначения R8-R15;
  2. Все регистры общего назначения расширены до 64 бит (RAX=R1, включает EAX, AX, AH и AL; RBX=R2, RCX=R3 и т. д.);
  3. Указатель инструкций расширен до 64 бит;
  4. 8 новых SSE регистров XMM8-XMM15;
  5. новые, дополнительные режимы адресации;
  6. инструкции для вызова системных сервисов SYSCALL/SYSRET;
  7. новый префикс, командный префикс (и режим работы процессора) LONGMODE, разрешающий использование 64 битных регистров;
  8. поддержка работы с 64 бит стеком;
  9. новый контрольный регистр — регистр приоритета текущей задачи (Task Priority Register) позволяет определять, прерыванием какого уровня дозволено прервать выполнение кода текущей задачи;
  10. Добавлен новый уровень (четвертый) каталога страниц, чтобы MMU мог эффективно управлять в страничном режиме 64 битным адресным пространством (фактически, в текущей реализации архитектуры перекрываются не все 64 бита, а только 48 это и есть текущее ограничение архитектуры x86-64 на физический объем памяти)
  11. Добавлены новые форматы дескрипторов сегментов, адресующие все 64 бита адресного пространства

Как мы видим, по большому счету ничего нового — сугубо количественное развитие архитектуры происходит по сценарию, предложенному Intel давным-давно, еще для перехода x86 с 16 на 32 бита. Регистры расширены, добавлены новые, внесены небольшие изменения в систему команд, в основном, за счет появления новых командных префиксов. Сохранена полная бинарная совместимость со всеми 16 и 32 битными ОС, и 64 бита данные и код могут быть использованы совместно с 32/16 битными. Характерный пример: адаптация компиляторов и *NIX ОС для этой архитектуры произошла мгновенно, и практически без проблем — за хронологией можно проследить на www.x86-64.org.

Но, и революционного прироста производительности ожидать не стоит — все, что действительно ускорит работу — это наличие дополнительных регистров. Учитывая высокую скорость загрузки данных из кэша первого уровня, а также существенный уровень суперскалярности современных x86 процессоров, можно прогнозировать очень небольшой прирост производительности, по крайней мере, для распространенных алгоритмов. Плюс 10-20% это все, на что мы можем рассчитывать. На подобное значение частота процессора вырастает за несколько месяцев — время меньшее, чем было потрачено на разработку этого расширения системы команд.

С другой стороны и усложнение внутренней структуры процессора будет невелико — оно произойдет в основном за счет увеличения числа и разрядности сходных блоков, а не за счет действительного усложнения алгоритмов их работы (вспомним, что конкурентная IA-64 призвана радикально упростить процессор, перенеся большинство забот на плечи компилятора).

Итак, ничего радикального и никаких проблем с переходом. Hammer не за горами — ждем первых ударов по наковальне рынка. Кроме того, позднее, вполне логично ожидать вариант Hammer с технологией SMP или SMT на чипе. О последней мы сейчас и поговорим.

Картина 5: Intel красуется, примеряя к себе наследие CRAY и Alpha

Intel, в свою очередь, приобщается к высокой моде серверных RISC архитектур. Помните, была такая архитектура — Alpha. Собственно она и сейчас есть, но уже как бы и нет, потому что все знают — последнее, так и не разработанное до конца 5-ое поколение чипов на базе этой архитектуры не выйдет в свет уже никогда. Именно в нем разработчики собрались воплотить в кремении, давно уже примеренную к архитектуре (об этом говорилось еще во время анонса первого процессора, много лет назад) возможность аппаратной многотредности (multithreading). Вообще, если оглянуться, мы обнаружим, что Alpha являет собою наглядный пример того, как плохой маркетинг может убить прекрасные начинания. Огромное количество новых или хорошо забытых старых идей, невероятная для своего времени производительность и битность, причем каждый раз на основе достаточно посредственной (не самой передовой из доступных) технологий. Чем был не идеал?

Между тем, прошли годы, и недавно Intel решилась анонсировать свой «Джексон текнолоджи» (Jackson Technology) — технологию аппаратной многотредности. Начнем с начала — в чем основная проблема современных суперскалярных процессоров, обвешаных десятками блоков для одновременной загрузки, обработки и сохранения данных? Проблема во взаимных зависимостях этих самых данных. Нельзя одновременно загрузить, обработать и сохранить одно и тоже число. Более того, нельзя его загрузить, обработать и сохранить, до того, как оно было сохранено в предыдущий раз. Ужас какой-то, сплошные ограничения. Основная проблема тут лежит даже не столько в компиляторах, сколько в самом коде — человеку свойственно писать алгоритмы в виде последовательности связанных действий, а не хаотичного набора непересекающихся формул, более оптимального для суперскалярного исполнения. Да еще и маленькое число регистров x86, на которые компилируется код, только усугубляет все это — процессору тяжело распараллеливать столь взаимозависимые инструкции, которые вынуждены топтаться в рамках 4-5 регистров. Поэтому на обычном коде, как правило, половина (!) исполнительных блоков процессора простаивает. Весь пафос ситуации в том, что усложнить x86 процессор, добавив исполняющих блоков, стоит сейчас гораздо дешевле и занимает меньше времени, нежели разработка учитывающего все тонкости его работы оптимизирующего компилятора!

Окей, мы не можем уйти от зависимости команд, но мы можем начать исполнять два независимых потока команд одновременно. Берем, вводим второй регистр указателя адреса (EIP-2) и к каждой транслированной микрокоманде привешиваем дополнительный битик, который говорит нам, к какому потоку команд — первому или второму она относится. Соответственно, не забываем продублировть и регистр флагов. Все остальные регистры дублировать не надо — их и так, как известно на кристалле в избытке, и они динамически переименуются. Просто теперь, вешая ярлык при переименовании, мы будем держать в голове не один, а целых два виртуальных набора регистров. Еще несколько мелочей для правильной обработки прерываний и все!. Мы получили два процессора в одном. Единственное ограничение — оба потока команд сожительствуют в одном адресном пространстве, т.е. могут выполнять только различные треды одной задачи. Но для современных приложений, как правило ориентированных на мультитредность, это не проблема. Напоследок назовем все это SMT (Simultaneous Multi Threading).

Давайте посмотрим что мы имеем. С одной стороны сложность кристалла модифицированного таким образом Pentium 4, выросла на ~5%. Очень мило. С другой стороны, на большинстве задач его производительность увеличилась на 10%-15%, на некоторых задачах — на 30 % и даже более. Много это или мало? Не так много как могло бы быть. В чем причина?

  1. число выполняющих блоков и их роли сбалансированны в расчете на один поток команд;
  2. необходимо увеличить пропускную способность (число портов) кэша первого уровня;
  3. необходимо увеличить (существенно!) число запускаемых одновременно на выполнение и выполняемых команд;
  4. необходимо увеличить пул переименуемых регистров и число портов этого пула.

Два последних пункта наиболее существенно сдерживают эту технологию. Кстати, именено поэтому Intel серъезно призадумалась, прежде чем публично анонсировать эту технологию для x86 — последняя Alpha (EV8) в силу гениальной простоты архитектуры выжимала почти четерехкратное преимущество в «инструкциях за такт» при четырех аппаратно исполняемых тредах веб-сервера, 2.5-кратное на задачах БД…

Интересно, что в Alpha предполагался несколько иной путь — железного спекулятивного (с предсказанием) переименования регистров там нет и регистровый файл просто делился между тредами. Если же Intel исполнит эти четыре пожелания, то можно добиться 50% прироста производительности на типичных задачах (не так плохо для затейливой CISC). Но, с другой стороны, это потребует серьезного редизайна процессора. Что же, подождем — увидим. Пока же эта технология не более чем демонстрация «мозговых мускул» Intel и вероятного пути развития современных IA-32 процессоров.

Однако, ходят интересные слухи на тему нестандартного использования SMT. Представим себе специальный компилятор, создающий код для двух тредов. Один из них основной (вычислительный), а второй — вспомогательный и занимается тем, что обеспечивает осознанную (т.е. с учетом выполняемого алгоритма) предвыборку данных! Дергая те адреса памяти, которые через некоторое время понадобятся основному вычислительному треду. Памятуя о существенном времени простоя при загрузки данных в кэш, не следует удивляться, узнав, что при использовании такой модели выигрыш на многих задачах может быть до 70%. Ждем реализации в компиляторе!

В то же время, HP реализует полный SMP на чипе с объединенным кэшем третьего уровня, IBM занимается тем же, да и Sun грозится в ближайшее время выдать SMT решение в рамках своей линейки UltraSparc. Им можно — серверные процессоры могут стоить дорого. А как же быть с настольными системами, пойдет ли Intel так же далеко, развивая IA-32 или не успеет (как вариант — не захочет), полностью переключившись на IA-64? Время покажет.

И только Alpha почила в бозе, дав в свое время распространение самому понятию многотредности в ОС общего назначения и почти доведя до конца разработку аппаратной микропроцессорной задумки на эту тему (впрочем, первые публикации об аппаратном SMT датированы 1978 годом, первая аппаратная реализация имела место в Cray CDC 6600, CPU которого, впрочем, не был одночиповым. Кроме того, по слухам, некий отечественный военный компьютер MARS-M также аппаратно реализовывал подобную технологию. Ну, да много чему еще дала дорогу Alpha — не поленитесь, почитайте спецификации архитектуры — вы будете удивлены, еще больше, чем был когда то удивлен в 1995 (если не ошибаюсь) году я, прочитав документацию, и увидев живьем первые 200 МГц DEC Alpha Station и 150 МГц Alpha PC в давно уже исчезнувшей конторе Digital Audio Lab, куда меня занесли ненароком превратности моей еще школьной тогда судьбы…

Картина 6: неоконченная. Торжественное зажжение лампочки Мура

Господа, а что же вы будете делать с теплом? Куда девать все эти ватты, число которых возрастает год от года? Впрочем это уже тема для отдельного разговора о транзисторах, электронах, киловаттах, корпусах и пр. Об этом в следующий раз…

С наступающими!




12 декабря 2001 Г.

Intel AMD: IA-64 x86-64, SMT

Intel AMD:

« »

1: Intel,

( , , ) , Pentium 4 — « » (Northwood) . , , , ( ), , . , Intel:

  1. IA-64, , 4- , .
  2. ( ) IA-32 « ».
  3. «» IA-64.
  4. *NIX (, , - MacOS X) Windows ( Windows ).
  5. IA-32 , , , IA-64 IA-32.

, MS «» , . , IA-64 , MS 64 , , 32- .

, 32 MMU API Windows (Windows NT). , , , Microsoft DEC. , , OpenVMS *NIX, Windows, — , MS . , , — NT , API. , MS , , . , , . — , ( .NET , ).

— :

  1. NT, IA-64.
  2. , , API ( , ) NT. ( NT ), DOS NT.

, MS — . , , Windows NT 64 «» — MS . ? , NT — . — : , , MS .

, IA-64 MS , ( ) — , , Win32*, .

«» , Intel — IA-64 , 128- ( ) , , . , ( , ), , DDR/QDR . , , , IT, , - . , — — . . , , - .

, . «» () «» ().

«» — , , , , . «» — - .

— Wintel Intel. , . , ( MS), , .

2: AMD,

( x86) AMD . , — , , - , IT- . , :

  1. IA-32 x86-64, 64 IA-32.
  2. , Intel ( )
  3. Microsoft, MS IA-64

, AMD , . — , IA-64. .. , Intel, . MS - , , Intel, AMD. , , , AMD .

— «» AMD. , , «» AMD , , . (, ) Intel . ( ) . 3D , , , . - , ( — , , 600 , , , ).

— Intel , , . AMD , , , (), . , , , /. , AMD , , , .

AMD ( , :-) ) — — , , AMD. , , ( ). , , … , ( Intel). - , ?

— , , . ( ) - — .

3: 64 …

, 64 ? , , . , 32- (4 ). , ( , 4 , ). , . ? SIMD . ? , . ( )? ( ) IA-64, , , Hammer AMD . , Hammer 64 ( ) , , 32 …

, , RISC x86 , .

4: AMD, «Hammer» , x86

, x86-64 AMD:

  1. 8 R8-R15;
  2. 64 (RAX=R1, EAX, AX, AH AL; RBX=R2, RCX=R3 . .);
  3. 64 ;
  4. 8 SSE XMM8-XMM15;
  5. , ;
  6. SYSCALL/SYSRET;
  7. , ( ) LONGMODE, 64 ;
  8. 64 ;
  9. — (Task Priority Register) , ;
  10. () , MMU 64 (, 64 , 48 x86-64 )
  11. , 64

, — , Intel -, x86 16 32 . , , , , . 16 32 , 64 32/16 . : *NIX , — www.x86-64.org.

, — , — . , x86 , , , . 10-20% , . — , .

— , (, IA-64 , ).

, . Hammer — . , , Hammer SMP SMT . .

5: Intel , CRAY Alpha

Intel, , RISC . , — Alpha. , , — , 5- . , ( , ) (multithreading). , , , Alpha , . , , ( ) . ?

, , Intel « » (Jackson Technology) — . — , , ? . , . , , , , . -, . , — , , . x86, , — , 4-5 . , , (!) . , x86 , , , !

, , . , (EIP-2) , , — . , . — , , . , , , . !. . — , .. . , , . SMT (Simultaneous Multi Threading).

. Pentium 4, ~5%. . , 10%-15%, — 30 % . ? . ?

  1. ;
  2. ( ) ;
  3. (!) ;
  4. .

. , Intel , x86 — Alpha (EV8) « » -, 2.5- …

, Alpha — ( ) . Intel , 50% ( CISC). , , . , — . « » Intel IA-32 .

, SMT. , . (), — , (.. ) ! , . , , , 70%. !

, HP SMP , IBM , Sun SMT UltraSparc. — . , Intel , IA-32 ( — ), IA-64? .

Alpha , (, SMT 1978 , Cray CDC 6600, CPU , , . , , MARS-M . , Alpha — , — , , 1995 ( ) , , 200 DEC Alpha Station 150 Alpha PC Digital Audio Lab, …

6: .

, ? , ? , , , . …

!