Архитектура процессоров семейства
Athlon-64
Лукашевич А. С.
Принял: Рыбин В. О.
г. Запорожье
2005 год
Впервые со времен i386 архитектура х86 подвергается расширению — подчеркиваем, не «подклеиванию» новых наборов команд, а полноценному расширению. Дело здесь даже не в том, что теперь на каждом рабочем столе может стоять 64-битный компьютер — само по себе это не прибавляет производительности. Да и не так уж много у обычного потребителя задач, в которых это важно (разве что криптография, поскольку при переходе на 64 битовые вычисления она выигрывает едва ли не больше всех). Дело в том, что теперь архитектуре х86 (обновленной) вновь есть, куда расти. Кроме того, данная архитектура исправляет некоторые огрехи, присущие х86 от рождения — например, в 64 битном режиме применяется «плоская» модель памяти, количество регистров общего назначения расширено до 16 (чуть дальше автор покажет, какие дивиденды это приносит). Так что самое время задаться вопросом — а кто же выиграет от подобного расширения архитектуры? Для начала перечислим группы пользователей, которым 64 адресация и 64 битовые вычисления нужны уже сейчас:
Таким образом, некоторый круг потенциальных потребителей новой архитектуры сложился уже сейчас. Тем же из покупателей, которым эти возможности не нужны, нет нужды использовать их в данный момент — для 32 битовых приложений ничего не меняется. Вообще ничего. Кроме того, вполне можно пользоваться 32 битными приложениями в 64 битной операционной системе — эдакие 64 бита «в рассрочку». Похоже, добавление этой технологии не так дорого — по заверениям AMD, данная технология увеличивает количество транзисторов на 2%-3%. Это связано в основном с расширением TLB (сокращение от Translation Lookaside Buffer — буфер быстрого преобразования адреса, представляющий собой специальную кэш-память; используется для ускорения страничного преобразования), а также всевозможных буферов всех видов и сортов, да расширение всех конвейеров и путей данных до 64 бит. Кстати, AMD слегка «хитрит» в этой оценке — по количеству транзисторов они, возможно, и правы (тем более что есть кэш, в котором транзисторов немало), но вот прирост площади кристалла будет явно больше.
Не будем таить греха — хороша х86, или нет, но именно эта архитектура является доминирующей по числу и инсталлированных систем, и существующего программного обеспечения. До сих пор, во многом с подачи Intel, бытовала точка зрения, что, дескать, х86 доживает последние дни (забавно, но такой точке зрения уже больше десяти лет — хоронили х86, хоронили, а она многие RISC процессоры пережила) — в дальнейшем все будем постепенно переезжать на новую архитектуру. В роли таковой, вполне естественно, прочили IA64. Однако AMD продемонстрировала, что архитектуре х86 еще есть куда расти и развиваться, при этом сохраняя свое самое важное преимущество - инсталлированную базу программного обеспечения. Что ж, это хорошие новости — сомневаемся, чтобы даже наиболее оптимистично настроенные пользователи пришли в восторг, узнав, что для перехода на новую, совершенно замечательную и прогрессивную архитектуру IA64 ему нужно выложить немаленькую сумму за оборудование и намного большую сумму за программное обеспечение. Так что эволюционный подход надо признать правильным и щадящим для пользователя. Не говоря уже о том, что такой подход дает возможность нацелить продукт сразу на несколько сегментов рынка, что явно выгоднее с финансовой точки зрения….
Режимы работы процессора – что изменилось?
Фактически, кроме стандартных и известных со времен i386 режимов, введен особый режим — Long mode. Когда он включен (бит LME выставлен в единицу), есть два «частных» режима работы процессора. В одном из них процессор находится в режиме совместимости, во втором — в «честном» 64 битном режиме. Для чего понадобилось делать 2 «частных» режима для 64 битного режима? Все очень просто — когда Вы используете 32 битную операционную систему, тогда пользоваться 64 битовым режимом нет никакого смысла. Но как только вы стали работать на 64 битной ОС, далее у вас два варианта — вы можете использовать старое, 32 битное программное обеспечение (и тогда и нужен режим совместимости), а можете использовать новое, 64 битное. Кроме того, переключения «частных» режимов Long mode происходят весьма быстро, в отличие от переключения режимов работы процессора. Таким образом, введение таких режимов становится целесообразным. По-видимому, есть смысл привести таблицу, поясняющую доступные программисту режимы процессора, и режим работы в них:
LME | Атрибут сегмента кода | Режим | |
бит L | бит D | ||
0 | х | 0 | Обычный 16-битный |
0 | х | 1 | Обычный 32-битный |
1 | 0 | 0 | Совместимый 16-битный |
1 | 0 | 1 | Совместимый 32-битный |
1 | 1 | 0 | «Честный» 64-битный |
1 | 1 | 1 | Зарезервировано |
Символ «х» обозначает, что при выставленном бите LME в значение «0» значение бита L игнорируется.
Как видно, у процессора есть и 64 битный режимы работы, и 32 битный, и 16 битный — собственно, поддерживаются все предыдущие режимы. Это и есть условие совместимости, не так ли?
Нельзя не отметить, что для того, чтобы пользователи смогли воспользоваться преимуществами х86-64, 8-ми дополнительными регистрами общего назначения, 8-ми дополнительными регистрами SSE2, и прочими программными «вкусностями» этих процессоров, необходим компилятор. И он — достаточно важная часть программы по продвижению этого процессора, и даже более важная для архитектуры х86-64! Ибо, если компилятора не будет, то мало кто начнет программировать под этот процессор вручную…. Если он будет, но будет неудобным — опять же, это скажется на количестве программистов, и, как следствие, на количестве пользователей (и финансовых показателях компании AMD). Таким образом, требования к компилятору достаточно высоки.
Надо отметить, что AMD хорошо это понимает — и работы над несколькими независимыми версиями компиляторов ведутся, вместе со всемирно известными компаниями-разработчиками программного обеспечения.
Чтобы продемонстрировать полную совместимость своего детища, AMD проверила системы на новом процессоре в более чем 50 (!) операционных системах. Вот некоторые примеры систем, совместимость с которыми проверена:
Windows (3.1, 9x, Me, 2000 Pro, 2000 Server, 2000 Advanced Server, WfW, XP)
Windows NT (3.51 WS, server, 4.0 w/SP6, NT 4 Workstations)
DOS (MSDOS 6.21, Novell DOS 7.0, PC DOS 6.1, 6.3, 7.0
Linux (Mandrake 7.0, 7.1, Redhat 6.0, 6.1, 6.20, 7.0, Slackware 1.2, 2.0, SuSE 7.0)
Unix (SCO, FreeBSD 3.0, Solaris 2.5, 2.6, 7, 8)
Misc (OS/2 Warp3.0, 4.0, BeOS 4.5, 5.0, Netware 4.11, 4.2, 5.0, 5.1)
Тем временем перейдем непосредственно к процессору, к его ядру.
Для начала дадим общую схему ядра, и затем пройдемся по некоторым блокам. Наибольший интерес представляют кэш и конвейеры декодирования.
Общая схема ядра
Сразу отметим несколько особенностей:
Здесь необходимо сделать очень важный комментарий. Дело в том, что достоверно изветсно, что процессор имеет 3 FPU (опять же, по одному на канал), и отдельный (!) блок умножения. Если внимательно проследить по схеме, то так и есть (заметьте три стрелки, входящие в 36-entry Sceduler).