ARM против x86: В чем разница между двумя архитектурами процессоров?
Вы наверняка знаете, что мир процессоров разбит на два лагеря. Если вы смотрите это видео со смартфона, то для вас работает процессор на архитектуре ARM, а если с ноутбука, для вас трудится чип на архитектуре x86.
А теперь еще и Apple объявила, что переводит свои Mac на собственные процессоры Apple Silicon на архитектуре ARM. Мы уже рассказывали, почему так происходит. А сегодня давайте подробно разберемся, в чем принципиальные отличия x86 и ARM. И зачем Apple в это все вписалась?
Итак, большинство мобильных устройств, iPhone и Android’ы работают на ARM’е. Qualcomm, HUAWEI Kirin, Samsung Exynos и Apple A13/A14 Bionic — это все ARM-процессоры.
А вот на компьютере не так — там доминирует x86 под крылом Intel и AMD. Именно поэтому на телефоне мы не можем запустить Word с компьютера.
x86 — так называется по последним цифрам семейства классических процессоров Intel 70-80х годов.
Чем же они отличаются?
Есть два ключевых отличия.
Первое — это набор инструкций, то есть язык который понимает процессор
Второе отличие — это микроархитектура. Что это такое?
От того на каком языке говорят процессоры, зависит и то, как они проектируются. Потому как для выполнения каждой инструкции на процессоре нужно расположить свой логический блок. Соответственно, разные инструкции — разный дизайн процессора. А дизайн — это и есть микроархитектура.
Но как так произошло, что процессоры стали говорить на разных языках?
История CISC
Памятка программиста, 1960-е годы. Цифровой (машинный) код «Минск-22».
Всё началось в 1960-х. Поначалу программисты работали с машинным кодом, то есть реально писали нолики и единички. Это быстро всех достало и появился Assembler. Низкоуровневый язык программирования, который позволял писать простые команды типа сложить, скопировать и прочее. Но программировать на Assembler’е тоже было несладко. Потому как приходилось буквально “за ручку” поэтапно описывать процессору каждое его действие.
Поэтому, если бы вы ужинали с процессором, и попросили передать его вам соль, это выглядело бы так:
Этот подход стал настоящим спасением как для разработчиков, так и для бизнеса. Захотел клиент новую инструкцию — не проблема, были бы деньги — мы сделаем. А деньги у клиентов были.
Недостатки CISC
Но был ли такой подход оптимальным. С точки зрения разработчиков — да. Но вот микроархитектура страдала.
Представьте, вы купили квартиру и теперь вам нужно обставить её мебелью. Площади мало, каждый квадратный метр на счету. И вот представьте, если бы CISC-процессор обставил мебелью вам гостиную, он бы с одной стороны позаботился о комфорте каждого потенциального гостя и выделил бы для него своё персональное место.
С другой стороны, он бы не щадил бюджет. Диван для одного человека, пуф для другого, кушетка для третьего, трон из Игры Престолов для вашей Дейенерис. В этом случае площадь комнаты бы очень быстро закончилась. Чтобы разместить всех вам бы пришлось увеличивать бюджет и расширять зал. Это не рационально. Но самое главное, CISC-архитектура существует очень давно и те инструкции, которые были написаны в 60-х годах сейчас уже вообще не актуальны. Поэтому часть мебели, а точнее исполнительных блоков, просто не будут использоваться. Но многие из них там остаются. Поэтому появился RISC…
Преимущества RISC
С одной стороны писать на Assembler’е под RISC процессоры не очень-то удобно. Если в лоб сравнивать код, написанный под CISC и RISC процессоры, очевидно преимущество первого.
Так выглядит код одной и той же операции для x86 и ARM.
Представьте, что вы проектируете процессор. Расположение блоков на х86 выглядело бы так.
Каждый цветной квадрат — это отдельные команды. Их много и они разные. Как вы поняли, здесь мы уже говорим про микроархитектуру, которая вытекает из набора команд. А вот ARM-процессор скорее выглядит так.
Ему не нужны блоки, созданные для функций, написанных 50 лет назад.
По сути, тут блоки только для самых востребованных команд. Зато таких блоков много. А это значит, что можно одновременно выполнять больше базовых команд. А раритетные не занимают место.
Еще один бонус сокращенного набора RISC: меньше места на чипе занимает блок по декодированию команд. Да, для этого тоже нужно место. Архитектура RISC проще и удобнее, загибайте пальцы:
Поэтому наши смартфоны, которые работают на ARM процессорах с архитектурой RISC, долго живут, не требуют активного охлаждения и такие быстрые.
Лицензирование
Но это все отличия технические. Есть отличия и организационные. Вы не задумывались почему для смартфонов так много производителей процессоров, а в мире ПК на x86 только AMD и Intel? Все просто — ARM это компания которая занимается лицензированием, а не производством.
Даже Apple приложила руку к развитию ARM. Вместе с Acorn Computers и VLSI Technology. Apple присоединился к альянсу из-за их грядущего устройства — Newton. Устройства, главной функцией которого было распознавание текста.
Даже вы можете начать производить свои процессоры, купив лицензию. А вот производить процессоры на x86 не может никто кроме синей и красной компании. А это значит что? Правильно, меньше конкуренции, медленнее развитие. Как же так произошло?
Ну окей. Допустим ARM прекрасно справляется со смартфонами и планшетами, но как насчет компьютеров и серверов, где вся поляна исторически поделена? И зачем Apple вообще ломанулась туда со своим Apple Silicon.
Что сейчас?
Допустим мы решили, что архитектура ARM более эффективная и универсальная. Что теперь? x86 похоронен?
На самом деле, в Intel и AMD не дураки сидят. И сейчас под капотом современные CISC-процессоры очень похожи на RISC. Постепенно разработчики CISC-процессоров все-таки пришли к этому и начали делать гибридные процессоры, но старый хвост так просто нельзя сбросить.
Но уже достаточно давно процессоры Intel и AMD разбивают входные инструкции на более мелкие микро инструкции (micro-ops), которые в дальнейшем — сейчас вы удивитесь — исполняются RISC ядром.
Да-да, ребята! Те самые 4-8 ядер в вашем ПК — это тоже RISC-ядра!
Надеюсь, тут вы окончательно запутались. Но суть в том, что разница между RISC и CISC-дизайнами уже сейчас минимальна.
А что остается важным — так это микроархитектура. То есть то, насколько эффективно все организовано на самом камне.
Ну вы уже наверное знаете, что Современные iPad практически не уступают 15-дюймовым MacBook Pro с процессорами Core i7 и Core i9.
А что с компьютерами?
Недавно компания Ampere представила свой 80-ядерный ARM процессор. По заявлению производителя в тестах процессор Ampere показывает результат на 4% лучше, чем самый быстрый процессор EPYC от AMD и потребляет на 14% меньше энергии.
Компания Ampere лезет в сегменты Cloud и Workstation, и показывает там отличные цифры. Самый быстрый суперкомпьютер в мире сегодня работает на ARM ISA. С обратной стороны, Intel пытается все таки влезть в сегмент low power и для этого выпускает новый интересный процессор на микроархитектуре lakefield.
И Apple та компания, которая способна мотивировать достаточное количество разработчиков пилить под свой ARM. Но суть этого перехода скорее не в противостоянии CISC и RISC. Поскольку оба подхода сближаются, акцент смещается на микроархитектуру, которую делает Apple для своих мобильных устройств. И судя по всему микроархитектура у них крута. И они хотели бы ее использовать в своих компьютерах.
И если бы Intel лицензировал x86 за деньги другим людям, то вероятно Apple просто адаптировали свою текущую микроархитектуру под x86. Но так как они не могут этого сделать, они решили просто перейти на ARM. Проблема для нас с микроархитектурой в том, что она коммерческая тайна. И мы про нее ничего не знаем.
Итоги
Спрос на ARM в итоге вырастет. Для индустрии это не просто важный шаг, а архиважный. Линус Торвальдс говорил, что пока рабочие станции не станут работать на ARM — на рынке серверов будут использовать x86.
И вот это случилось — в перспективе это миллионы долларов, вложенных в серверные решения. Что, конечно, хорошо и для потребителей. Нас ждет светлое будущее и Apple, действительно, совершила революцию!
Редактор материала: Антон Евстратенко. Этот материал помогли подготовить наши зрители Никита Куликов и Григорий Чирков. Спасибо ребята!
Разрядность Windows: x64 или x32 (x86). Как её узнать?
Не многие знают, что в Windows есть такое понятие как разрядность — x32 (x86), x64. В этой короткой заметке мы объясним что это такое на пальцах. Тут нет ничего сложного и знать это нужно, потому что это важный момент.
Разрядность операционной системы – грубо и очень приближённо, это количество мельчайших единиц информации (бит), которое процессор способен обработать за один такт (герц). В современном мире существует два варианта разрядности: 32-бит или 64-бит. 32-битные системы называют также x86: это неверное обозначение, зато распространённое. Других вариантов практически нет – разве что доисторические 16-разрядные программы эпохи MS-DOS и Win98.
Чем отличаются Window 32 и 64 на практике? Не скоростью работы – это точно. Грубоватый пример – на задней оси грузовиков бывают и 2 шины, и 4. Наличие 4х шин не делает фуру быстрее или мощнее – но в некоторых случаях многоколёсная конфигурация удобнее: скажем, при перевозке особо тяжёлого груза. Так и с 64-битной версией Windows: быстрее система не станет, но…
Сзади у грузовика 4 колеса, по 2 шины на каждую сторону. Это как в случае с 64-битной ОС: иногда лучше, но точно не быстрее и не медленнее.
Но старые 32-битные Windows способны работать не более чем с 4 гигабайтами ОЗУ, а это мало для современных программ. Даже если физической памяти в компьютер установлено 8 или 16 Гб, ОС способна работать лишь с 3,5-3,8 гигабайтами из них, а остальной объём висит мёртвым грузом. Существуют нестандартные способы заставить «Винду» видеть более 4 гигов, но работают они через раз, да и то, скорее, для косметического эффекта.
64-битная версия Windows уверенно работает с любым объёмом ОЗУ (до 32ГБ).
Различия коротко и понятно:
Есть и другие различия. Но это уже «железные дела» и нам с вами их знать совсем не обязательно, потому что «Меньше знаешь — крепче спишь»…
Разрядность у программ и драйверов
Разрядность может иметь не только система, но и программы, и драйвера. Большинство программ создавалось именно под 32-битные операционки. 32-разрядные приложения отлично работают и в 64-битной среде. Наоборот – не работает никак: истинно 64-битные проги не способны запуститься в 32-разрядой Windows.
Как узнать какая разрядность у вашей Windows?
Если у вас возник такой вопрос, то скорее всего у вас 32-разрядная система — она более популярна и всегда ставиться по умолчанию. 64-разрядную систему как правило устанавливают осознанно и намеренно.
Понять какая разрядность у вашей ОС очень просто.
Windows 8, 10
Нажмите правой кнопкой на Пуск и выберите пункт «Система«. В появившемся окне будет написана разрядность.
Windows 7
Найдите иконку «Мой компьютер» кликните по ней правой кнопкой и выберите «Свойства«.
Windows XP
Пуск > Мой компьютер > Свойства > вкладка «Общие» > Смотрим в раздел Система: если написано 64-битная версия, или 64-bit Edition, 64-бит. Если этого нет но есть что-то вроде Service Pack 3, то 32-разрядная.
Стоит ли переходить на 64-разрядную систему?
Уже, стоооит! Исключения — это пожалуй офисные компьютеры со старыми процами и 1-3 гагами памяти на борту, где не нужны никакие навороты.
Минус: x64 имеет, пожалуй, единственный минуc, из-за которого можно подумать о переходе — не все производители выпустили драйвера для 64-разрядных систем. Но, на сегодня, абсолютно все популярные программы умеют работать с x64, также как и все современные драйвера. Поэтому в 95% случаев это не будет проблемой.
Плюсов куча: более быстрые программы, улучшенная производительность для многоядерных процессоров, поддержка большого объема оперативной памяти.
Технологии развиваются и если пару лет назад никто толком не знал о 64-разрядных системах, то сегодня технологии стремятся полностью перейти на них и это лишь вопрос времени.
Partly. For some advanced features, x86 may require license from Intel; x86-64 may require an additional license from AMD. The 80486 processor has been on the market for more than 20 years [1] and so cannot be subject to patent claims. The pre-586 subset of the x86 architecture is therefore fully open.
Регистры
Общее назначение
x86 (англ. Intel 80×86 ) — архитектура процессора c одноимённым набором команд, впервые реализованная в процессорах компании Intel. Название образовано от двух цифр, которыми заканчивались названия процессоров Intel ранних моделей — 8086, 80186, 80286 (i286), 80386 (i386), 80486 (i486). За время своего существования набор команд постоянно расширялся, сохраняя совместимость с предыдущими поколениями. Помимо Intel архитектура также была реализована в процессорах других производителей: AMD, VIA, Transmeta, IDT и др.
Содержание
История
x86 — это CISC-архитектура. Доступ к памяти происходит по «словам». «Слова» размещаются по принципу little-endian, известному также как Intel-формат. Современные процессоры включают в себя декодеры команд x86 для преобразования их в упрощённый внутренний формат с последующим их выполнением.
Архитектура x86 в 1978 году с первым 16-разрядным процессором Intel, 8086, представила старые 8-разрядные процессоры 8080 и 8085 предназначенные для замены. Хотя 8086 не был изначально очень успешен, была поставлена IBM в 1981 году на первый компьютер. Из-за огромного успеха IBM PC и его многочисленных клонов, называемых IBM совместимыми персональными компьютерами, архитектура x86 была в течение нескольких лет одной из самых успешных архитектур процессоров в мире, и осталась таковой и в наши дни.
Процессоры
Процессоры Intel
16-разрядный процессор Intel 8086, был создан в июне 1978 года. Сначала работал на частотах 4,77 МГц, затем на 8 и 10 МГц. Изготавливался по технологии 3 мкм и имел 29 000 транзисторов. (см. Рис 2)
Чуть позже, в 1979 году, был разработан Intel 8088, который работал на тех же частотах, что и Intel 8086, но использовал 8-разрядную шину данных (внутренняя шина процессора осталась 16-разрядной) для обеспечения большей совместимости с имевшейся в то время в ходу периферией. Благодаря более низкой цене, широко использовался в ранних системах IBM PC вместо 8086. (см. Рис 3)
80386 (i386)
Первый 32-разрядный процессор, работал на частотах 16-40 МГц. Появился в 1985 году. Знаменовал собой революцию в мире процессоров x86. Основные принципы, заложенные в этом чипе, без кардинальных изменений дожили и до наших дней (за всё это время изменения касались, в основном, повышения производительности, расширения набора команд, увеличения разрядности). Первые 386 процессоры содержали серьёзную ошибку, приводящую к невозможности функционирования в защищенном режиме. Исправленная версия называлась 386DX.
Также выпускались более дешевые процессоры i386SX с урезанной до 16 бит внешней шиной данных и 24-битной шиной адреса. Для встроенного применения выпускался и выпускается процессор i386EX. Он имеет на кристалле последовательные порты, программируемые таймеры (совместимые с Intel 8254), контроллеры приоритетных прерываний (совместимые с Intel 8259A) и контроллеры прямого доступа к памяти (совместимые с Intel 8237A). i386 — первый процессор, который мог использовать кэш-память (расположенную на внешнем чипе).
80486 (i486)
Процессор i486 (1989 год) является усовершенствованным 386 процессором и первым скалярным процессором Intel (ряд операций выполнялись за один такт). Имел встроенный FPU (Floating Point Unit — блок вычислений с плавающей запятой) и впервые — встроенную кэш-память (8 Кбайт). 80486 — первый процессор Intel, для которого была применена технология умножения частоты шины FSB (в моделях DX2-50, DX2-66, DX4-75 и DX4-100). (см. Рис. 4) Для ноутбуков и встраиваемых систем в начале 1990-х была выпущена «облегченная» модификация i486SX без встроенного блока FPU. Существовала также модификация для встроенных применений — i486GX. Она представляла собой низковольтный 486SX с шиной данных, урезанной до 16-ти бит. Корпусировка i486GX — TQFP-176, частоты — от 16 МГц при Vcore = 2,0 В до 33 МГц при 2,7 В.
Pentium (i586)
Pentium (1993 год. Intel отказалась от номерных названий типа 8086, 80286 и др., потому что не могла запатентовать числа) — первый суперскалярный и суперконвейерный процессор Intel. Суперскалярность — означает, что процессор позволяет выполнять более одной операции за один такт. Суперконвейерность означает, что процессор имеет несколько вычислительных конвейеров. У Pentium их два, что позволяет ему при одинаковых частотах в идеале быть вдвое производительней 486, выполняя сразу 2 инструкции за такт. Кроме того, особенностью процессора Pentium являлся полностью переработанный и очень мощный на то время блок FPU, производительность которого оставалась недостижимой для конкурентов вплоть до конца 1990-х годов.
Pentium II (i686)
Pentium II (май 1997 года) — модификация ядра Pentium Pro с целью сделать его более доступным. Интегрированный кэш и тег кэша были вынесены на отдельные микросхемы с пониженной в два раза частотой. Это упростило и удешевило процессор, хотя и сделало его более медленным, чем Pentium Pro. Первые процессоры Pentium II выпускались с кэш-памятью второго уровня емкостью 256 Кбайт, затем её объём был увеличен до 512 Кбайт. Новая конструкция процессора потребовала размещения элементов на печатной плате, что, в свою очередь, привело к изменению конструктива процессора. Данные ЦПУ выпускались в виде картриджей SECC, устанавливающихся в специальный разъём на плате (Slot 1). Кроме того, в ядро Pentium II был добавлен блок MMX.
Celeron
Celeron — упрощённая модификация процессоров Pentium II / III / IV / Core / Core 2 для построения недорогих компьютеров. Первый Celeron (ядро Covington, частоты 266/300 МГц) представлял собой Pentium II, лишенный кеша второго уровня и пластикового картриджа. Печатная плата также была упрощена. Такая упаковка получила название SEPP (Single Edge Processor Package). В результате эти процессоры демонстрировали удручающе низкую производительность, хотя стоили очень недорого и легко прибавляли до 50 % частоты при разгоне. Все последующие варианты этого процессора имели интегрированный полночастотный кеш второго уровня. Основные отличия процессоров Celeron в объёме этого кэша и частоте шины, а также часто в увеличенной латентности доступа к кэш-памяти по отношению к оригинальному процессору (см. Рис 5).
Вторая модификация Celeron (ядро Mendocino, частоты 300…533 МГц) на многих задачах демонстрировала более высокую производительность, чем равночастотный Pentium II. Это объяснялось тем, что маленький (128 Кбайт) кеш Mendocino располагался на одном кристалле с ядром и работал на частоте ядра, в то время как большой (512 Кбайт) кеш Pentium II находился достаточно далеко от ядра и работал на половинной частоте. Больше таких промашек фирма Intel не допускала, и все последующие Celeron гарантированно медленнее полноценных процессоров того же поколения.
Pentium III (i686)
Pentium III, изготовленный изначально по технологическому процессу 0,18 мкм, отличается от P2 главным образом добавлением инструкций SSE. Поздние процессоры этой серии изготавливались по технологическому процессу 0,13 мкм, получили интегрированную в кристалл ядра полночастотную кэш-память (сначала 256 Кбайт, затем — 512 Кбайт) и послужили прообразом процессоров архитектуры Pentium M. Выпускались в конструктивах как SECC/SECC2 (Slot 1), так и FCPGA-370 (PGA-370).
Pentium 4
Pentium 4 — принципиально новый процессор с гиперконвейеризацией (hyperpipelining) — с конвейером, состоящим из 20 ступеней. Согласно заявлениям Intel, процессоры, основанные на данной технологии, позволяют добиться увеличения частоты примерно на 40 % относительно семейства P6 при одинаковом технологическом процессе (при «правильной» загрузке процессора). На практике же, первое поколение процессоров работало даже медленнее, чем Pentium III. Позже были дополнены поддержкой Hyper-threading и 64-битного кода (см. Рис. 6).
Core / Core 2
После провала последнего поколения процессоров Pentium 4 на ядре Tejas, было решено обратиться к другой ветви продукции. В основе новых процессоров лежит переработанное ядро Pentium M. Таким образом, ядро P6, использованное ещё в процессорах Pentium Pro, продолжило свою эволюцию, нарастив частоту со 150 МГц до 3,2 ГГц и обзаведясь новой системной шиной, поддержкой многоядерности, мультимедийных инструкций (см. Рис. 7). Процессоры Core — решение для ноутбуков, одно- и двухъядерное, исполняющее 32-битный код. Процессоры Core 2 — выпускаются как в настольном, так и мобильном исполнении, включают ряд микроархитектурных улучшений и способны исполнять 64-битный код. Количество ядер варьируется от одного до четырёх.
Core i7/Core i5/Core i3
Дальнейшее развитие идей, заложенных в процессорах Core 2. Сохранив основную конструкцию процессорных ядер, появившийся первым Core i7 получил модульную структуру, позволяющую легко варьировать их количество, встроенный контроллер памяти (трёхканальной DDR3 в высшем сегменте и двухканальной DDR3 в массовом) и новую шину, соединяющую процессор с чипсетом. Микроархитектурные улучшения позволяют Core i7 показывать повышенную производительность в сравнении с Core 2 на равных частотах. Большое внимание было уделено вопросу энергоэффективности нового процессора. Позже появились более дешевые Core i5/i7 с двухканальным контроллером памяти и четырьмя ядрами, затем — Core i3/i5 с двумя ядрами и встроенным видеоядром. В секторе наиболее производительных решений выпускаются также процессоры Core i7 с трехканальным контроллером памяти и шестью ядрами. Благодаря использованию технологии Hyper-threading эти процессоры способны одновременно исполнять до 12 потоков команд. Также в ассортименте компании Intel есть особо производительные процессоры для домашних ПК: Core i7 с трехканальным контроллером памяти и восемью ядрами. Количество потоков возросло до 16.
Семейство процессоров, ориентированных на серверы и многопоточные вычисления. Первый представитель этого семейства базировался на архитектуре Pentium II, представлял собой картдридж с печатной платой, на которой монтировались ядро, кэш-память второго уровня и тег кэша. Монтировался в гнездо Slot 2. Современные Xeon базируются на архитектуре Core 2/Core i7.
Процессоры AMD
Am8086 / Am8088 / Am186 / Am286 / Am386 / Am486
Клоны соответствующих процессоров от Intel. Обычно выпускались с максимальной частотой на ступеньку выше, чем у оригинала. Так, Am386DX выпускался с максимальной частотой 40 МГц, тогда как i386DX — 33 МГц. Вплоть до 486DX2-66 других различий между процессорами не было. Программно отличить эти процессоры было невозможно. 5×86 Клон i486. В то время, как Intel для i486 остановился на частоте 100 МГц, AMD выпускала процессоры с частотами до 133 МГц. Также они отличались увеличенным объёмом кэша первого уровня (16 Кбайт) и множителем (×4). (см. Рис. 8)
Принципиально новый процессор AMD (апрель 1997 года), основанный на ядре, приобретённом у NexGen. Данный процессор имел конструктив пятого поколения, однако относился к шестому поколению и позиционировался как конкурент Pentium II. Включал в себя блок MMX и несколько переработанный блок FPU. Однако данные блоки всё равно работали на 15-20 % медленнее, чем у аналогичных по частоте процессоров Intel. Процессор имел 64 Кбайт кэша первого уровня. В целом, сравнимая с Pentium II производительность, совместимость со старыми материнскими платами и более ранний старт (AMD представила К6 на месяц раньше, чем Intel представила P-II) и более низкая цена сделали его достаточно популярным, однако проблемы с производством у AMD значительно испортили репутацию данного процессора.
Athlon
Очень успешный процессор, благодаря которому фирма AMD сумела восстановить почти утраченные позиции на рынке микропроцессоров. Кэш первого уровня — 128 Кбайт. Первоначально процессор выпускался в картридже с размещением кэша второго уровня (512 Кбайт) на плате и устанавливался в разъём Slot A (который механически, но не электрически совместим со Slot 1 от Intel). Затем перешёл на разъём Socket A и имел 256 Кбайт кэша второго уровня в ядре. По быстродействию — примерный аналог Pentium III. Duron Урезанная версия Athlon, отличается от родителя объёмом кэша второго уровня (всего 64 Кбайт, зато интегрированным в кристалл и работавшем на частоте ядра). Конкурент Celeron поколений Pentium III / Pentium 4. Производительность заметно выше, чем у аналогичных Celeron, и при выполнении многих задач соответствует Pentium III.
Athlon 64
Первый несерверный процессор, поддерживающий архитектуру x86-64.
Athlon 64 X2
Продолжение архитектуры Athlon 64, имеет 2 вычислительных ядра. (см. Рис. 9)
Phenom
Дальнейшее развитие архитектуры Athlon 64, выпускается в вариантах с двумя (Athlon 64 X2 Kuma), тремя (Phenom X3 Toliman) и четырьмя (Phenom X4 Agena) ядрами.
Phenom II
Модификация Phenom. Небольшие архитектурные изменения, переход на более тонкий технологический процесс и добавление кэша L3 объёмом от 4 до 6 Мбайт позволили нарастить производительность этих процессоров на 10-20 % по сравнению с предшественниками. Выпускаются в конструктивах Socket AM2+ и Socket AM3. При этом первые могут работать только с памятью DDR2, а вторые — как с DDR2, так и с DDR3. Максимальное число ядер выросло до шести.
Athlon II
Phenom II без кеша L3 и количеством ядер не более четырёх.
Компанией ЗАО МЦСТ выпущена серия микропроцессоров «Эльбрус», позволяющих работать в режиме двоичной совместимости с архитектурой x86. Совместимость обеспечивается за счёт программной динамической трансляции x86-кодов с использованием аппаратной поддержки, заложенной в архитектуру микропроцессора «Эльбрус». (см. Рис. 10)
Сведения общего характера
Понятие архитектуры
Архитектура как совместимость с кодом
Наверняка вы часто встречались с термином «x86», или «Intel-совместимый процессор» (или «IBM PC compatible» — но это уже по отношению к компьютеру). Иногда также встречается термин «Pentium-совместимый» (почему именно Pentium — вы поймете сами чуть позже). Что за всеми этими названиями скрывается на самом деле? На данный момент наиболее корректно с точки зрения автора выглядит следующая простая формулировка: современный x86-процессор — это процессор, способный корректно исполнять машинный код архитектуры IA32 (архитектура 32-битных процессоров Intel). В первом приближении это код, исполняемый процессором i80386 (известным в народе как «386-й»), окончательно же основной набор команд IA32 сформировался с выходом процессора Intel Pentium Pro. Что означает «основной набор» и какие есть еще? Для начала ответим на первую часть вопроса. «Основной» в данном случае означает то, что с помощью исключительно этого набора команд, может быть написана любая программа, которая вообще может быть написана для процессора архитектуры x86 (или IA32, если вам так больше нравится).
Кроме того, у архитектуры IA32 существуют «официальные» расширения (дополнительные наборы команд) от разработчика самой архитектуры, компании Intel: MMX, SSE, SSE2 и SSE3. Также существуют «неофициальные» (не от Intel) расширенные наборы команд: EMMX, 3DNow! и Extended 3DNow! — их разработала компания AMD. Впрочем, «официальность» и «неофициальность» в данном случае понятие относительное — де-факто все сводится к тому, что некоторые расширения набора команд Intel как разработчик изначального набора признает, а некоторые — нет, разработчики же программного обеспечения используют то, что им лучше всего подходит. В отношении расширенных наборов команд существует одно простое правило хорошего тона: прежде чем их использовать, программа должна проверить, поддерживает ли их процессор. Иногда отступления от этого правила встречаются (и могут приводить к неправильному функционированию программ), но объективно это является проблемой некорректно написанного программного обеспечения, а не процессора.
Для чего предназначены дополнительные наборы команд? В первую очередь — для увеличения быстродействия при выполнении некоторых операций. Одна команда из дополнительного набора, как правило, выполняет действие, для которого понадобилась бы небольшая программа, состоящая из команд основного набора. Опять-таки, как правило, одна команда выполняется процессором быстрее, чем заменяющая ее последовательность. Однако в 99% случаев, ничего такого, чего нельзя было бы сделать с помощью основных команд, с помощью команд из дополнительного набора сделать нельзя.
Таким образом, упомянутая выше проверка программой поддержки дополнительных наборов команд процессором, должна выполнять очень простую функцию: если, например, процессор поддерживает SSE — значит, считать будем быстро и с помощью команд из набора SSE. Если нет — будем считать медленнее, с помощью команд из основного набора. Корректно написанная программа обязана действовать именно так. Впрочем, сейчас практически никто не проверяет у процессора наличие поддержки MMX, так как все CPU, вышедшие за последние 5 лет, этот набор поддерживают гарантированно. Для справки приведем табличку, на которой обобщена информация о поддержке различных расширенных наборов команд различными десктопными (предназначенными для настольных ПК) процессорами.
Различия между ядрами одной микроархитектуры
«Процессорное ядро» (как правило, для краткости его называют просто «ядро») — это конкретное воплощение [микро]архитектуры (т.е. «архитектуры в аппаратном смысле этого слова»), являющееся стандартом для целой серии процессоров. Например, NetBurst — это микроархитектура, которая лежит в основе многих сегодняшних процессоров Intel: Celeron, Pentium 4, Xeon. Микроархитектура задает общие принципы: длинный конвейер, использование определенной разновидности кэша кода первого уровня (Trace cache), прочие «глобальные» особенности. Ядро — более конкретное воплощение. Например, процессоры микроархитектуры NetBurst с шиной 400 МГц, кэшем второго уровня 256 килобайт, и без поддержки Hyper-Threading — это более-менее полное описание ядра Willamette. А вот ядро Northwood имеет кэш второго уровня уже 512 килобайт, хотя также основано на NetBurst. Ядро AMD Thunderbird основано на микроархитектуре K7, но не поддерживает набор команд SSE, а вот ядро Palomino — уже поддерживает. Таким образом, можно сказать что «ядро» – это конкретное воплощение определенной микроархитектуры «в кремнии», обладающее (в отличие от самой микроархитектуры) определенным набором строго обусловленных характеристик. Микроархитектура — аморфна, она описывает общие принципы построения процессора. Ядро — конкретно, это микроархитектура, «обросшая» всевозможными параметрами и характеристиками. Чрезвычайно редки случаи, когда процессоры сменяли микроархитектуру, сохраняя название. И, наоборот, практически любое наименование процессора хотя бы несколько раз за время своего существования «меняло» ядро. Например, общее название серии процессоров AMD — «Athlon XP» — это одна микроархитектура (K7), но целых четыре ядра (Palomino, Thoroughbred, Barton, Thorton). Разные ядра, построенные на одной микроархитектуре, могут иметь, в том числе разное быстродействие.
Частота работы ядра
Как правило, именно этот параметр в просторечии именуют «частотой процессора». Хотя в общем случае определение «частота работы ядра» всё же более корректно, так как совершенно не обязательно все составляющие CPU функционируют на той же частоте, что и ядро (наиболее частым примером обратного являлись старые «слотовые» x86 CPU — Intel Pentium II и Pentium III для Slot 1, AMD Athlon для Slot A — у них L2-кэш функционировал на 1/2, и даже иногда на 1/3 частоты работы ядра). Ещё одним распространённым заблуждением является уверенность в том, что частота работы ядра однозначным образом определяет производительность. На самом деле это дважды не так: во-первых, каждое конкретное процессорное ядро (в зависимости от того, как оно спроектировано, сколько содержит исполняющих блоков различных типов, и т.д. и т.п.) может исполнять различное количество команд за один такт, частота же — это всего лишь количество таких тактов в секунду. Таким образом (приведенное далее сравнение, разумеется, очень сильно упрощено и поэтому весьма условно) процессор, ядро которого исполняет 3 инструкции за такт, может иметь на треть меньшую частоту, чем процессор, исполняющий 2 инструкции за такт — и при этом обладать полностью аналогичным быстродействием.
Во-вторых, даже в рамках одного и того же ядра, увеличение частоты вовсе не всегда приводит к пропорциональному увеличению быстродействия.. Дело в том, что скорость исполнения команд ядром процессора — это вовсе не единственный показатель, влияющий на скорость выполнения программы. Не менее важна скорость поступления команд и данных на CPU. Представим себе чисто теоретически такую систему: быстродействие процессора — 10’000 команд в секунду, скорость работы памяти — 1000 байт в секунду. Таким образом, следует понимать: невозможно непрерывно наращивать одну только частоту ядра, не ускоряя одновременно подсистему памяти, так как в этом случае начиная с определённого этапа, увеличение частоты CPU перестанет сказываться на увеличении быстродействия системы в целом.
Кодирование инструкций
Префиксы (каждый из них опционален):
Встроенные в инструкцию данные (опциональны):
В списке выше и далее для технических имён принято наименование «только латиница, арабские цифры» и знак минуса «-» со знаком подчёкивания «_», а регистр — CamelCase (любое слово начинается с прописной, а далее только строчные даже если аббревиатура: «UTF-8» → «Utf8» — все слова вместе). Префиксы AddressSize, Segment, BranchHint, Lock, OperandsSize и Repeat могут перемешаны между собой. Остальные элементы должны идти именно в указанном порядке. И видно что байтовые значения некоторых префиксов совпадают. Их назначение и наличие определяет уже сама инструкция. Префиксы переопределения сегмента могут применяться с большинством инструкций, а префиксы BranchHint применяются только с инструкциями условного перехода. Аналогичная ситуация с префиксами Mandatory и Repeat — где-то они уточняют инструкцию, а где-то указывают на повторение. Префикс OperandSize вместе в префиксами Mandatory ещё относят к префиксам SIMD-инструкции. Отдельно следует сказать про префикс Vex. Он заменяет префиксы Rex, Mandatory, Escape и OperandsSize, компактизируя их в себе. С ним не допустимо использование префикса Lock. Сам же префикс Lock может добавляться когда приёмником является операнд в памяти.
Обзорный список всех интересующих режимов с точки зрения кодирования инструкций:
В скобках английские названия режимов соответствуют официальным. Ещё есть синтетические режимы на вроде нереального (Unreal x86 Mode), но они все вытекают из этих трёх (по сути это гибриды, которые отличаются лишь размером адреса, операндов и прочим). В каждом из них используется «родной» режим адресации, но его можно сменить на альтернативный префиксом OperandsSize. В 16-битном режиме включится 32-битный режим адресации, в 32-битном режиме — 16-битный, а в 64-битном — 32-битный. Но если это делать, то адрес расширяется с дополнением нулями (если он меньше) или же его старшие биты сбрасываются (если он больше).
Дизайн
Архитектура x86 использует CISC набор команд с переменной длиной инструкции. Доступ к памяти по размеру слова также могут не выровнено по границе слова адреса памяти. Слова в Little Endian хранящегося направлении. Easy портативность Intel 8085 на ассемблере код был движущей силой развития архитектуры. Это вызвало некоторые неоптимальные и проблематичные в ретроспективе проектных решений.
64 бита
Примерно в 2002 году, расширение памяти современных x86 машин достиг вызвано 32-битного адресного ограничения размера адресации в инструкции x86 архитектуру набора 4 Гб. Хотя Intel имел Pentium Pro представила способ решения более 4 Гб оперативной памяти, но ее использование программно трудоемким и процесс в доступной памяти остался так до сих пор ограничен до 4 Гб.
Для 64-разрядных процессоров, которые основаны на архитектуре x86, термин x86-64 или вскоре x64 используется.
Виртуализация
Режимы работы
Реальный режим
В реальном режиме при вычислении линейного адреса, по которому процессор собирается читать содержимое памяти или писать в неё, сегментная часть адреса умножается на 16 (или, то же самое, что и сдвиг влево на 4 бита) и суммируется со смещением (если процессору передаётся не полный адрес из двух 16-битных значений — сегмента и смещения, — а только 16-битное смещение, то сегмент берётся из одного из сегментных регистров). Таким образом, адреса 0400h:0001h и 0000h:4001h ссылаются на один и тот же физический адрес, так как 400h×16+1 = 0×16+4001h.
Такой способ вычисления физического адреса позволяет адресовать 1 Мб + 64 Кб − 16 байт памяти (диапазон адресов 0000h…10FFEFh). Однако в процессорах 8086/8088 всего 20 адресных линий, поэтому реально доступен только 1 мегабайт (диапазон адресов 0000h…FFFFFh), а при адресации выше (в диапазоне 100000h…10FFEFh) происходит «заворот» — старший единичный бит адреса игнорируется и происходит обращение к 64 килобайтам в начальных адресах (0000h…FFEFh).
Процессор 80286 имеет 24-битную адресную шину (возможна адресация 224 = 16 Мб памяти), поэтому в них переполнения не происходит. Компьютеры IBM PC/AT построены на процессоре Intel 80286, но, из соображений совместимости с IBM PC и IBM PC/XT, построенных на Intel 808x, в них был введён логический элемент (вентиль), управляющий работой 21-го адресного провода (A20). Этот логический элемент, получивший название «Gate A20», по умолчанию отключен, что соответствует режиму совместимости, но управляется через контроллер клавиатуры (микросхема Intel 8042).
Линейная адресация памяти
Линейная адресация памяти — схема адресации памяти компьютера в защищённом режиме (начиная с Intel 80386 и других совместимых x86-процессорах). Используется большинством современных многозадачных ОС. (см. Рис. 11)
Благодаря механизму линейной адресации можно создавать любое (ограниченное только размерами оперативной памяти) количество независимых виртуальных адресных пространств. Причём каждая страница линейного адресного пространства может находиться по любому физическому адресу или даже быть выгруженной на диск.
При использовании линейной адресации 32-битный логический адрес делится на три части:
Защищенный режим
Суть защищённого режима в следующем: программист и разрабатываемые им программы используют логическое адресное пространство, размер которого может составлять 1 гигабайт. Логический адрес преобразуется в физический адрес автоматически с помощью схемы управления памятью (MMU). При этом содержимое сегментного регистра не связано напрямую с физическим адресом, а является номером сегмента в соответствующей таблице. Благодаря защищённому режиму, в памяти может храниться только та часть программы, которая необходима в данный момент, а остальная часть может храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объёма имеющейся памяти, и пользователю кажется, что он работает с большей памятью, чем на самом деле.
Физический адрес формируется следующим образом. В сегментных регистрах хранится селектор, содержащий индекс дескриптора в таблице дескрипторов (13 бит), 1 бит, определяющий к какой таблице дескрипторов будет производиться обращение (к локальной или к глобальной) и 2 бита запрашиваемого уровня привилегий. Далее происходит обращение к соответствующей таблице дескрипторов и соответствующему дескриптору, который содержит начальный 24-битный адрес сегмента, размер сегмента и права доступа, после чего вычисляется необходимый физический адрес путём сложения адреса сегмента со смещением из 16-разрядного регистра.