Процессоры изнутри. Процессоры изнутри Платформа AMD Spider: общие характеристики

Для компаний Intel и Hewlett-Packard не существует "проблемы 2000 года" - для них это год новых возможностей. В конце 1999 года Intel планирует представить Merced - первый процессор, построенный с использованием архитектуры нового поколения, совместно разработанной двумя компаниями. Хотя эта 64-разрядная архитектура основана на многолетних исследованиях Intel, HP, других компаний и университетов, она радикально отличается от всего, что было до сих пор представлено на рынке. Достигнет эта архитектура успеха или нет, одно очевидно уже сейчас: она изменит всю компьютерную индустрию.

Эта архитектура, известная под названием Intel Architecture-64 (IA-64), полностью "порывает с прошлым". IA-64 не является как 64-разрядным расширением 32-разрядной архитектуры х86 компании Intel, так и переработкой 64-разрядной архитектуры PA-RISC компании HP. IA-64 представляет собой нечто абсолютно новое - передовую архитектуру, использующую длинные слова команд (long instruction words - LIW), предикаты команд (instruction predication), устранение ветвлений (branch elimination), предварительную загрузку данных (speculative loading) и другие ухищрения для того, чтобы "извлечь больше параллелизма" из кода программ.

Несмотря на то, что Intel и HP обещали добиться обратной совместимости с существующим программным обеспечением, работающим на процессорах архитектур х86 и PA-RISC, они до сих пор не разглашают, каким образом это будет сделано. На самом деле обеспечить такую совместимость совсем не просто; достаточно вспомнить гораздо менее кардинальный переход с 16-разрядной на 32-разрядную архитектуру х86, продолжавшийся 12 лет и до сих пор не завершённый.

По поводу совместимости, стоит заметить, что но в Merced на самом деле существует два режима декодирования команд VLIW и старый CISC. Т.е. программы переключаются в необходимый режим исполнения. В архитектуре х86 были добавлен ряд команд для перехода в новый режим, а также для передачи данных. В IA-64 такие команды есть изначально. Так что теперь ОС будут содержать и 64-х разрядную часть на IA-64 и старую 32-х разрядную.

Правда, переход к архитектуре IA-64 в ближайшее время вряд ли затронет большинство пользователей, поскольку Intel заявила, что Merced разрабатывается для серверов и рабочих станций класса high-end, а не для компьютеров среднего уровня. Фактически, компания заявила, что IA-64 не заменит х86 в ближайшем будущем. Похоже на то, что Intel и другие поставщики продолжат разрабатывать чипы х86.

Перед тем, как углубиться в технические детали, попробуем понять, почему Intel и HP рискнули пойти на столь кардинальные перемены. Причина сводится к следующему: они считают, что как CISC, так и RISC-архитектуры исчерпали себя.

Небольшой экскурс в прошлое. Архитектура х86 компании Intel - CISC архитектура, появившаяся в 1978 году. В те времена процессоры представляли собой скалярные устройства (то есть могли в каждый момент времени выполнять только одну команду), при этом конвейеров практически не было. Процессоры содержали десятки тысяч транзисторов. PA-RISC компании HP была разработана в 1986 году, когда технология суперскалярных (с возможностью выполнения нескольких команд одновременно) конвейеров только начала развиваться. Процессоры содержали сотни тысяч транзисторов. В конце 90-х наиболее совершенные процессоры содержат миллионы транзисторов. К моменту начала выпуска Merced компания Intel планирует перейти на 0.18-микронную технологию вместо нынешней 0.25-микронной. Уже первые чипы архитектуры IA-64 будут содержать десятки миллионов транзисторов. В дальнейших модификациях их число увеличится до сотен миллионов.

Разработчики процессоров стремятся создавать чипы, содержащие как можно больше функциональных узлов - что позволяет обрабатывать больше команд параллельно - но одновременно приходится существенно усложнять управляющие цепи для распределения потока команд по обрабатывающим узлам. На данный момент лучшие процессоры не могут выполнять более четырёх команд одновременно, при этом управляющая логика занимает слишком много места на кристалле.

В то же время, последовательная структура кода программ и большая частота ветвлений делают задачу распределения потока команд крайне сложной. Современные процессоры содержат огромное количество управляющих элементов для того, чтобы минимизировать потери производительности, связанные с ветвлениями, и извлечь как можно больше "скрытого параллелизма" из кода программ. Они изменяют порядок команд во время исполнения программы, пытаются предсказать, куда необходимо будет перейти в результате очередного ветвления, и выполняют команды до вычисления условий ветвления. Если путь ветвления предсказан неверно, процессор должен сбросить полученные результаты, очистить конвейеры и загрузить нужные команды, что требует достаточно большого числа тактов. Таким образом, процессор, теоретически выполняющий четыре команды за такт, на деле выполняет менее двух.

Проблему ещё осложняет тот факт, что микросхемы памяти не успевают за тактовой частотой процессоров. Когда Intel разработала архитектуру х86, процессор мог извлекать данные из памяти с такой же скоростью, с какой он их обрабатывал. Сегодня процессор тратит сотни тактов на ожидание загрузки данных из памяти, даже несмотря на наличие большой и быстрой кэш-памяти.

Говоря о том, что CISC- и RISC-архитектуры исчерпали себя, Intel и HP имеют в виду обе эти проблемы. В двух пространных интервью журналу BYTE они раскрыли некоторые детали архитектуры IA-64.

  • Команды в формате IA-64 упакованы по три в 128-битный пакет для быстрейшей обработки. Обычно это называют "LIW encoding". (Русский аналог подобрать сложно. Наиболее адекватно, на мой взгляд, перевести как "кодирование в длинные слова команд".) Однако компания Intel избегает такого названия, заявляя, что с ним связаны "негативные ассоциации" (negative connotation). По той же причине Intel не любит называть сами команды RISC-подобными (RISC-like), даже несмотря на то, что они имеют фиксированную длину и предположительно оптимизированы для исполнения за один такт в ядре, не нуждающемся в микрокоде. Intel предпочитает называть свою новую LIW-технологию Explicitly Parallel Instruction Computing или EPIC (Вычисления с Явной Параллельностью Инструкций, где "явной" означае явно указанной при трансляции). В любом случае формат команд IA-64 не имеет ничего общего с х86. Команды х86 могут иметь длину от 8 до 108 бит, и процессор должен последовательно декодировать каждую команду после определения её границ.
  • Каждый 128-битный пакет содержит шаблон (template) длиной в несколько бит, помещаемый в него компилятором, который указывает процессору, какие из команд могут выполняться параллельно. Теперь процессору не нужно будет анализировать поток команд в процессе выполнения для выявления "скрытого параллелизма". Вместо этого наличие параллелизма определяет компилятор и помещает информацию в код программы. Каждая команда (как для целочисленных вычислений, так и для вычислений с плавающей точкой) содержит три 7-битных поля регистра общего назначения (РОН). Из этого следует, что процессоры архитектуры IA-64 содержат 128 целочисленных РОН и 128 регистров для вычислений с плавающей точкой. Все они доступны программисту и являются регистрами с произвольным доступом (programmer-visible random-access registers). По сравнению с процессорами х86, у которых всего восемь целочисленных РОН и стек глубины 8 для вычислений с плавающей точкой, IA-64 намного "шире" и, соответственно, будет намного реже простаивать из-за "нехватки регистров".
  • Компиляторы для IA-64 будут использовать технологию "отмеченных команд" (predication) для устранения потерь производительности из-за неправильно предсказанных переходов и необходимости пропуска участков кода после ветвлений. Когда процессор встречает "отмеченное" ветвление в процессе выполнения программы, он начинает одновременно выполнять все ветви. После того, как будет определена "истинная" ветвь, процессор сохраняет необходимые результаты и сбрасывает остальные.
  • Компиляторы для IA-64 будут также просматривать исходный код с целью поиска команд, использующих данные из памяти. Найдя такую команду, они будут добавлять пару команд - команду предварительной загрузки (speculative loading) и проверки загрузки (speculative check). Во время выполнения программы первая из команд загружает данные в память до того, как они понадобятся программе. Вторая команда проверяет, успешно ли произошла загрузка, перед тем, как разрешить программе использовать эти данные. Предварительная загрузка позволяет уменьшить потери производительности из-за задержек при доступе к памяти, а также повысить параллелизм.

Из всего вышесказанного следует, что компиляторы для процессоров архитектуры IA-64 должны быть намного "умнее" и лучше знать микроархитектуру процессора, код для которого они вырабатывают. Существующие чипы, в том числе и RISC-процессоры, производят гораздо больше оптимизации на этапе выполнения программ, даже при использовании оптимизирующих компиляторов. IA-64 перекладывает практически всю работу по оптимизации потока команд на компилятор. Таким образом, программы, скомпилированные для одного поколения процессоров архитектуры IA-64, на процессорах следующего поколения без перекомпиляции могут выполняться неэффективно. Это ставит перед поставщиками нелёгкую задачу по выпуску нескольких версий исполняемых файлов для достижения максимальной производительности.

Другим не очень приятным следствием будет увеличение размеров кода, так как команды IA-64 длиннее, чем 32-битные RISC-команды (порядка 40 бит). Компиляция при этом будет занимать больше времени, поскольку IA-64, как уже было сказано, требует от компилятора гораздо больше действий. Intel и HP заявили, что уже работают совместно с поставщиками средств разработки над переработкой этих программных продуктов.

Технология "отмеченных команд" является наиболее характерным примером "дополнительной ноши", перекладываемой на компиляторы. Эта технология является центральной для устранения ветвлений и управления параллельным выполнением команд.

Обычно компилятор транслирует оператор ветвления (например, IF-THEN-ELSE) в блоки машинного кода, расположенные последовательно в потоке. В зависимости от условий ветвления процессор выполняет один из этих блоков и перескакивает через остальные. Современные процессоры стараются предсказать результат вычисления условий ветвления и предварительно выполняют предсказанный блок. При этом в случае ошибки много тактов тратится впустую. Сами блоки зачастую весьма малы - две или три команды, - а ветвления встречаются в коде в среднем каждые шесть команд. Такая структура кода делает крайне сложным его параллельное выполнение.

Когда компилятор для IA-64 находит оператор ветвления в исходном коде, он исследует ветвление, определяя, стоит ли его "отмечать". Если такое решение принято, компилятор помечает все команды, относящиеся к одному пути ветвления, уникальным идентификатором, называемым предикатом (predicate). Например, путь, соответствующий значению условия ветвления TRUE, помечается предикатом Р1, а каждая команда пути, соответствующего значению условия ветвления FALSE - предикатом Р2. Система команд IA-64 определяет для каждой команды 6-битное поле для хранения этого предиката. Таким образом, одновременно могут быть использованы 64 различных предиката. После того, как команды "отмечены", компилятор определяет, какие из них могут выполняться параллельно. Это опять требует от компилятора знания архитектуры конкретного процессора, поскольку различные чипы архитектуры IA-64 могут иметь различное число и тип функциональных узлов. Кроме того, компилятор, естественно, должен учитывать зависимости в данных (две команды, одна из которых использует результат другой, не могут выполняться параллельно). Поскольку каждый путь ветвления заведомо не зависит от других, какое-то "количество параллелизма" почти всегда будет найдено.

Заметим, что не все ветвления могут быть отмечены: так, использование динамических методов вызова приводит к тому, что до этапа выполнения невозможно определить, возникнет ли исключение. В других случаях применение этой технологии может привести к тому, что будет затрачено больше тактов, чем сэкономлено.

После этого компилятор транслирует исходный код в машинный и упаковывает команды в 128-битные пакеты. Шаблон пакета (bundle"s template field) указывает не только на то, какие команды в пакете могут выполняться независимо, но и какие команды из следующего пакета могут выполняться параллельно. Команды в пакетах не обязательно должны быть расположены в том же порядке, что и в машинном коде, и могут принадлежать к различным путям ветвления. Компилятор может также помещать в один пакет зависимые и независимые команды, поскольку возможность параллельного выполнения определяется шаблоном пакета. В отличие от некоторых ранее существовавших архитектур со сверхдлинными словами команд (VLIW), IA-64 не добавляет команд "нет операции" (NOPS) для дополнения пакетов.

Во время выполнения программы IA-64 просматривает шаблоны, выбирает взаимно независимые команды и распределяет их по функциональным узлам. После этого производится распределение зависимых команд. Когда процессор обнаруживает "отмеченное" ветвление, вместо попытки предсказать значение условия ветвления и перехода к блоку, соответствующему предсказанному пути, процессор начинает параллельно выполнять блоки, соответствующие всем возможным путям ветвления. Таким образом, на машинном уровне ветвления нет.

Разумеется, в какой-то момент процессор наконец вычислит значение условия ветвления в нашем операторе IF-THEN-ELSE. Предположим, оно равно TRUE, следовательно, правильный путь отмечен предикатом Р1. 6-битному полю предиката соответствует набор из 64 предикатных регистров (predicate registers) Р0-Р63 длиной 1 бит. Процессор записывает 1 в регистр Р1 и 0 во все остальные.

К этому времени процессор, возможно, уже выполнил некоторое количество команд, соответствующих обоим возможным путям, но до сих пор не сохранил результат. Перед тем, как сделать это, процессор проверяет соответствующий предикатный регистр. Если в нём 1 - команда верна и процессор завершает её выполнение и сохраняет результат. Если 0 - результат сбрасывается.

Технология "отмеченных команд" существенно снижает негативное влияние ветвлений на машинном уровне. В то же время, если компилятор не "отметил" ветвление, IA-64 действует практически так же, как и современные процессоры: пытается предсказать путь ветвления и т.д. Испытания показали, что описанная технология позволяет устранить более половины ветвлений в типичной программе, и, следовательно, уменьшить более чем в два раза число возможных ошибок в предсказаниях.

Другой ключевой особенностью IA-64 является предварительная загрузка данных. Она позволяет не только загружать данные из памяти до того, как они понадобятся программе, но и генерировать исключение только в случае, если загрузка прошла неудачно. Цель предварительной загрузки - разделить собственно загрузку и использование данных, что позволяет избежать простоя процессора. Как и в технологии "отмеченных команд" здесь также сочетается оптимизация на этапе компиляции и на этапе выполнения.

Сначала компилятор просматривает код программы, определяя команды, использующие данные из памяти. Везде, где это возможно, добавляется команда предварительной загрузки на достаточно большом расстоянии перед командой, использующей данные и команда проверки загрузки непосредственно перед командой, использующей данные.

На этапе выполнения процессор сначала обнаруживает команду предварительной загрузки и, соответственно, пытается загрузить данные из памяти. Иногда попытка оказывается неудачной - например, команда, требующая данные, находится после ветвления, условия которого ещё не вычислены. "Обычный" процессор тут же генерирует исключение. IA-64 откладывает генерацию исключения до того момента, когда встретит соответствующую команду проверки загрузки. Но к этому времени условия ветвления, вызывавшего исключение, уже будут вычислены. Если команда, инициировавшая предварительную загрузку, относится к неверному пути, загрузка признается неудачной и генерируется исключение. Если же путь верен, то исключение вообще не генерируется. Таким образом, предварительная загрузка в архитектуре IA-64 работает аналогично структуре типа TRY-CATCH.

Возможность располагать команду предварительной загрузки до ветвления очень существенна, так как позволяет загружать данные задолго до момента использования (напомню, что в среднем каждая шестая команда является командой ветвления).

В 80-е годы некоторые разработчики RISC-процессоров высмеивали CISC-архитектуру и предрекали скорую погибель семейству х86. Но технологии и бизнес - разные вещи. Несмотря на технологические преимущества RISC-архитектуры, огромные ресурсы корпорации Intel и господство операционных систем DОS и Windows привели к тому, что процессоры архитектуры х86 остаются конкурентоспособными до сих пор. Теперь уже Intel заявляет, что RISC- архитектура устарела. Не совершает ли корпорация той же ошибки? В любом случае, до выхода в свет первого процессора архитектуры IA-64 остаётся ещё два года, и у конкурентов есть время принять ответные меры.

AMD64 (также x86-64 или x64) - 64-битная архитектура микропроцессора и соответствующий набор инструкций, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86-64 в настоящее время поддерживается процессорами AMD Athlon 64, Athlon 64 FX, Athlon 64 X2, Turion 64, Opteron, последними моделями Sempron. Интересно, что этот набор инструкций был поддержан основным конкурентом AMD - компанией Intel под названием EM64T или IA-32e в поздних моделях процессоров Pentium 4, а также в Pentium D, Pentium Extreme Edition, Celeron D, Core 2 Duo и Xeon. Корпорация Microsoft использует для обозначения этого набора инструкций термин x64.

Режимы работы

Процессоры архитектуры поддерживают два режима работы: Long mode («длинный» режим) и Legacy mode (режим совместимости с x86).

Long Mode

«Длинный» режим - «родной» для процессоров AMD64. Этот режим позволяет воспользоваться всеми дополнительными возможностями, предоставляемыми архитектурой AMD64. Для использования этого режима необходима 64-битная операционная система, например, Windows XP Professional x64 Edition или 64-битный вариант GNU/Linux. Этот режим позволяет выполнять 64-битные программы; также (для обратной совместимости) предоставляется поддержка выполнения 32-битного кода, например, 32-битных приложений, хотя 32-битные программы не смогут использовать 64-битные системные библиотеки, и наоборот. Чтобы справиться с этой проблемой, большинство 64-разрядных операционных систем предоставляют два набора необходимых системных файлов: один - для родных 64-битных приложений, и другой - для 32-битных программ. (Этой же методикой пользовались ранние 32-битные системы - например, Windows 95 - для выполнения 16-битных программ)

Legacy Mode

Данный режим позволяет процессору AMD64 выполнять инструкции, рассчитанные для процессоров x86, и предоставляет полную -совместимость с 32/16-битным кодом и операционными системами. В этом режиме процессор ведёт себя точно так же, как x86-процессор, например Pentium 4, и дополнительные функции, предоставляемые архитектурой AMD64 (например, дополнительные регистры) недоступны. В этом режиме 64-битные программы и операционные системы работать не будут.

Особенности архитектуры

Разработанный компанией AMD набор инструкций x86-64 (позднее переименованный в AMD64) - расширение архитектуры Intel IA-32 (x86-32). Основной отличительной особенностью AMD64 является поддержка 16-ти 64-битных регистров общего назначения (против 8-и 32-битных в x86-32), 64-битных арифметических и логических операций над целыми числами и 64-битных виртуальных адресов.

Архитектура x86_64 имеет

    16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15),

    8 80-битных регистров с плавающей точкой (ST0 - ST7)

    8 64-битных регистров Multimedia Extensions (MM0 - MM7, имеют общее пространство с регистрами ST0 - ST7)

    16 128-битных регистров SSE (XMM0 - XMM15)

    64-битный указатель RIP и 32-битный регистр флагов EFLAGS

Opteron (кодовое название Sledgehammer или K8) - первый микропроцессор фирмы AMD, основанный на 64-битной технологии AMD64 (также называемой x86-64). AMD создала этот процессор в основном для применения на рынке серверов, поэтому существуют варианты Opteron для использования в системах с 1-16 процессорами.

В июне 2004 года в Top500 суперкомпьютеров десятое место занял Dawning 4000A - китайский суперкомпьютер построенный на процессорах Opteron. В ноябре 2005 он опустился на 42 место, в связи с появлением более производительных конкурентов. Тогда в ноябрьском Top500 10 % суперкомпьютеров были построены на базе процессоров AMD64 Opteron. Для сравнения, на базе процессоров Intel EM64T Xeon были построены 16.2 % суперкомпьютеров. Две ключевые особенности

Двумя важными технологиями воплощёнными в процессоре Opteron являются: Прямая (без эмуляции) поддержка 32-битных x86 приложений без потери скорости Прямая (без эмуляции) поддержка 64-битных x86-64 приложений (линейная адресация более 4 ГБ ОЗУ)

Первая технология примечательна тем, что во время анонса процессора Opteron единственным 64-битным процессором с заявленной поддержкой 32-битных x86 приложений был Intel Itanium. Но Itanium выполнял 32-битные приложения со значительной потерей скорости.

Вторая технология, сама по себе не так примечательна, так как основные производители RISC процессоров (SPARC, DEC, HP, IBM, MIPS и другие) имели 64-битные решения уже много лет. Но совмещение в одном продукте этих 2-х свойств, напротив, принесло Opteron признание, так как он предлагал доступное и экономичное решение для запуска существующих x86 приложений с последующим переходом на более перспективные 64-битные вычисления.

Процессоры Opteron имеют интегрированный контроллер памяти DDR SDRAM. Это позволило существенно уменьшить задержки при обращении к памяти и исключить необходимость в отдельном чипе северного моста на материнской плате.

В мае 2005 года AMD представила первый «многоядерный» процессор Opteron. В настоящее время термин «многоядерный» компания AMD использует для обозначения «двухъядерных» процессоров; в каждом процессоре Opteron размещено 2 отдельных процессорных ядра. Это фактически удваивает вычислительную мощность доступную каждому процессорному разъёму на материнских платах, поддерживающих эти процессоры.

Одним из “топовых” процессоров AMD сегодня считается - Athlon X2 6000+ на ядре Windsor под сокет AM2. Этот процессор содержит два ядра Athlon 64, объединённых на одном кристалле с помощью набора дополнительной логики. Ядра имеют в своём распоряжении двухканальный контроллер памяти, базирующийся на Athlon 64 степпинга E, и в зависимости от модели, от 512 до 1024 КБ КЭШа 2-го уровня на каждое ядро. Athlon 64 X2 поддерживают набор инструкций SSE3 (которые ранее поддерживались только процессорами компании Intel), что позволило запускать с максимальной производительностью код, оптимизированный для процессоров Intel. Эти улучшения не уникальны для Athlon 64 X2 и так же имеются в релизах процессоров Athlon 64, построенных на ядрах Venice и San Diego. AMD официально начала поставки Athlon 64 X2 на выставке Computex 1 июня 2005 года.

Основным преимуществом, которое даёт двуядерные процессоры Athlon 64 X2 является возможность разделения запущенных программ на несколько одновременно выполняемых потоков. Способность процессора выполнять одновременно несколько программных потоков называется параллелизм на уровне потоков (thread-level parallelism или (TLP)). При размещении двух ядер на одном кристале, Athlon 64 X2 обладает двойным TLP по сравнению с одноядерным Athlon 64 при той же скорости. Необходимость в TLP зависит от конкретной ситуации в большей степени и в некоторых ситуациях она просто бесполезна. Большинство программ написаны с расчётом на работу в однопоточном режиме, и поэтому просто не могут задействовать вычислительные мощности второго ядра. Программы, написанные с учётом работы в многопоточном режим и способные использовать вычислительные мощности второго ядра, включают в себя множество приложений для обработки музыки и видео. Имея два ядра, Athlon 64 X2 обладает увеличенным количеством транзисторов на кристалле. Процессор Athlon 64 X2 с 1МБ КЭШа 2-го уровня имеет 233.2 миллиона транзисторов , в отличие от Athlon 64, имевшего всего 114 миллиона транзисторов . Такие размеры требуют использования для производства более тонкого технологического процесса, который позволяет добиться выхода необходимого количества исправных процессоров с одной кремневой пластины. Athlon 64 X2 построен на ядрах: Toledo; Manchester; Windsor по 90 нм техпроцессу. Совсем недавно компания AMD официально представила свою новую платформу для настольных ПК под кодовым названием AMD Spider.

Платформа Spider

Состав платформы Spider

Основным компонентом данной платформы является процессор линейки AMD Phenom, совместно с чипсетом семейства AMD 7-Series.

Платформа AMD Spider: общие характеристики

Представляя вниманию широкой публике новые технологии, AMD делает акцент именно на платформенном характере инноваций. Ключевым компонентом платформы Spider являются многоядерные процессоры AMD Phenom (вплоть до 4-ядерных), выполненные с соблюдением норм 65 нм техпроцесса и предназначенные для работы с системными платами, оснащёнными разъёмом Socket AM2+. Помимо этого, в состав платформы Spider входит новое поколение чипсетов AMD 7 Series для создания системных плат с поддержкой технологий CrossFireX и AMD OverDrive, а также графика семейства ATI Radeon HD 3800 с поддержкой Microsoft DirectX 10.1.

Схема платформы AMD Spider

Если отбросить в сторону многословие пресс-релизов, основной инновацией, реализованной в платформе AMD Spider, можно назвать значительное повышение параметра “производительность на ватт”, главным образом, за счёт энерго-эффективного дизайна 65 нм процессоров AMD Phenom, 65 нм чипсетов AMD 7-Series и 55 нм графических чипов семейства ATI Radeon HD 3800. Наряду с этим, платформа AMD Spider обладает поддержкой ряда специфических технологий экономии энергии: ATI PowerPlay, Cool’n’Quiet 2.0, Microsoft DirectX 10.1, HyperTransport 3.0 и PCI Express 2.0. В частности, технология Cool’n’Quiet 2.0 позволяет снижать энергопотребление процессоров AMD Phenom, обладающих TDP 95 Вт, до средних 32 Вт в бытовых и средних 29 Вт в коммерческих приложениях. В то же время технология AMD CoolCore, реализованная в чипсетах AMD 7-Series, обеспечивает работу ядер процессора на разных частотах и, соответственно, снижение энергопотребления, при этом TDP чипсетов в среднем составляет порядка 10-12 Вт.

Другая инновация платформы AMD Spider – значительная её масштабируемость, беспрецедентная для решений на базе процессоров AMD. Так, системные платы на базе чипсетов AMD 7-Series, благодаря технологии ATI CrossFireX и поддержке до 42 линий PCI Express, обладают возможностью работы с тремя или четырьмя графическими картами ATI Radeon HD 3800. С точки зрения микроархитектуры процессоров AMD, новые чипы 4-ядрные чипы Phenom для настольных ПК, выполненные на базе архитектуры Stars (ядро Agena), являются “ближайшими родственниками” новых 4-ядерных серверных процессоров AMD Opteron на базе ядра Barcelona.

В полной аналогии с ядром Barcelona, архитектура Stars обладает 128-битным контроллером памяти с поддержкой до DDR2-1066, который также обладает возможностью работы в 2-канальном 64-битном режиме для независимого выполнения операций записи и чтения памяти. Физическое адресное пространство при этом увеличилось до 48 бит, а поддержка памяти до 256 Тб.

Каждое из четырёх ядер процессора Phenom обладает собственным 64 Кб собственной кэш-памяти L1 для инструкций и 64 Кб кэш-памяти L1 для данных, что в сумме составляет 512 Кб кэш-памяти L1 на процессор. Суммарный объём кэш-памяти L2 составляет 2 Мб, по 512 Кб на каждое ядро. Помимо этого, архитектуры Barcelona и Stars подразумевают наличие 2 Мб кэш-памяти L3. В отличие от кэш-памяти уровней L1 и L2, эксклюзивных для каждого ядра, кэш-память L3 динамически распределяется между всеми ядрами.

Среди ключевых характеристик, присущих новым 4-ядерным процессорам Phenom, следует отметить следующие ключевые функциональные возможности: Наличие нового планировщика задач с плавающей запятой, теперь поддерживающего 36 новых 128-битных операций Поддержка 128-битных операций SSE, появившихся в дополнение к возможностям прежней 64-битной архитектуры Возможность обработки двух операций SSE и одного SSE переноса за такт Буфер модуля выборки инструкций стал 32 байтным (ранее 16 байт) Модуль предсказания ветвлений с 512-ходовым предсказанием непрямых ветвлений Производительность кэша данных увеличена с одной 64-битной загрузки за такт до одной 128-битной загрузки за такт Производительность кэша данных L2 - контроллера памяти увеличена с 64-битной загрузки на такт до 128-битной загрузки за такт Реализация шины HyperTransport 3.0 позволила увеличить пропускную способность до 20,8 Гб/с Реализация технологии AMD Virtualization Technology с функцией быстрой индексации Rapid Page Indexing

Согласно информации, полученной от источника из среды тайваньских производителей системных плат, компания AMD на днях известила своих партнеров о намерении начать отгрузку трехъядерных процессоров Phenom X3 (Toliman) уже в феврале 2008 года, а не в марте, как планировалось ранее. Двухъядерные процессоры Kuma появятся только в конце второго квартала будущего года.

Напомним, что первые трехъядерные процессоры, модели 7700 и 7600, будут работать на частотах 2,5 ГГц и 2,3 ГГц, соответственно, тепловыделение моделей установлена в 89 Вт. Тактовые частоты процессоров Kuma, моделей 6250 и 6050, пока не называются, известно лишь, что их TDP будет на уровне 65 Вт.

Автор достаточно рисковал, включая этот материал в учебное пособие, так как публикуемые в наше время сведения о конкретных моделях микропроцессоров устаревают, находясь ещё под печатным станком. Однако ради полноты картины о современных 64-разрядных архитектурах эта глава оправдывает своё присутствие в настоящем пособии.

10.1 Архитектура Intel Core 2

Восьмое поколение процессоров Intel, получившее название Core 2, без доли сомнения можно назвать революционным.

Инженеры Intel после довольно продолжительного отставания от AMD не придумали кардинально новую архитектуру. Как водится, все новое – это хорошо забытое старое. В основу Conroe легли наработки мобильного Pentium M – процессора настолько успешного, что некоторые производители стали применять его не только для переносных компьютеров, но и для настольных рабочих станций. В свою очередь, Pentium M тоже появился не на пустом месте. Его прародителем является Pentium III, который, как известно, был эволюционным продолжением Pentium Pro.

Соответствующая эволюционная цепочка выглядит следующим образом: Pentium Pro  Pentium II  Pentium III  Pentium M  Core 2.

Данный случай является примером, когда шаг назад стал значительным шагом вперед. Если очень сильно абстрагироваться от деталей, то разработчики из Intel сделали следующее. Создали к 1995 году довольно успешный процессор Pentium Pro, нарастили его мощность (Pentium II, Pentium III), разработали механизм снижения энергопотребления (Pentium M), создали эффективную систему взаимодействия нескольких процессорных ядер (Core 2). Эта схема весьма условна, так как на каждом из этапов были и другие существенные доработки (такие как переход к 64-разрядной архитектуре), но некоторые наследственные черты все же сохранились.

В зависимости от целевого сегмента процессоры имеют свои технологические особенности. Для настольных систем предназначены Conroe-L (одно ядро), Allendale (два ядра), Conroe и Wolfdale (два ядра), Kentsfield и Yorkfield (четыре ядра). Кодовые имена Merom и Penryn носят продукты, ориентированные на мобильный сегмент рынка. Последней реинкарнацией архитектуры Core 2 станут шестиядерные процессоры Dunnington.

Следующее за Core 2 поколение процессоров продаётся под брендом Core i7 (архитектура Nehalem).

Следует отметить, что шестиядерные конфигурации не дают шестикратный прирост производительности по сравнению с одноядерными. Причины кроются в особенностях работы с памятью. В отдельных задачах вместо улучшения быстродействия возможно даже снижение скорости работы. Это объясняется тем, что большинство программных продуктов еще на адаптировано для работы на многопроцессорных (многоядерных) платформах.

Что же изменилось в Intel Core 2 по сравнению с Pentium 4? Одно из важных отличий – уход от длинноконвейерной архитектуры NetBrust, главной задачей которой было обеспечить определенное преимущество в условиях «гонки гигагерц». Кроме того, произошло существенное сокращение длины конвейера. В архитектуре Core его длина составляет 14 ступеней, в то время как в предыдущем поколении процессоров она была равна 31 ступени (ядро Prescott), а это более чем двукратное сокращение. Зато первые NetBrust-процессоры на ядре Northwood разгонялись с 1,6 до 3,4 ГГц. Не лишним будет напомнить, что такое повышение тактовой частоты было чревато чрезмерным энергопотреблением (для топовых процессоров TDP оно доходило до 160-170 Вт). Однако, как показывала практика, все эти гигагерцы очень слабо трансформировались в рост производительности.

Объем L2-кэша у новых моделей варьируется от 3 Мбайт у Wolfdale‑3М до 12 Мбайт у Yorkfield.

Прежде чем переходить к изучению структурной схемы, отметим ключевые технологические моменты, которые лежат в основе архитектуры Core:

    Intel Wide Dynamic Execution – обеспечивает выполнение до пяти микроопераций за один такт.

    Intel Intelligent Power Capability – представляет собой целый набор технологий, призванных существенно снизить энергопотребление.

    Intel Advanced Smart Cache – подразумевает наличие общей для всех ядер кэш-памяти L2, которая динамически распределяется между ними в зависимости от выполняемых задач.

    Intel Smart Memory Access – комплекс технологий по оптимизации алгоритмов доступа к памяти и предварительной загрузки данных.

    Intel Advanced Digital Media Boost – технология, направленная на оптимизацию декодирования мультимедийного контента. Позволяет обрабатывать все 128-разрядные команды SSE, SSE2 и SSE3, широко используемые в мультимедийных и графических приложениях, за один такт.

    Intel 64 Technology – 64-битный (ЕМ64Т) режим целочисленной и адресной арифметики. Он позволяет работать с числами большой разрядности, а также адресовать свыше 1 Тбайт памяти. 32-битная архитектура позволяла адресовать не более 4 Гбайт оперативной памяти. Это накладывает определенные ограничения при работе с большими объемами данных.

Статья раскрывает смысл термина «64 бита». В статье кратко рассмотрена история развития 64-битных систем, описаны наиболее распространенные на данный момент 64-битные процессоры архитектуры Intel 64 и 64-битная операционная система Windows.

Введение

В рамках архитектуры вычислительной техники под термином «64-битный» понимают 64-битные целые и другие типы данных, имеющих размер 64 бита. Под «64-битными» системами могут пониматься 64-битные архитектуры микропроцессоров (например, EM64T, IA-64) или 64-битные операционные системы (например, Windows XP Professional x64 Edition). Можно говорить о компиляторах, генерирующих 64-битный программный код.

В данной статье будут рассмотрены различные моменты, связанные с 64-битными технологиями. Статья предназначена для программистов, желающих начать разрабатывать 64-битные программы , и ориентирована на Windows-разработчиков, поскольку для них вопрос знакомства с 64-битными системами наиболее актуален.

История 64-битных систем

64-битность только недавно вошла в жизнь большинства пользователей и прикладных программистов. Однако работа с 64-битными данными имеет уже длинную историю.

1961: IBM выпускает суперкомпьютер IBM 7030 Stretch, в котором используются 64-битные слова данных, 32-битные или 64-битные машинные инструкции.

1974: Control Data Corporation запускает векторный суперкомпьютер CDC Star-100, в котором используется архитектура 64-битных слов (предыдущие системы CDC имели 60-битную архитектуру).

1976: Cray Research выпускает первый суперкомпьютер Cray-1, в котором реализована архитектура 64-битных слов и который послужит основой для всех последующих векторных суперкомпьютеров Cray.

1985: Cray выпускает UNICOS - первую 64-битную реализацию операционной системы Unix.

1991: MIPS Technologies производит первый 64-битный процессор, R4000, в котором реализована третья модификация разработанной в их компании архитектуры MIPS. Этот процессор используется в графических рабочих станциях SGI начиная с модели IRIS Crimson. Kendall Square Research выпускает свой первый суперкомпьютер KSR1, построенный на основе их собственной запатентованной 64-битной архитектуры RISC под операционной системой OSF/1.

1992: Digital Equipment Corporation (DEC) представляет полностью 64-битную архитектуру Alpha - детище проекта PRISM.

1993: DEC выпускает 64-битную Unix-подобную операционную систему DEC OSF/1 AXP (позже переименованную в Tru64 UNIX) для своих систем, построенных на архитектуре Alpha.

1994: Intel объявляет о своих планах по разработке 64-битной архитектуры IA-64 (совместно с компанией Hewlett-Packard) - преемника их 32-битных процессоров IA-32. Дата выпуска назначена на 1998-1999 годы. SGI выпускает IRIX 6.0 с 64-битной поддержкой чипсета R8000.

1995: Sun запускает 64-битный процессор семейства SPARC UltraSPARC. HAL Computer Systems, подчиненная Fujitsu, запускает рабочие станции, созданные на основе 64-битного процессора SPARC64 первого поколения, независимо разработанного компанией HAL. IBM выпускает микропроцессоры A10 и A30, а также 64-битные процессоры PowerPC AS. IBM также выпускает 64-битное обновление для системы AS/400, способное преобразовывать операционную систему, базы данных и приложения.

1996: Nintendo представляет игровую консоль Nintendo 64, созданную на основе более дешевого варианта MIPS R4000. HP выпускает реализацию 64-битной 2.0 версии собственной архитектуры PA-RISC PA-8000.

1997: IBM запускает линейку RS64 64-битных процессоров PowerPC/PowerPC AS.

1998: Sun выпускает Solaris 7 с полной 64-битной поддержкой UltraSPARC.

1999: Intel выпускает набор команд для архитектуры IA-64. AMD публично объявляет о своем наборе 64-битных расширений для IA-32, который был назван x86-64 (позже переименован в AMD64).

2000: IBM выпускает свой первый 64-битный мэйнфрейм zSeries z900, совместимый с ESA/390, а также новую операционную систему z/OS.

2001: Intel наконец запускает линейку 64-битных процессоров, которые теперь получают название Itanium и рассчитаны на высокопроизводительные серверы. Проект не соответствует ожиданиям из-за многочисленных задержек при выпуске IA-64 на рынок. NetBSD становится первой операционной системой, которая запускается на процессоре Intel Itanium после его выхода. Кроме того, Microsoft также выпускает Windows XP 64-Bit Edition для архитектуры IA-64 семейства Itanium, хотя в ней сохраняется возможность запускать 32-битные приложения при помощи прослойки WoW64.

2003: AMD представляет линейки процессоров Opteron и Athlon 64, созданные на основе архитектуры AMD64, которая является первой 64-битной процессорной архитектурой, основанной на архитектуре x86. Apple начинает использовать 64-битный процессор «G5» PowerPC 970 производства IBM. Intel утверждает, что процессорные чипы семейства Itanium останутся единственными 64-битными процессорами, разработанными в их компании.

2004: В ответ на коммерческий успех AMD, Intel признается, что они разрабатывали клон расширений AMD64, которому дали название IA-32e (позже переименован в EM64T, и затем еще раз в Intel 64). Intel также выпускает обновленные версии семейств процессоров Xeon и Pentium 4 с поддержкой новых команд.

2004: VIA Technologies представляет свой 64-битный процессор Isaiah.

2005: 31 января Sun выпускает Solaris 10 с поддержкой процессоров AMD64 / Intel 64. 30 апреля Microsoft выпускает Windows XP Professional x64 Edition для процессоров AMD64 / Intel 64.

2006: Sony, IBM и Toshiba начинают выпуск 64-битного процессора Cell для PlayStation 3, серверов, рабочих станций и других устройств. Microsoft выпускает Windows Vista с включенной 64-битной версией для процессоров AMD64 / Intel 64, которая поддерживает 32-битную совместимость. Все Windows-приложения и компоненты являются 64-битными, однако многие из них имеют 32-битные версии, включенные в систему в виде плагинов в целях совместимости.

2009: Как и Windows Vista, Windows 7 компании Microsoft включает полную 64-битную версию для процессоров AMD64 / Intel 64, и на большинство новых компьютеров по умолчанию устанавливается 64-битная версия. Выходит операционная система компании Apple Mac OS X 10.6, «Snow Leopard» которая имеет 64-битное ядро и предназначена для процессоров AMD64 / Intel 64, однако по умолчанию эта система устанавливается только на некоторые из последних моделей компьютеров компании Apple. Большинство приложений, поставляемых с Mac OS X 10.6, теперь также являются 64-битными.

Более подробно с историей развития 64-битных систем можно познакомиться в статье Джона Машей "Долгая дорога к 64 битам " и в энциклопедической статье в Wikipedia "64-bit " .

Прикладное программирование и 64-битные системы

На момент написания статьи в 2010 году, наиболее известными и распространенными являются две 64-битные архитектуры микропроцессоров: IA64 и Intel 64.
  1. IA-64 64-битная микропроцессорная архитектура, разработанная совместно компаниями Intel и Hewlett Packard. Реализована в микропроцессорах Itanium и Itanium 2. Для более подробного знакомства с архитектурой IA-64 можно обратиться к следующим статьям в Wikipedia: "IA-64 ", "Itanium ", "Itanium 2 ". Архитектуру Itanium поддерживает большое количество производителей серверов: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP, NEC, SGI и Unisys. Эти производители присоединились к Intel и множеству разработчиков ПО для создания Itanium Solutions Alliance , с целью продвижения архитектуры и ускорения темпов портирования ПО.
  2. Intel 64 (AMD64 / x86-64 / x64 / EM64T) - данная архитектура представляет собой расширение архитектуры x86 с полной обратной совместимостью. Существует множество вариантов названия данной архитектуры, что приводит к путанице, хотя, по сути, все эти названия обозначают одно и тоже: x86-64, AA-64, Hammer Architecture, AMD64, Yamhill Technology, EM64T, IA-32e, Intel 64, x64. Более подробно узнать о том, как появилось так много названий, можно в статье из Wikipedia: "X86-64 ". Процессоры с архитектурой Intel 64 нашли широкое распространение персональных компьютерах. И скорее всего ваш компьютер оснащен именно процессором с данной архитектурой.
Важно понимать, что IA-64 и Intel 64 (AMD64) это совершенно разные, несовместимые друг с другом, микропроцессорные архитектуры. Далее в статье мы будем рассматривать только архитектуру Intel 64 (x64 / AMD64), как более популярную среди разработчиков прикладного программного обеспечения для операционной системы Windows. Для краткости программную модель Intel 64, доступную программисту в 64-битной системе Windows, называют Win64 .

Архитектура Intel 64 (AMD64)

Рассматриваемая архитектура Intel 64 простое, но в то же время мощное обратно совместимое расширение устаревшей промышленной архитектуры x86. Она добавляет 64-битное адресное пространство и расширяет регистровые ресурсы для поддержки большей производительности перекомпилированных 64-битных программ. Архитектура обеспечивает поддержку устаревшего 16-битного и 32-битного кода приложений и операционных систем без их модификации или перекомпиляции.

Отличительной особенностью Intel 64 является поддержка шестнадцати 64-битных регистров общего назначения (в x86-32 имелось восемь 32-битных регистров). Поддерживаются 64-битные арифметические и логические операции над целыми числами. Поддерживаются 64-битные виртуальные адреса. Для адресации новых регистров для команд введены «префиксы расширения регистра», для которых был выбран диапазон кодов 40h-4Fh, использующихся для команд INC <регистр> и DEC <регистр> в 32- и 16-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме.

Регистры:

16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15),
8 80-битных регистров с плавающей точкой (ST0 - ST7),
8 64-битных регистров Multimedia Extensions (MM0 - MM7, имеют общее пространство с регистрами ST0 - ST7),
16 128-битных регистров SSE (XMM0 - XMM15),
64-битный указатель RIP и 64-битный регистр флагов RFLAGS.

Необходимость 64-битной архитектуры определяется приложениями, которым необходимо большое адресное пространство. В первую очередь это высокопроизводительные серверы, системы управления базами данных, САПР и, конечно, игры. Такие приложения получат существенные преимущества от 64-битного адресного пространства и увеличения количества регистров. Малое количество регистров, доступное в устаревшей x86 архитектуре, ограничивает производительность в вычислительных задачах. Увеличенное количество регистров обеспечивает достаточную производительность для многих приложений.

Подчеркнем основные достоинства архитектуры x86-64:

  • 64-битное адресное пространство;
  • расширенный набор регистров;
  • привычный для разработчиков набор команд;
  • возможность запуска старых 32-битных приложений в 64-битной операционной системе;
  • возможность использования 32-битных операционных систем.

64-битные операционные системы

Практически все современные операционные системы сейчас имеют версии для архитектуры Intel 64. Например, Microsoft предоставляет Windows XP x64. Крупнейшие разработчики UNIX систем также поставляют 64-битные версии, как например Linux Debian 3.5 x86-64. Однако это не означает, что весь код такой системы является полностью 64-битным. Часть кода ОС и многие приложения вполне могут оставаться 32-битными, так как Intel 64 обеспечивает обратную совместимость с 32-битными приложениями. Например, 64-битная версия Windows использует специальный режим WoW64 (Windows-on-Windows 64), который транслирует вызовы 32-битных приложений к ресурсам 64-битной операционной системы.

WoW64

Windows-on-Windows 64-bit (WoW64) - подсистема операционной системы Windows, позволяющая запускать 32-битные приложения на всех 64-битных версиях Windows.

Подсистема WoW64 не поддерживает следующие программы:

  • программы, скомпилированные для 16-разрядных операционных систем;
  • программы режима ядра, скомпилированные для 32-разрядных операционных систем.
Существуют различия WoW64 в зависимости от архитектуры процессора. Например, 64-битная версия Windows разработанная для процессора Intel Itanium 2 использует WoW64 для эмуляции x86 инструкций. Такая эмуляция весьма ресурсоемка по сравнению с WoW64 для архитектуры Intel 64, так как происходит переключение с 64-битного режима в режим совместимости, при выполнении 32-битных программ.

WoW64 на архитектуре Intel 64 (AMD64 / x64) не требует эмуляции инструкций. Здесь подсистема WoW64 эмулирует только 32-битное окружение, за счет дополнительной прослойки между 32-битным приложением и 64-битным Windows API. Где-то эта прослойка тонкая, где-то не очень. Для средней программы потери в производительности из-за наличия такой прослойки составят около 2%. Для некоторых программ это значение может быть больше. Два процента это немного, но следует учитывать, что 32-битные приложения работают немного медленнее под управлением 64-битной операционной системы Windows, чем в 32-битной среде.

Компиляция 64-битного кода не только исключает необходимость в WoW64, но и дает дополнительный прирост производительности. Это связано с архитектурными изменениями в микропроцессоре, такими как увеличение количества регистров общего назначения. Для средней программы можно ожидать в пределах 5-15% прироста производительности от простой перекомпиляции.

Из-за наличия прослойки WoW64 32-битные программы работают менее эффективно в 64-битной среде, чем в 32-битной. Но все-таки, простые 32-битные приложения могут получить одно преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа, собранная с ключом /LARGEADDRESSAWARE:YES может выделять до 3-х гигабайт памяти, если 32-битная операционная система Windows запущена с ключом /3gb. Так вот, эта же 32-битная программа, запущенная на 64-битной системе, может выделить почти 4 GB памяти (на практике около 3.5 GB).

Подсистема WoW64 изолирует 32-разрядные программы от 64-разрядных путем перенаправления обращений к файлам и реестру. Это предотвращает случайный доступ 32-битных программ к данным 64-битных приложений. Например, 32-битное приложение, которое запускает файл DLL из каталога %systemroot%\System32, может случайно обратиться к 64-разрядному файлу DLL, который несовместим с 32-битной программой. Во избежание этого подсистема WoW64 перенаправляет доступ из папки %systemroot%\System32 в папку %systemroot%\SysWOW64. Это перенаправление позволяет предотвратить ошибки совместимости, поскольку при этом требуется файл DLL, созданный специально для работы с 32-разрядными приложениями.

Подробнее с механизмами перенаправления файловой системы и реестра можно познакомиться в разделе MSDN "Running 32-bit Applications ".

Программная модель Win64

Также как и в Win32 размер страниц в Win64 составляет 4Кб. Первые 64Кб адресного пространства никогда не отображаются, то есть наименьший правильный адрес это 0x10000. В отличие от Win32, системные DLL загружаются выше 4Гб.

Особенность компиляторов для Intel 64 в том, что они могут наиболее эффективно использовать регистры для передачи параметров в функции, вместо использования стека. Это позволило разработчикам Win64 архитектуры избавиться от такого понятия как соглашение о вызовах (calling convention). В Win32 можно использовать разные соглашения: __stdcall, __cdecl, __fastcall и так далее. В Win64 есть только одно соглашение о вызовах. Рассмотрим пример, как передаются в регистрах четыре аргумента типа integer:

  • RCX: первый аргумент
  • RDX: второй аргумент
  • R8: третий аргумент
  • R9: четвертый аргумент
Аргументы после первых четырех integer передаются на стеке. Для float аргументов используются XMM0-XMM3 регистры, а также стек.

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

Передача параметров через регистры является одним из новшеств, делающих 64-битные программы более производительными, чем 32-битные. Дополнительный выигрыш в производительности можно получить, используя 64-битные типы данных.

Адресное пространство

Хотя 64-битный процессор теоретически может адресовать 16 экзабайт памяти (2^64), Win64 в настоящий момент поддерживает 16 терабайт (2^44). Этому есть несколько причин. Текущие процессоры могут обеспечивать доступ лишь к 1 терабайту (2^40) физической памяти. Архитектура (но не аппаратная часть) может расширить это пространство до 4 петабайт (2^52). Однако в этом случае необходимо огромное количество памяти для страничных таблиц, отображающих память.

Помимо перечисленных ограничений, объем памяти, который доступен в той или иной версии 64-битной операционной системе Windows зависит также от коммерческих соображений компании Microsoft. Ниже приведена информация по объему памяти, поддерживаемой различными версиями 64-биными версиями Windows:

Windows XP Professional - 128 Gbyte;
Windows Server 2003, Standard - 32 Gbyte;
Windows Server 2003, Enterprise - 1 Tbyte;
Windows Server 2003, Datacenter - 1 Tbyte;
Windows Server 2008, Datacenter - 2 Tbyte;
Windows Server 2008, Enterprise - 2 Tbyte;
Windows Server 2008, Standard - 32 Gbyte;
Windows Server 2008, Web Server - 32 Gbyte;
Vista Home Basic - 8 Gbyte;
Vista Home Premium - 16 Gbyte;
Vista Business - 128 Gbyte;
Vista Enterprise - 128 Gbyte;
Vista Ultimate - 128 Gbyte;
Windows 7 Home Basic - 8 Gbyte;
Windows 7 Home Premium - 16 Gbyte;
Windows 7 Professional - 192 Gbyte;
Windows 7 Enterprise - 192 Gbyte;
Windows 7 Ultimate - 192 Gbyte;

Разработка 64-битных приложений

Наиболее полно вопросы разработки 64-битных приложений рассмотрены в курсе "

20.04.2002 Михаил Кузьминский

В статье проанализирована предложенная компанией AMD архитектура x86-64 и рассмотрены некоторые ее достоинства и недостатки по сравнению с другими 64-разрядными архитектурами, в первую очередь Intel/HP IA-64. Дан краткий обзор микроархитектуры процессоров AMD Hammer, в которых впервые будет реализована архитектура x86-64. Характеристики Hammer сопоставлены с другими современными и перспективными высокопроизводительными процессорами.

Если все высокопроизводительные микропроцессоры RISC-архитектуры, выпускающиеся с конца 90-х годов, являются 64-разрядными (Сompaq/DEC Alpha, SGI/MIPS R1x000, IBM Power, HP PA-8x00, Sun UltraSPARC), то основные CISC-архитектуры (Intel x86, IBM S/390) переходят от 32 к 64 разрядам только сейчас (IA-64 , IBM z/Architecture ).

Переход от S/390 к z/Architecture выглядит достаточно естественным расширением, в то время как переход от x86 (ныне IA-32) к IA-64 означает, по сути, полную смену системы команд. Думаю, это обусловлено тем, что х86 начала свое историческое развитие с 8-ми, а затем 16-разрядных систем. Поэтому остававшаяся по соображениям совместимости относительно статичной в течение очень многих лет система команд со временем стала довольно «неестественной» с точки зрения других 32-разрядных процессоров.

Итак, если IBM перешла к 64-разрядной платформе эволюционным путем, переход от х86 к IA-64 - это революция; совместимость обеспечивается лишь путем аппаратной эмуляции. Пока непонятно, хочет ли Intel в будущем вообще отказаться от IA-32 в пользу IA-64, но то, что все программное обеспечение для IA-64 нужно как минимум перетранслировать - не говоря уже о дальнейшей оптимизации под IA-64 - это кажется ясным. Очевидно, переход на платформу IA-64 займет немало времени и будет стоить весьма дорого.

Совершенно другим путем пошла компания AMD. Она предложила собственную модернизацию архитектуры x86, которая (как и в случае с IBM) является естественным эволюционным развитием - подобно тому, как х86 в свое время была модернизирована с 16 до 32 разрядов.

Почему же 32-разрядные CISC-платформы становятся 64-разрядными только сейчас, хотя потребности в 64-разрядных приложениях стали достаточно большими уже несколько лет назад? Кроме уже отмеченной сложности перехода (очевидной в случае IA-64 и z/Architecture) следует указать и на резкое удешевление оперативной памяти при одновременном росте емкости модулей памяти. В результате 4-гигабайтный предел емкости для 32-разрядных систем оказывается вполне достижим уже в современных ПК. Так почему бы не поднять производительность ПК-сервера за счет установки дополнительной памяти, коль скоро это становится не так дорого?

Архитектура х86-64

Представляется, что отличия архитектуры х86-64 от IA-32 даже меньше, чем отличия IBM z/Architecture от S/390. В AMD всячески стараются подчеркнуть, что внесенные изменения минимальны , хотя анализ полного описания позволяет выявить достаточное количество мелких нюансов, касающихся, правда, в первую очередь разработчиков системного программного обеспечения, а не приложений.

Ключевых же изменений х86-64 по сравнению с сегодняшним состоянием IA-32 действительно не так много и они в определенном смысле аналогичны тем, которые были внесены при переходе от 16-ти к 32-разрядной архитектуре х86. Эти нововведения включают:

  • 64-разрядные виртуальные адреса (в конкретной реализации возможна меньшая разрядность);
  • "плоское" (flat) адресное пространство с единым пространством кодов, данных и стека;
  • 64-разрядный счетчик команд (RIP);
  • режим адресации относительно счетчика команд;
  • расширение регистров общего назначения (целочисленных) до 64 разрядов;
  • добавление 8 новых регистров общего назначения (R8-R15);
  • добавление еще 8 SSE-регистров XMM8-XMM15 разрядностью 128 (соответствует предложенному Intel расширению SSE2).
Рис. 1. Пример расширения регистров общего назначения

«Указания» на дополнительные регистры и размеры данных вводятся как префикс команд. Набор основных регистров x86-64 представлен на рис. 1. Регистры являются 64-разрядными, за исключением 32-разрядного регистра EFLAGS, 128-разрядных регистров ХММ и 80-разрядных регистров с плавающей запятой ST. Архитектура x86-64 включает, в частности, SSE2-расширения IA-32, представленные в Pentium 4.

На рис. 1 показано, каким образом расширены новые 64-разрядные регистры относительно 32-разрядных регистров в IA-32. Для выполнения 16-разрядных операций регистр А адресуется как АХ, для выполнения 32-разрядных операций - как EAX, а для выполнения 64-разрядных - как RAX. При выполнении 32-разрядных операций, в которых целочисленный регистр служит регистром результата, 32-разрядные значения дополняются нулями до 64-разрядных. 8-ми и 16-разрядные операции над целочисленными регистрами сохраняют старшие разряды неизменными .

Для работы с 64-разрядной адресацией в х86-64 введен режим Long Mode (назовем его «расширенным режимом»). Режим работы задается управляющим битом LMA (Long Mode Active), который взводится, если микропроцессор переходит в расширенный режим. В расширенном режиме регистры сегментов ES, DS, FS, GS, SS игнорируются. В регистре CS (дескриптор сегмента кода) находятся биты, уточняющие режимы работы микропроцессора.

В х86-64 расширенный режим имеет два «подрежима»: 64-разрядный режим и режим совместимости. В режиме совместимости обеспечивается двоичная совместимость с 16-ти и 32-разрядными режимами х86. Выбором подрежима управляет бит CS.L. Если он установлен в 0 (режим совместимости), 64-разрядная операционная система, работая в режиме LMA, может выполнять старые 16-ти и 32-разрядные х86-приложения. За выбор размера операнда отвечает бит CS.D.

По умолчанию, в 64-разрядном режиме (взведен бит LMA, CS.L = 1, CS.D = 0) применяются 64-разрядные адреса и 32-разрядные операнды. Используя префиксы команд, можно изменить размер операнда (установить его равным 64 или 16 разрядам), а также изменить размер адреса (установить равным 32 разрядам). В таблицах 1 и указаны основные допустимые типы режимов процессора и режимов работы операционной системы и приложений.

Приведенные данные показывают, что процессоры с архитектурой х86-64 могут работать как с уже существующими 16-ти и 32-разрядными, так и с новыми 64-разрядными операционными системами. В последнем случае в режиме совместимости возможно одновременное выполнение 16-ти и 32-разрядных приложений благодаря установке соответствующих бит в индивидуальных сегментах кодов. При этом 32-разрядные приложения могут использовать первые 4 Гбайт виртуальной памяти.

Для выяснения особенностей микропроцессоров с архитектурой х86-64 необходимо анализировать регистры EAX/EBX/ECX/EDX, в которые помещаются результаты выполнения команды CPUID (при ее вызове, как и ранее, в EAX нужно положить 8000_0000h). Если 29-й бит в EAX равен 1, микропроцессор работает в расширенном режиме.

В х86-64 имеется еще ряд интересных усовершенствований, особенно для задач системного программирования. В качестве примера отметим введение нового регистра приоритета задач TPR, который используется для ускорения обработки прерываний. За подробностями отсылаем читателей к описанию x86-64 .

Микроархитектура Hammer

Процессор Athlon относится к седьмому поколению архитектуры x86, реализованному компанией AMD. Первые процессоры, в которых будет реализована архитектура х86-64, получили кодовое название Hammer и представляют собой восьмое поколение х86-процессоров от AMD. В них продолжилась тенденция определенного отхода системы команд процессоров AMD от полной тождественности с Intel x86. Однако если прежде отличия были связаны с введением AMD новых команд 3DNow!, то теперь Hammer, в отличие от х86, становится 64-разрядным. В Hammer применяются 64-разрядные внутренние «шины», используемые для обмена данными. Виртуальное адресное пространство является 48-разрядным, а пространство физических адресов - 40-разрядным.

Целями AMD при создании данного семейства микропроцессоров, помимо очевидной цели поддержи х86-64, были :

  • по возможности минимальное увеличение площади микросхемы;
  • обеспечение возможностей дальнейшего беспрепятственного роста тактовой частоты процессора на современном уровне развития технологий;
  • обеспечение при этом ускорения как 64-разрядных, так и 32-разрядных приложений. Общее представление о микроархитектуре Hammer дает рис. 2 .

В современных наиболее мощных RISC-процессорах имеется тенденция интеграции в микропроцессор кэш-памяти второго уровня большой емкости. Как Intel, так и AMD в своих высокопроизводительных процессорах не так давно уменьшили емкость кэша второго уровня с 512 Кбайт до 256 Кбайт, одновременно интегрировав его в процессор. Но в Pentium 4 Northwood разработчики Intel вновь расширили кэш второго уровня до 512 Кбайт. Соответствующие официальные данные по Hammer отсутствуют; между тем емкость кэша второго уровня может сильно повлиять на его производительность. По мнению некоторых аналитиков, емкость кэша второго уровня в старших моделях Hammer будет вчетверо выше, чем у современных моделей Athlon.

Буферы быстрой переадресации в данном процессоре по сравнению с Athlon модернизированы. I-TLB первого уровня в Hammer имеет емкость 40 строк (на 16 строк больше, чем раньше) и является полностью ассоциативным. У D-TLB первого уровня те же характеристики. Оба буфера TLB обеспечивают работу со страницами памяти емкостью 4 Кбайт, 2 Мбайт и 4 Мбайт.

I-TLB второго уровня, как и D-TLB второго уровня, содержат по 512 строк (вдвое больше, чем в Athlon) и являются 4-канальными частично-ассоциативными. Как указано в , TLB обладают уменьшенными по сравнению с Athlon задержками. Кроме того, аппаратно реализована возможность разделения TLB между несколькими процессами (для этого предусмотрен специальный «фильтр поджога»).

Очевидно, что увеличение емкости TLB и поддержка страниц памяти больших размеров ориентированы на использование в системах с большой емкостью памяти; это естественно для 64-разрядных приложений. Возможность разделения TLB, в свою очередь, может повышать производительность многозадачных операционных систем на серверных приложениях.

Традиционным направлением совершенствования современных микропроцессоров является улучшение точности предсказания переходов. В Hammer имеется массив адресов переходов емкостью 2К строк, а также таблица глобальной истории переходов, содержащая 16К 2-разрядных счетчиков (в 4 раза больше, чем у Athlon). Наконец, емкость стека адресов возврата - 12 строк.

Важной особенностью, способствующей повышению производительности, является интеграция в Hammer контроллера оперативной памяти. Это позволяет и пропускную способность увеличить, и уменьшить задержки. Данные характеристики будут автоматически улучшаться с ростом частоты процессора. Для архитектуры х86 эта особенность уникальна; Compaq же в своих новейших процессорах Alpha EV7 идет по такому же пути.

Контроллер памяти будет иметь интерфейс шириной 8 или 16 байт к оперативной памяти типа DDR. В последнем случае речь идет о двухканальной DDR-памяти, по 4 регистровых DIMM-модулей на канал. AMD обещает поддержку как регистровых, так и небуферизованных DIMM-модулей для памяти типа DDR PC1600/PC2100/PC2700. При использовании PC2700 в двухканальном варианте пропускная способность оперативной памяти достигнет значения 5,3 Гбайт/с. Для сравнения, процессор Intel McKinley, который вследствие особенностей архитектуры IA-64 нуждается в повышенной пропускной способности оперативной памяти, будет снабжен системной шиной лишь немного быстрее - 6,4 Гбайт/с.

Применение при построении систем на базе Hammer технологии HyperTransport позволит уменьшить задержки оперативной памяти с ростом тактовой частоты микропроцессора, автоматически повышать пропускную способность так называемых snoop-проб при поддержании когерентности кэша в многопроцессорных системах с ростом частоты и, наконец, масштабировать пропускную способность и емкость оперативной памяти с ростом числа процессоров в системе.

Фронтальная часть конвейера включает выборку и декодирование команд (рис. 2). Логика работы этих стадий в Hammer усложнилась, возросла степень упаковки команд, направляемых декодерами к планировщикам. По сравнению с Athlon длина этой части конвейера возросла на 2 стадии, так что общая длина целочисленного конвейера Hammer равна 12, а конвейера с плавающей запятой - 17 стадий . По мнению разработчиков, это должно способствовать беспроблемному росту тактовой частоты процессора по мере совершенствования технологии изготовления. Первоначально планируется использовать 0,13-микронную технологию «кремний-на-изоляторе»; во второй половине 2003 года планируется переход к 0,09 мкм.

Надо отметить, официальные данные о площади, занимаемой Hammer, отсутствуют. Между тем, появились сообщения о том, что процессор ClawHammer будет обладать площадью всего 105 мм 2 , в то время как Athlon/Palomino, выполненный по той же технологии на 0,13 мкм - 80 мм 2 . Для сравнения, площадь McKinley, судя по представленным Intel на международной конференции ISSCC ?2002 данным, - 464 мм 2 .

Недостатки и достоинства длинных конвейеров хорошо известны: легче увеличивать тактовую частоту, но больше потери на перезаполнения конвейера, в частности, при неправильном предсказании перехода. Интересно сопоставить длину конвейера Hammer с другими современными микропроцессорами Intel. В Pentium 4, добившемся рекордных частот в 2,2 ГГц, по сравнению с Pentium III длина конвейера благодаря использованию технологии HyperPipeline возросла вдвое - до 20 стадий. Это имело ту же цель - обеспечение беспрепятственного роста тактовой частоты; в Intel говорят о 10 ГГц к 2005-2006 годам. В McKinley длину конвейера, наоборот, сократили - до 8 стадий против 10 в Itanium, но его ожидаемая частота - 1 ГГц.

Производительность, как известно, зависит не только от тактовой частоты, но и от числа реально выполняемых за такт команд. По утверждению AMD , в Hammer число это повысится. А вот на какой частоте будет работать Hammer, не сообщается; можно предположить, что этот показатель окажется около 2 ГГц.

Построение систем на базе Hammer

Мы рассмотрели основные особенности микроархитектуры Hammer, за исключением применения технологии HyperTransport. Она используется в Hammer как для подсоединения системы ввода-вывода, так и для организации межпроцессорных связей. Фактически благодаря встроенному в Hammer контроллеру оперативной памяти и применению технологии HyperTransport в Hammer интегрированы основные функции набора микросхем (точнее говоря, северного моста).

Собственно технология HyperTransport развивается одноименным консорциумом, основанном компаниями AMD, Sun Microsystems, Cisco Systems, Nvidia, Transmeta и Apple Computer. Думаю, потребности в разработке такой технологии диктовались в первую очередь возникновением узких мест в системах ввода/вывода в ПК и вообще использованием шин PCI, характеристики производительности которых не удовлетворяют требованиям современных высокопроизводительных сетевых плат и каналов ввода/вывода для жестких дисков.

Каналы HyperTransport при том же числе контактов, что и PCI, обеспечивают гораздо более высокую пропускную способность: пиковая величина ее составляет 3,2 Гбайт/с. Каналы HyperTransport имеют ширину 16 разрядов, обеспечивая 1,6 миллиардов передач в секунду в каждом направлении. HyperTransport позволяет осуществить соединения типа «точка-точка» с полнодуплексным режимом и расщепленной обработкой транзакций. Такие характеристики данной технологии позволяют использовать ее и для организации межпроцессорных связей; в последнем случае, в отличие от ввода/вывода, применяется вариант HyperTransport с поддержанием когерентности кэша.

Рис. 3. Схема построения 4-процессорных систем на базе Hammer

Процессоры Hammer имеют по три порта для каналов HyperTransport (рис. 3), плюс порт к контроллеру оперативной памяти. Поэтому в состав процессора введен коммутатор ХВОХ , который маршрутизирует команды и данные между этими портами и интерфейсом системных запросов (очередь SRQ). Эта очередь имеет длину 24 строки, а очередь к DRAM-контроллеру (Memory Command Queue) - 20 строк . Для связи с подсистемой ввода/вывода в Hammer используется мост Host Bridge, тогда два других канала HyperTransport задействуются в межпроцессорных обменах.

Единственное, что не встроено в Hammer - это интерфейс с AGP; поэтому микросхеме, занимающей место северного моста (рис. 4), необходимо поддерживать этот интерфейс. Предполагается, что это будет AGP 8X.

С этой микросхемой соединен южный мост. Хотя AMD традиционно предлагает набор микросхем для своих новых процессоров и сделает это, очевидно, и для Hammer, уже известно о разработках южного моста для этого процессора компаниями Nvidia и VIA Technologies. Кроме того, в многопроцессорных системах ожидается применение «шлюза» между HyperTransport и PCI-X ; возможно применение аналогичных средств для других стандартов ввода/вывода.

Рис. 4. Архитектура многопроцессорных систем на базе Hammer

А) однопроцессорная система

Б) двухпроцессорная система

В) четырехпроцессорная система

Схемы, представленные на рис. 4, демонстрируют эффективность построения многопроцессорных систем на базе Hammer. В таких компьютерах с ростом числа процессоров масштабируются не только вычислительная мощность, емкость и пропускная способность оперативной памяти, но и ресурсы подсистемы ввода/вывода. Так, в 8-процессорной системе доступными будут 64 (8х8) DIMM-модуля (до 128 Гбайт) и 4 канала HyperTransport с суммарной пропускной способностью 25 Гбайт/с для дуплексной передачи.

AMD анонсировала набор микросхем серии 8000, который будет доступен в четвертом квартале 2002 года. Он включает микросхемы AMD-8151 (организует интерфейс с AGP 3.0), AMD-8131 (мост от HyperTransport к PCI-X) и AMD-8111 (концентратор ввода/вывода, обеспечивает поддержку PCI-32/33 МГц, USB, IDE и т.п.).

Интересно организовано обеспечение когерентности кэша с использованием каналов HyperTransport при числе процессоров от 4 и выше: в обработке соответствующих запросов участвуют несколько образуемых каналами HyperTransport путей между процессорами , что способствует ускорению работы. В принципе возможно построение систем с числом процессоров Hammer, большем 8, но для этого понадобится коммутатор HyperTransport.

Задержки при работе с локальной (ближней к микропроцессору) оперативной памятью незначительно возрастают при обращении к «удаленной» памяти. На ненагруженной 4-процессорной системе задержка равна 140 нс, на аналогичной 8-процессорной системе - 160 нс. Это позволяет говорить об архитектуре SMP, а не ссNUMA. Вместе с тем применение технологии коммутации вместо системных шин позволяет достигнуть высоких показателей и по пропускной способности оперативной памяти. Для операций типа копирования она составляет 8 Гбайт/с для 4-процессорной системы, что, по утверждению AMD, существенно выше, чем в шинных архитектурах .

В ожидании Hammer

Начало продаж Hammer начнется ориентировочно в третьем квартале 2002 года. Первым микропроцессором данного семейства станет ClawHammer, ориентированный на одно- и двухпроцессорные системы; затем появится SledgeHammer. Хотя по сути Hammer должен вступить в конкуренцию с микропроцессорами архитектуры IA-64 (к тому времени должен появиться и McKinley), можно предположить, что в будущем Hammer окажется в состоянии вытеснить Athlon на всем спектре применений (но на это может уйти не один год). Это означает также, что Hammer может стать конкурентом Pentium 4.

Кроме существующих 32-разрядных операционных систем, на 64-разрядную архитектуру Hammer переносятся NetBSD, FreeBSD и Linux, а также современные разновидности Windows.

Преимуществами х86-64 и Hammer являются:

  • совместимость с 16-ти и 32-разрядными приложениями при высоком уровне производительности выполнения;
  • относительная (по сравнению с IA-64) простота перехода от х86 и соответственно отсутствие необходимости чрезмерных финансовых затрат на этот переход;
  • меньший риск неудачи новой архитектуры;
  • простота разработки и реализации;
  • небольшая площадь, что повышает выход годных и облегчает масштабирование по тактовой частоте.

Можно сказать, что благодаря выбранному «эволюционному» подходу можно более надежно предсказать успехи в росте производительности.

Перечисленные преимущества сопровождаются и некоторыми потенциально «опасными» для AMD моментами. Архитектура х86-64 не столь «революционна», как IA-64; более того, число регистров по сравнению с современными RISC-процессорами не выглядит достаточно большим, что, как известно, усложняет оптимизацию программ.

AMD придется продемонстрировать, что высоты производительности достижимы главным образом за счет технологии (и соответствующего роста тактовой частоты), но не за счет архитектуры. Пока это успешно доказывает, в частности, Pentium 4, а вот обратных доказательств со стороны IA-64 пока не получено.

Для создания 64-разрядных приложений понадобится разработать оптимизирующие компиляторы, информация о которых пока отсутствует. Наконец, современная компьютерная индустрия стоит на пороге выбора новых стандартов ввода/вывода - Infiniband, PCI-X, 3GIO, HyperTransport. Жесткая привязка к технологии HyperTransport способна вывести AMD в лидеры, но и несет в себе определенный риск.

Что касается областей применения, где нужна 64-разрядная архитектура, то AMD указывает в первую очередь на СУБД, САПР, средства создания цифрового «содержания». По мнению автора, процессоры Hammer могут оказаться активно востребованы на быстро растущем сегменте рынка - кластерах (в первую очередь, Linux-кластерах) с двухпроцессорными узлами.

В настоящее время очень популярной является такая платформа на базе Athlon MP; аналогичные системы на базе Pentium 4/Xeon стоят заметно дороже. При сохранении такого соотношения AMD сможет рассчитывать на успех и в этой части рынка.

Работа поддержана РФФИ, проект 01-07-90072.

Литература
  1. Михаил Кузьминский, "Краткий обзор IA-64" . "Открытые системы", 1999, № 9-10
  2. Михаил Кузьминский, "Микроархитектура Itanium" . Открытые системы, № 9, 2001
  3. Михаил Кузьминский, "Z-архитектура. Современные 64-разрядные мэйнфреймы IBM" . "Открытые системы", 2001, № 10
  4. "x86-64 Technology White Paper", 2001, AMD
  5. "AMD 64-Bit Technology. The AMD x86-64 Architecture Programmers Overview", AMD, 2001, Jan.
  6. "AMD Eight-Generation Processor Architecture. White Paper", AMD, 2001, Oct.
  7. F. Weber, "AMD Next Generation Microprocessor Architecture", Microprocessor Forum, 2001

Михаил Кузьминский ([email protected]) - старший научный сотрудник Центра компьютерного обеспечения ИОХ РАН (Москва).