Em64t процессоры что это

Обновлено: 04.07.2024

В прошлом году Intel выпустила новое ядро — Prescott — для Pentium 4 , особенностью которого стал 90 -нм техпроцесс, кэш 2-го уровня возрос до 1 Мбайт, кроме того, появился набор инструкций SSE3 . Одновременно на суд общественности был представлен Pentium 4 Extreme Edition 3,4 ГГц с 2 Мбайт кэша 3-го уровня. Летом была объявлена платформа Socket 775 , которая заинтересовала нас тем, что ножки с процессора “перешли” на сокет. Вместе с новым разъемом мы получили и чипсеты i915 и i925 , набор функций которых приятно порадовал всех: DDR2 SDRAM , PCI Express для графики и периферии, звук HDA , WLAN , Matrix RAID и т.д. Примерно в то же время Intel ввела модельные номера, до этого этим баловалась только AMD . И нам пришлось привыкать к линейке Celeron 3xx , Pentium 4 5xx .

Однако у нового ядра Prescott были проблемы с высоким тепловыделением, которое достигало 115 Вт для топовых моделей. При этом производительность по сравнению с ядром Northwood практически не увеличилась. Конкуренты меж тем не спали, AMD представила ядро Winchester , которое отличалось низким тепловыделением. Кроме того, компания подкупала пользователей технологиями Cool'n'Quiet (снижение частоты и напряжения при малых нагрузках), NX-bit (запрет выполнения кода на переполнение буфера) и x86-64 (64-битные расширения).

В итоге Prescott дорабатывали много раз и на свет появилось очень много степпингов процессора. Спустя некоторое время инженеры Intel представили хорошо сбалансированные процессоры со степпингом E0 . Появившаяся технология Thermal Monitoring 2 улучшила защиту от перегрева — процессор стал снижать частоту и напряжение, если тепловыделение достигнет критического предела. Подобный подход лучше троттлинга (Throttling), когда процессор в той же ситуации пропускал тактовые импульсы. Впрочем, он по-прежнему включается, но в экстремальных случаях. Технология Thermal Monitoring 2 может работать и в режиме бездействия для снижения тепловыделения, но для этого нужно установить Service Pack 2 . В новом степпинге появился XD-bit , выполняющий функцию запрета выполнения вредоносного кода, для этого SP2 также необходим. Процессоры с поддержкой этой фишки получили суффикс J . Появление 64 -битных расширений EM64T в степпинге E0 для 500-й линейки мы так и не увидели.

Однако вспомним про AMD, которая к тому времени представила процессоры Athlon 64 4000+ и FX-55 . Последний оказался лучшим процессором для геймеров, показывая экстремальную производительность в играх. На этот выпад Intel ответила выпуском чипсета i925XE и Pentium 4 Extreme Edition 3,46 ГГц с системной шиной 1066 МГц. Другие характеристики нового P4 EE не изменились: кэш L2 512 Кбайт, L3 — 2 Мбайт (ядро Gallatin ). Увы, при экстремальной цене $ 999 новичок проигрывал FX-55 в большинстве игровых тестов.

Вот, вкратце, ситуация на начало 2005 года.

Технология SpeedStep позволяет Windows программно использовать интерфейс ACPI для уменьшения тактовой частоты процессора до 2,8 ГГц при низкой нагрузке. Для работы SpeedStep необходимы следующие условия:

  • процессор должен поддерживать SpeedStep;
  • материнская плата и BIOS должны поддерживать SpeedStep;
  • должна быть установлена система Windows XP Service Pack 2;
  • необходимо выбрать мобильную схему энергопотребления под Windows.

Наша материнская плата ASUS P5AD2-E Platinum (i925XE) обеспечивает полную поддержку SpeedStep.

Итог по SpeedStep будет таков: для игр его лучше вообще отключать, а для офисной и другой работы — включать. Тогда процессор будет работать на меньших частотах и выделять меньше тепла.

ASUS P5AD2-E Platinum поддерживает все функции, которые заложены в Pentium 4 6xx.

Самое главное отличие новых Pentium 6xx — увеличение кэша L2 до 2 Мбайт. Вся новая серия процессоров поддерживает XD-bit. Технология управления энергопотреблением еще улучшилась: если степпинг E0 мог похвастаться Thermal Monitoring 2, то у новых процессоров добавилась технология Enhanced SpeedStep , которая ранее использовалась только в мобильных процессорах компании. Она позволяет снижать напряжение и частоту, если нагрузка на процессор невелика. Главное отличие между двумя технологиями заключается в том, что “инициатором” снижения частоты в последнем случае выступает операционная система, а не процессор.

Все Pentium 6xx поддерживают 64-битные расширения EM64T (аналог расширений x86-64 от AMD). Впрочем, эта особенность может быть полезна только при использовании Windows XP 64-bit Edition . Но даже после официального появления этой ОС проблемы для пользователей AMD и Intel не закончатся: дело в том, что прирост производительности вы получите, только если ОС, драйвера и программы будут 64-битными. А вот с этим большие проблемы и даже сложно сказать, когда мы сможем воспользоваться плодами новой технологии. С другой стороны, если Intel взялась за это дело, то процесс пойдет гораздо быстрее.

Стоит еще сказать, что технология EM64T будет встречаться и в некоторых моделях серии 5xx (с “единичками” в конце номера), а вот Enhanced Speed Step останется эксклюзивной чертой линейки 6xx.

Физически кристалл линейки Pentium 4 6xx существенно больше, чем у 5xx: 169 миллионов транзисторов и 135 мм 2 против 125 миллионов и 112 мм 2 .

Достаточно интересна новая модель P4 Extreme Edition. К сожалению, Pentium 4 Extreme Edition 3,46 ГГц, вышедший в ноябре 2004-го, так и не оправдал надежд, поэтому был списан в утиль. На смену ему пришел новый P4 Extreme Edition 3,73 ГГц, который представляет из себя обычный процессор линейки 6xx, но с частотой системной шины 1066 МГц. Кэш 2-го уровня составляет все те же 2 Мбайт, а вот с кэшем 3-го уровня пришлось распрощаться.

Стоит отметить, что линейка 6хх будет дороже 500-х моделей при равных тактовых частотах.

На протяжении многих лет мы привыкли к тому, что производители процессоров регулярно радовали нас увеличением тактовых частот — этот показатель стоял во главе угла. К концу 2004 года Intel планировала выпустить Pentium 4 с частотой 4 ГГц, но он так и не появился. Инженеры и руководство компании осознали, что не в гигагерцах счастье да и просто невозможно гнать частоту постоянно, тем более что ее увеличение не ведет к пропорциональному росту производительности системы.

У AMD ситуация похожа: вряд ли в этом году мы увидим процессор, который перешагнет порог в 3 ГГц. Да и зачем это нужно, если современные Athlon 64 со скоростями до 2,6 ГГц успешно конкурируют с продукцией Intel.

Обе компании сегодня работают над повышением эффективности и производительности своих процессоров за счет использования новых технологий, расширения их функций. Гонка за тактовыми частотами окончена. Собственно, 6хх-серия стала прекрасным тому примером.

600-й он и в Африке 600-й — высший класс!

Если сравнивать линейки 5хх и 6хх, то заключение будет вполне определенным: новые версии процессоров лучше, хотя удвоенный размер кэша не особо влияет на производительность. Зато благодаря функциям EM64T, XD-bit, Thermal Monitoring 2, Enhanced SpeedStep новые Pentium 4 выглядят очень перспективно. Большая производительность, внушительный набор дополнительных функций и разумное энергопотребление существенно меняют картину. Тем более что новинки полностью совместимы с уже привычными материнскими платами под Socket 775, единственное, что вам может потребоваться сделать, так это обновить BIOS.

До этого момента Intel можно было обвинить в некоторой медлительности внедрения новых технологий: AMD гораздо раньше реализовала 64-битные расширения, хотя реальное преимущество от нее до сих пор не очевидно. NX-bit и Cool'n'Quiet владельцы AMD также увидели довольно давно.

Впрочем, остается непонятным, почему Intel объявила столь высокую цену на новые процессоры: они существенно дороже старых версий.

Так или иначе, но в ближайшие месяцы от Intel стоит ждать куда более кардинальных обновлений линейки Pentium 4 — двухъядерные процессоры, технология виртуализации Vanderpool (VT) и многое другое.

x86-64

x86-64 (x64/AMD64/Intel64/EM64T) — аппаратная платформа. Автором технологии является компания AMD. Платформа создана для выполнения 64-разрядных приложений.

Представляет собой расширение x86-архитектуры, обладает практически полной обратной совместимостью.

Компании Microsoft и Oracle применяют для индикации данного набора инструкций термин «x64», хотя каталог с файлами в дистрибутивах Linux имеет название «amd64» (в случае с архитектурой x86, именуется как «i386»).

На сегодняшний день, платформу x86-64 поддерживают следующие компании:


Название

Есть несколько вариаций названия данной технологии. Порой, противоречия в именовании платформы в каждой отдельной компании создают общую путаницу. Попробуем разобраться в терминологии:

  • x86-64 — изначальный вариант названия, под которым компания AMD опубликовала первую предварительную спецификацию.
  • x64 — название версий ОС Windows и Solaris. Используется в качестве названия для архитектуры компаний Microsoft и Sun Microsystems.
  • AA-64(AMD Architecture 64) — название архитектуры, автором которого стал известный неофициальный справочник sandpile.org, по аналогии с IA-64.
  • Hammer Architecture— название основывается на первых ядрах процессоров, поддерживавших данную архитектуру — Clawhammer и Sledgehammer.
  • AMD64 — название технологии, данное фирмой-разработчиком - компанией AMD. Появилось после выпуска первых Clawhammer и Sledgehammer процессоров. На данный момент, является официальным названием для реализации от AMD.
  • Yamhill Tehnology— первичное название аналогичной технологии от Intel. Порой также встречалось название CT (Clackamas Technology).
  • EM64T(Extended Memory 64 Technology) — первое официальное название реализации Intel.
  • IA-32e — название порой употреблялось вместе с EM64T. В основном, использовалось для обозначения "длинного" режима (в документации Intel именуется «режимом IA-32e»).
  • Intel 64 — новое официальное название архитектуры Intel, использующееся в настоящее время. Intel потихоньку отходит от названий IA-32, IA-32e и EM64T, используя это. Теперь оно является единственным официальным названием данной архитектуры со стороны компании Intel.

В настоящее время, самыми распространенными названиями выступают: «x64», «x86-64» и «AMD64». Порой это путает AMD-пользователей - вплоть до отказа использования родных дистрибутивов ОС: пользователь не уверен, будет ли работать выбранная версия на AMD процессоре. На самом же деле, распространители программного обеспечения применяют название amd64 лишь для того, чтобы подчеркнуть, что именно компания AMD является новатором в разработке данной технологии.

Зачастую, пользователи сами путают архитектуру Intel 64 с IA-64. Важно помнить, что Intel 64 и IA-64 — совершенно разные, несовместимые между собой платформы:

  • Представители Intel 64: последние версии Pentium 4, некоторые модели Celeron D, линейка Core 2, Core i3, Core i5, Core i7, некоторые модели Intel Atom;
  • Представители IA-64: семейства Itanium и Itanium 2.


Режимы

Имеется два режима работы данной архитектуры:

  • Long mode(«длинный» режим);
  • Legacy mode(«наследственный» режим).

«Long Mode»

«Длинный» режим, будучи родным для AMD64, позволяет воспользоваться всеми дополнительными преимуществами архитектуры. Для активации данного режима требуется 64-битная ОС. К примеру, Windows 7 x64 или 64-битные версии UNIX-подобных систем (GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Mac OS X - от версии 10.4.7 и выше).

Данный режим дает возможность работать 64-битным программам, кроме того, доступна и обратная совместимость: имеется поддержка 32-битного кода для работы 32-битных приложений. Но 32-битные программы не имеют возможности читать 64-битные системные библиотеки, а также - наоборот. Для того, чтобы побороть эти ограничения, большая часть 64-разрядных операционных систем предоставляет два набора необходимых системных файлов (для родных 64-битных приложений и для их 32-битных версий). Такая же методика применялась в ранних 32-битных системах (Windows 95) для запуска 16-битных программ.

«Длинный» режим не содержит в себе некоторые «рудименты» x86-архитектуры. Например, режим виртуального 8086, сегментированную модель памяти, аппаратную мультизадачность, и прочее.

«Длинный» режим имеет одну яркую особенность: его активация производится посредством установки флага CR0.PG. Он применяется для включения страничного MMU (если это переключение разрешено (EFER.LME=1). Если переключение недопустимо, включение MMU происходит в «наследственном» режиме.

Так, исполнение 64-битного кода с запрещенным страничным преобразованием невозможно, что приводит к определенным сложностям в программировании, ведь при переключении из «длинного» в «наследственный» режим (и обратно) необходим двойной сброс MMU. Для этого код переключения должен быть в тождественно отображенной странице.

«Legacy Mode»

Этот режим зовется «наследственным» по той причине, что дает возможность процессору AMD64 работать с инструкциями, которые рассчитаны для x86-процессоров. Кроме того, в рамках активации данного режима, осуществляется полная совместимость с 32-битным кодом и соответствующими ОС.

Процессор в «наследственном» режиме работает точно так же, как стандартный x86-процессор. Дополнительные функции, доступные под архитектурой AMD64, становятся неактивны.

При активации данного режима, 64-битные программы и соответствующие операционные системы функционировать не будут.

Особенности

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

Чтобы осуществить адресацию регистров, для команд введены специальные «префиксы расширения регистра». Специально для них был выбран диапазон кодов 40h-4Fh, использующихся для команд INC и DEC в 32-битных режимах. Команды INC и DEC в 64-битном режиме кодируются в общей двухбайтовой форме.

Платформа x86-64 включает в себя:


Сегментирование

В ходе создания архитектуры x86-64, специалисты компании AMD пришли к решению окончательно покончить с главным «рудиментом» архитектуры x86 — сегментной моделью памяти. Она поддерживалась еще во времена 8086/80286.

При создании новой версии продукта виртуализации, программисты VMware обнаружили ряд непреодолимых трудностей. Загвоздки возникали в процессе реализации виртуальной машины для 64-битных систем. Чтобы отделить код монитора от кода «гостя», программа применяла механизм сегментации, но данная задача так и не была реализована на практике.

После ряда неудачных экспериментов, компания AMD возобновила ограниченный вариант сегментной организации памяти (начиная с ревизии D архитектуры AMD64). Это дало возможность запускать 64-битные операционные системы в виртуальных машинах. Компания Intel не стала следовать такому примеру. Чтобы осуществить проверку процессора на предмет возможности запуска 64-битных гостевых операционных систем, VMware снабжает продукты специальной утилитой.

Команды LAHF и SAHF, вырезанные изначально, были возвращены в систему команд из-за их активного использования в программном обеспечении виртуализации.

По мере развития средств аппаратной виртуализации (Intel VT, AMD-V), необходимость в сегментации постепенно утрачивается.

Эволюция микропроцессоров исторически подразумевала увеличение разрядности целочисленных регистров процессора, т.е. максимального числа бит, образующих числа, над которыми можно было выполнять элементарные арифметические действия путём исполнения соответствующих команд. Также от этого параметра зависит объём линейно (без всяческих ухищрений, замедляющих работу) адресуемой оперативной памяти, к которой может обращаться процессор.
Самый первый микропроцессор Intel 4004 был 4-битным, а основатель семейства x86, т.е. первый процессор, использующий наиболее популярный до сих пор базовый набор команд, Intel 8086 был 16-битным. Эпоха 32-битных микропроцессоров началась с 1985 года с процессором Intel 386, с тех пор вплоть до Intel Pentium4 и AMD AthlonXP включительно система команд процессоров только дополнялась (MMX, SSE/SSE2/SSE3, 3Dnow!), но, несмотря на увеличение разрядности внешних шин и шин кэшей вплоть до 256-бит в некоторых случаях, число разрядов целочисленных регистров общего назначения оставалось равным 32.
Тем временем, практически все высокопроизводительные процессоры более поздних, нежели x86, архитектур (преимущественно - варианты RISC) уже давно были 64-битными. (Первый такой процессор, MIPS R3000, появился в 1994 году и был известен в основном по рабочим станциям и серверам SGi). Более того, Intel продвигала уже второе поколение собственных изначально 64-битных процессоров с архитектурой IA64(базирующейся на технологии VLIW) с коммерческим названием Itanium, не обладавших программной x86-совместимостью.
Однако в 2002 году компания AMD представила развитие архитектуры x86 под названием AMD64, представляющее собой очередное расширение набора команд x86, но рассчитанное на работу с 64-битными целочисленными регистрами общего назначения. В "железе" этот набор команд впервые был реализован на процессорах семейства AMD K8: Opteron/Athlon64, полностью программно совместимых и с обычными x86 процессорами.
В течении последующих двух лет стало ясно, что полная реализация потенциала этих процессоров возможна только при работе в операционной системе, использующей соответствующий набор команд и 64-битную адресацию памяти, что, в первую очередь, позволяло без всяких ограничений работать с линейными массивами данных объемом более 4Гб.
В первую очередь на новые процессоры были портированы ОС семейства Linux вместе с достаточно представительным набором критичных к скорости процессора и требующих больших объёмов памяти приложений. Скорость и стабильность работы новых процессоров, а также принципиальные трудности с созданием настольного процессора с архитектурой Intel IA64 сподвигли компанию Microsoft заняться портированием своих ОС на эту платформу.
С этого момента стало ясно, что набор команд AMD64 станет новым индустриальным стандартом, и Intel не осталось ничего другого, как добавить в свои процессоры полный аналог набора команд AMD64, в реализации Intel названный EM64T (Extended Memory 64-bit Technology).

Чем принципиально 64-битные x86 процессоры отличаются от 32-битных?
Помимо возможности быстрой работы с целыми 64-битными числами и прямой адресации несравнимо больших объёмов как виртуальной, так и физической памяти, новый индустриальный стандарт для x86 процессоров ликвидировал три принципиальных недостатка этой архитектуры:
1)Удвоение числа целочисленных регистров общего назначения - по этому параметру все потомки Intel 386 очень сильно отставали от современных RISC и VLIW процессоров. Использование компилятором этих регистров позволяет заметно улучшить эффективность реализации многих алгоритмов.
2)Использование для операций с плавающей точкой не стека, а регистров, используемых в наборе команд SSE2. Очень заметно отражается на производительности, но также требует перекомпиляции программного обеспечения.
3)DEP - Data Execution Protection (защита от передачи на выполнение содержимого сегмента данных при возникновении ошибки переполнения), также называется EVP (Enhanced Virus Protection), сильно затрудняет работу определённых классов вредоносных программ, в первую очередь - червей и троянцев. Не требует перекомпиляции ПО, поддерживается и 32-битными ОС Microsoft, начиная с WindowsXP SP2 и Wndows 2003 Server SP1.


Что нужно для работы 64-битных x86 приложений на моём ПК?
1)64-битный x86 процессор. На момент написания FAQ это были процессоры AMD с поддержкой технологии AMD64 и Intel c EM64T, соответственно. Конкретно речь идёт о AMD Opteron/Athlon64/Turion 64(мобильный аналог Athlon64)/Sempron 64/Phenom64. У Intel поддержка EM64T присутствует у процессоров Celeron D 3X1/3X6, Pentium4 5X1/5X6/6XX, Pentium D, Pentium XE (не Pentium4 XE!), всех Xeon DP с 800МГц с шиной и XeonMP c 667МГц шиной, а также у большинства будущих процессоров Intel за исключением Pentium M и Сeleron M.

Дополнение от января 2008 года - на данный момент набор команд AMD64/EM64T окончательно стал стандартом для всех производимых мобильных, настольных и серверных x86 процессоров Intel и AMD.

Также надо убедиться, что процессор корректно опознаётся BIOS'ом материнской платы (это означает, что в него загружен необходимый микрокод, несоблюдение этого условия может привести к серьёзным проблемам в работе компьютера). В некоторых ситуациях может потребоваться обновление BIOS материнской платы. В первую очередь это касается процессоров Intel, поскольку не все LGA775-материнские платы изначально поддерживали такие процессоры.
2)Операционная система.
На момент написания FAQ доступны следующие ОС:
Microsoft Windows XP Professional x64 Edition, Microsoft Windows 2003 Server x64 Editions (Standart/Enterprise/Datacenter), Windows Server 2008, также на платформу AMD64 перенесены Sun Solaris и различные варианты Linux и FreeBSD,(детальное рассмотрение особенностей unix-подобных ОС выходит за рамки данного FAQ), Windows Vista также имеет x64 версии всех редакций кроме начальных.
3)Драйверы. Все драйверы, работающие в ядре системы должны быть 64-битными, обратной совместимости не предусмотрено. Для наиболее распространённых комплектующих (видеокарты nVidia GeForce и ATi Radeon, чипсеты и дисковые контроллеры Intel, VIA, nVidia) такие драйверы уже написаны.

Будут ли работать обычные приложения на 64-битной ОС Windows?
1)32-битные приложения для Microsoft Windows - да, будут, при этом в некоторых ситуациях возможен прирост производительности по сравнению с выполнением на том же компьютере, но под 32-битной ОC(особенно если приложение использует очень большие объёмы оперативной памяти), но при этом 32-битные приложения не могут обращаться к 64-битным DLL и элементам Active Controls и наоборот. (На практике это выразилось в том, что в составе 64-х битных Windows Internet Explorer оставлен 32-битным для корректной работы со страницами, содержащими ActiveX элементы.)
2) 16-битные приложения для Microsoft Windows - нет, за исключением нескольких программ-инсталляторов.
3) DOS-приложения - нет. (На момент написания FAQ стало известно о портировании на 64-битные версии Windows прекрасно зарекомендовавшего себя OpenSource эмулятора DosBox, что почти полностью снимает возможные проблемы)
4)Приложения Windows для IA64(Itanium) - нет.

Что всё это даст мне в данный момент и что это может дать в будущем?
Для обычных пользовательских повседневных программ перенос их в данный момент на 64-битную платформу не даёт какого-либо качественно скачка в производительности. Исключением, (да и то относительным) являются только некоторые новейшие высокотехнологичные игры.
Наибольшую пользу от перехода на 64-бита получают программы для работы с базами данных, причём чем больше объём используемых данных, тем более заметен выигрыш, программы для CAD/CAE (автоматизированное проектирование, моделирование и т.п.), а также программы для создания цифрового контента (обработка изображений, звука, видео), более подробную информацию уже, как правило, можно узнать на сайте фирмы-разработчика используемого вами ПО - как правило, из сроков готовности 64-битных версий секретов никто не делает.
Из программ, портирование которых на 64-бит Windows завершено или близится к завершению стоит упомянуть Microsoft SQL Server 2000 и 2005, Cakewalk Sonar 4.0, CryTek FarCry, Epic Unreal Tournament 2004, SiSoft Sandra 2005 Полный список ПО, которое находится на разных стадиях переноса под Windows x64 можно найти здесь.

Сравнительная таблица ограничений по максимальному объёму используемой оперативной памяти и числу процессоров для 32 и 64-битных версий операционных систем от Microsoft:

В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.

Введение

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

Какие же требования возникают к персональным компьютерам для решения сложных задач? Разумеется, это требования по объему оперативной памяти и быстродействию процессора (не путать с частотой!). Господствующая последнее десятилетие архитектура IA32 (Intel Architecture 32) предлагает 4Гб (2^32) оперативной памяти, из которой приложению обычно доступно только 2Гб, различные блоки регистров, а также наборы ухищрений типа блока предсказания переходов, которые должны повысить производительность системы без повышения такого абстрактного параметра как частота процессора [1].

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

Решением проблемы ограничений современных 32-битных машин в какой-то степени стало появление 64-битных архитектур SPARC64 и Intel Itanium. Однако они предназначены для hi-end систем и недоступны в качестве дешевых решений. По настоящему массовыми предназначено стать архитектуре AMD64 компании AMD и ее реализации EM64T компании Intel. Эти архитектуры являются близнецами и программы, скомпилированные для одной из них, запускаются и на другой. Однако исторически первой появилось именно решение от AMD. EM64T является всего лишь фактически реализацией AMD64 от Intel. Архитектура AMD64 в настоящее время реализована в процессорах всех классов: мобильных, рабочих станциях, серверах.

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

1. Архитектура AMD64

Архитектура AMD64 полностью описывается в пяти томах документации, предоставляемой компанией AMD. В этой главе представлен краткий обзор, основанный на первом томе [2]. Обратим внимание на то, что в официальной документации данная архитектура обозначается как AMD x86-64, что подчеркивает ее обратную совместимость.

1.1. Описание архитектуры

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

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

Архитектура x86-64 вводит две новые особенности:

1. расширенные регистры (рисунок 1):

2. специальный режим "Long Mode" (устоявшегося перевода пока нет), который представлен в таблице 1:

  • до 64-бит виртуальных адресов;
  • 64-битные указатель команд (RIP);
  • плоское (flat) адресное пространство.

a0029_amd64_em64t_ru/image1.jpg

Рисунок 1. Набор регистров x86-64

a0029_amd64_em64t_ru/image3.jpg

Таблица 1. Режимы работы процессора

Таблица 2 содержит сравнение ресурсов регистров и стека, доступных приложению в различных режимах. Левые колонки показывают ресурсы устаревшей x86 архитектуры, которые доступны только для совместимости. Правые колонки показывают ресурсы доступные в 64-битном режиме. Серым цветом показано отличие между режимами.

a0029_amd64_em64t_ru/image5.jpg

Таблица 2. Регистры и стек, доступные в различных режимах

Как показано в таблице 2, устаревшая архитектура x86 (такой режим называется legacy mode в x86-64) поддерживает 8 регистров общего назначения. Однако в действительности, в основном, используются лишь 4 регистра EAX, EBX, ECX, EDX. Регистры EBP, ESI, EDI, ESP имеют специальное назначение. Архитектура x86-64 добавляет 8 новых регистров общего назначения и увеличивает размер регистров с 32-х до 64-х бит. Это позволяет компиляторам повышать производительность кода. 64-битный компилятор может лучше использовать регистры для хранения переменных. Компилятор также может минимизировать обращения к памяти, локализуя работу внутри регистров общего назначения.

Архитектура x86-64 поддерживает весь набор инструкций x86 и добавляет некоторые новые инструкции для поддержки long-режима. Команды разбиты на несколько подмножеств:

Некоторые из этих команд соединяют два или более подмножества описанных выше команд. Например, это команды пересылки данных между регистрами общего назначения и XMM или MMX регистрами.

Рассмотрим более подробно представленные в таблице 1 режимы работы, поддерживаемые архитектурой x86-64. В большинстве случаев размеры адресов и операндов могут быть перекрыты префиксом команды.

Сначала опишем long-режим. Это расширение устаревшего защищенного (protected) режима. Long-режим состоит из двух подвидов: 64-битный режим и режим совместимости. 64-битный режим поддерживает все новые возможности и регистровые расширения, введенные в x86-64. Режим совместимости поддерживает бинарную совместимость с существующим 16-битным и 32-битным кодом. Long-режим не поддерживает устаревший реальный (real) режим или устаревший виртуальный (virtual-8086) режим, а также не поддерживает аппаратное переключение задач.

Поскольку 64-битный режим поддерживает 64-битное адресное пространство, то для его работы необходимо использовать новую 64-битную операционную систему. Существующие приложения при этом могут запускаться без перекомпиляции в режиме совместимости под операционной системой, работающей в 64-битном режиме. Для 64-битной адресации команд используется 64-битный регистр (RIP) и новый режим адресации с единым плоским (flat) адресным пространством и единым пространством для кода, стека и данных.

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

В 64-битном режиме размер адресов по умолчанию 64 бита, однако реализации x86-64 могут иметь меньший размер. Размер операнда по умолчанию 32 бита. Для большинства инструкций размер операнда по умолчанию может быть перекрыт с использованием префикса команд типа REX.

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

Несколько кодов операций (opcode) команд были переопределены для поддержки расширенных регистров и 64-битной адресации.

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

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

Устаревший (legacy) режим обеспечивает бинарную совместимость не только с 16- и 32-битными приложениями, но и с 16- и 32-битными операционными системами. Он включает в себя три режима:

  • Защищенный (protected) режим. Поддерживаются 16- и 32-битные программы с сегментной организацией памяти, поддержкой привилегий и виртуальной памяти. Адресное пространство - 4Гб.
  • Виртуальный (virtual-8086) режим. Поддерживает 16-битные приложения, запускаемые как задачи в защищенном режиме. Адресное пространство - 1Мб.
  • Реальный (real) режим. Поддерживает 16-битные программы с простой регистровой адресацией сегментированной памяти. Не поддерживается виртуальная память или привилегии. Доступно 1Мб памяти.

Устаревший (legacy) режим используется только при работе 16- и 32-битных операционных систем.

1.2. Достоинства архитектуры

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

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

1.3. Недостатки архитектуры

Серьезных недостатков в 32-битную архитектуру новая архитектура AMD x86-64 не внесла. Отметить можно разве лишь чуть большие требования программ к памяти из-за того, что увеличился размер адресов и операндов. Однако это серьезно не скажется ни на размере кода, ни на требованиях к объему доступной оперативной памяти.

Но фактом является и то, что AMD x86-64 не привнесла ничего существенно нового. Нет принципиального повышения производительности. В среднем после перекомпиляции программы можно ожидать прирост производительности в пределах 5-15%.

2. Программная модель AMD64

Практически все современные операционные системы сейчас имеют версии для архитектуры AMD64. Так Microsoft предоставляет Windows XP 64bit, Windows Server 2003 64bit, Windows Vista 64bit. Крупнейшие разработчики UNIX систем также поставляют 64-битные версии, как например Linux Debian 3.1 x86-64. Однако это не означает, что весь код такой системы является полностью 64-битным. Часть кода ОС и многие приложения вполне могут оставаться 32-битными, т.к. AMD64 обеспечивает обратную совместимость.

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

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

32-битный режим

64-битный режим

Общее адресное пространство процесса

Адресное пространство, доступное 32-битному процессу

2Гб (3Гб, если система загружена с ключом /3GB)

4Гб, если приложение скомпилировано с ключом /LARGEADDRESSAWARE (2Гб иначе)

Адресное пространство, доступное 64-битному процессу

Нерезидентный пул (paged pool)

Резидентный пул (non-paged pool)

System Page Table (PTE)

Таблица 3. Основные ограничения памяти в Windows

Как и в Win32, адресуемый диапазон памяти делится на пользовательские адреса и на системные. Каждый процесс получает 8Тб и 8Тб остается системе (в отличие от 2Гб и 2Гб в Win32 соответственно). Различные версии Windows имеют различные ограничения, представленные в таблице 4.

Физическая память и количество процессоров

32-битные модели

64-битные модели

Windows XP Home

Windows XP Professional

128 Гбайт, 1-2 CPU

Windows Server 2003, Standard

32 Гбайт, 1-4 CPU

Windows Server 2003, Enterprise

64 Гбайт, 1-8 CPU

Windows Server 2003, Datacenter

Windows Server 2008, Datacenter

64 Гбайт, 2-64 CPU

2 Тбайт, 2-64 CPU

Windows Server 2008, Enterprise

64 Гбайт, 1-8 CPU

Windows Server 2008, Standard

32 Гбайт, 1-4 CPU

Windows Server 2008, Web Server

32 Гбайт, 1-4 CPU

Vista Home Basic

Vista Home Premium

16 Гбайт, 1-2 CPU

128 Гбайт, 1-2 CPU

128 Гбайт, 1-2 CPU

128 Гбайт, 1-2 CPU

Таблица 4.Ограничения различных версий Windows.

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

Все процессоры, реализующие AMD64, имеют поддержку для "CPU No Execution" бита, который Windows использует для реализации аппаратной технологии "Data Execution Protection" (DEP), которая запрещает исполнение пользовательских данных вместо кода. Это позволяет повысить надежность программ, исключая влияние ошибок типа выполнения буфера с данными как кода.

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

  • RCX: первый аргумент
  • RDX: второй аргумент
  • R8: третий аргумент
  • R9: четвертый аргумент

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

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

При написании 64-битного кода можно получить дополнительный выигрыш в производительности за счет специальной оптимизации. Подробно этот вопрос рассмотрен в руководстве по оптимизации [3].

3. Перенос приложений на AMD64

Одним из назначений языков высокого уровня является по возможности сократить привязку программного кода к архитектуре и обеспечить максимально возможную переносимость между аппаратными платформами. Например, правильно написанные программы на языке Си++ теоретически не зависят от аппаратной платформы. И для компиляции существующих 32-битный приложений под платформу AMD64 в идеале достаточно просто сменить компилятор [4] и просто перекомпилировать программу. Но на практике дела обстоят более сложно.

До сих пор существует программное обеспечение, использующий ассемблерный код для 32-битных процессоров. Многие программы, написанные на языках высокого уровня, содержат ассемблерные вставки. Поэтому просто перекомпилировать большой проект часто бывает невозможно. Решение проблемы понятно. Во-первых, можно отказаться от переноса приложения на новую платформу. Это может быть весьма разумным решением, так как, например операционные системы семейства Windows обеспечивают хорошую обратную совместимость, благодаря технологии Wow64. Второй вариант - переписать программный код. Причем разумным выглядит его переписывание с использованием языков высокого уровня. Кстати заметим, что компилятор Visual C++ более не поддерживает компиляцию ассемблерных вставок в 64-битном режиме компиляции [5].

Наличие ассемблерного программного кода не единственное препятствие при освоении 64-битных систем. При переносе программ на 64-битные системы возникают разнообразные ошибки, связанные с изменением модели данных (размерности типов). Причем ряд ошибок проявляет себя только при использовании большого объема памяти, который был не доступен на 32-битных системах. Подобные ошибки хорошо описаны в статье "20 ловушек переноса Си++ - кода на 64-битную платформу" [6].

Для тестирования и проверки программного кода, переносимого на 64-битную платформу можно использовать различные специальные методики и инструменты [7]. Например, хорошие результаты дает использование статических анализаторов, таких как Viva64 (для Windows систем) и PC-Lint (для Unix систем). Более подробно с этим инструментарием можно познакомиться в статье "Сравнение диагностических возможностей анализаторов при проверке 64-битного кода" [8].

Заключение

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

Миграция 32-битных программ на AMD64, как показывают эксперименты, позволяет, во-первых, решать задачи, существенно более требовательные к памяти, а, во-вторых, получить порядка 10% прироста производительности "просто так", без изменения кода, за счет оптимизации компилятором приложения под новую архитектуру.

Можно сделать вывод, что архитектура AMD64 на много лет отодвинула проблему ограничения доступного объема оперативной памяти, но не решила проблем роста производительности современных персональных машин. Будущее остается за многоядерными и многопроцессорными системами.

Читайте также: