О разрядности процессоров



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

Термин «разрядность» часто используют при описании вычислительных устройств и систем, понимая под этим число бит, одновременно хранимых, обрабатываемых или передаваемых в другое устройство. Но именно применительно к центральным процессорам (ЦП), как к наиболее сложным представителям вычислительного железа, не делимым на отдельные детали (до тех пор, пока кто-то не придумал, как продать отдельно кэш или умножитель внутри чипа), понятие разрядности оказывается весьма расплывчатым. Продемонстрировать это поможет умозрительный пример.

Представьте себе, что вокруг благодатные 80-е, в мире (всё ещё) десятки производителей ЦП, и вы работаете в одном из них над очередным поколением. Никаких 256-битных SSE8, встроенных GPU и 5-канальных контроллёров памяти на свете пока нет, но у вас уже есть готовый 16-битный процессор (точнее, «16-битный» пишется в технической документации), в котором 16 бит везде и во всём — от всех внешних шин до архитектурного размера обрабатываемых данных. Реальным примером такого ЦП могут быть первые однокорпусные (правда, не однокристальные) ЦП для архитектуры DEC PDP-11. И вот приходит задание руководства — разработать новое, обратно совместимое поколение этого же ЦП, которое будет 32-битным — не уточняя, что понимается под последним. Именно это понимание и предстоит прояснить в первую очередь. Итак, наш главный вопрос: что именно надо удвоить по разрядности в нашем пока насквозь 16-битном ЦП, чтобы получившийся процессор мог называться 32-битным? Чтобы решать задачу было легче, применим два подхода: систематизируем определения и посмотрим на примеры.Систематизируем

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

Рискну предположить, что все производители любого программируемого «железа», особенно процессоров, на 90% стараются не для конечных пользователей, а для программистов. Следовательно, с точки зрения производителей процессор должен выполнять нужные команды нужным образом. С другой стороны, детали структуры кристалла (топологические, электрические и физические параметры отдельных транзисторов, вентилей, логических элементов и блоков) могут быть скрыты не только от пользователя, но и от программиста. Выходит, что разрядность надо отличать и по реализации — физическую и архитектурную.

Следует добавить, что программисты тоже бывают разные: большинство пишут прикладные программы на языках высокого уровня с помощью компиляторов (что делает код до некоторой степени платформонезависимым), некоторые пишут драйверы и компоненты ОС (что заставляет более внимательно относиться к учёту реальных возможностей аппаратной части), есть творцы на ассемблере (явно требующем знания целевого процессора), а кто-то пишет сами компиляторы и ассемблеры (аналогично). Поэтому под программистами далее будем понимать именно тех, для кого детали аппаратной реализации важны если не для написания программы вообще, то хотя бы для её оптимизации по скорости — «архитектурная» разрядность чего-либо будет относиться именно к программированию на родном машинном языке процессора или более удобном ассемблере, не залезая при этом в нутро ЦП (это уже вопросы микроархитектуры, которую мы для большего различия и назвали физической реализацией). Описанные нюансы всё равно влияют на всех программистов, т.к. языки высокого уровня почти всегда переводятся компиляторами в машинный код, а компиляторы тоже должен кто-то написать. Исключения в виде интерпретируемых языков тоже не стоят в стороне — сами интерпретаторы тоже создаются с помощью компиляторов.

Осталось рассмотреть, разрядность какой именно информации нам интересна. Что вообще потребляет и генерирует ЦП в информационном смысле? Команды, данные, адреса и сигнально-управляющие коды. О последних речь не идёт — их разрядность жёстко зафиксирована в конкретной аппаратной реализации и в большинстве случаев программно не управляема. Чуть трудней с командами — в семействе архитектур RISC, например, разрядность любого обращения к памяти должна быть равна физической разрядности шины данных процессора, в т.ч. и при считывании кода (кроме некоторых послаблений в современных ARM и PowerPC). Это хорошо для ЦП — нет проблем с невыровненным доступом, все команды имеют одинаковую, либо переменную, но просто вычисляемую длину. Зато плохо для программиста — RISC это усечённый набор команд, которые ещё и занимают больше места, чем при более компактном кодировании (для того же алгоритма нужно больше команд, но и для того же числа команд надо больше байтов). Поэтому именно CISC-парадигма завоевала наибольший подход с её разнообразием и переменной длинной команд, не равной разрядности чего-либо. Разумеется, все современные ЦП внутри — настоящие RISC, но это только физически, а не архитектурно. Остались только два вида информации — данные и адреса. Их и рассмотрим.Собираем

У нас имеется три критерия видов разрядности: функциональный (обработки, хранения и обмена), реализационный (физическая и архитектурная) и типовой (данных и адресов). Итого уже 12 видов этой непонятной штуки. Предположим, что на каждую комбинацию критериев для нашего исходного ЦП мы отвечаем «16-битная» (и физическая разрядность обработки данных, и архитектурная хранения адресов, и все остальные). Теперь посмотрим, какие из этих вопросов обязательно должны давать ответ «32-битная», чтобы получившийся процессор оказался именно таким.

Начнём с архитектурной части. Должен ли ЦП хранить данные и адреса в логическом 32-битном формате, чтобы называться 32-битным? Насчёт данных, очевидно, да, а вот по поводу адресов всё не так просто. Почти все 8-битные (по данным) ЦП имеют возможность хранить 16-битные адреса в парах регистров (иначе им не видать распространённой на этих платформах 16-битной адресации), но от этого их не называют 16-битными. Может быть, если ЦП сможет хранить 32-битные данные, но всего-то 16-битные адреса, его уже можно называть 32-битным?..

На аналогичные вопросы об архитектурных вычислениях над 32-битными данными и адресами, а также программно 32-битном обмене данных с программно 32-битной адресацией ответ может быть таким же — с данными надо, а с адресами не факт.


Intel 486DX2. Где-то здесь притаилась разрядность…

Перейдём на физическую реализацию. Должен ли ЦП хранить данные и адреса в физически 32-битном формате? Оказывается, не обязательно, т.к. для 32-битных операндов можно спарить регистры, чем успешно пользовались ещё 8-битные ЦП, начиная с i8080. А зилоговские 16-битные Z8000 могли даже счетверять регистры, получая 64-битный аргумент (только для данных). Это не так эффективно, т.к. полный объём данных, умещающийся в регистровом файле, не увеличится, но это и не требовалось. Зато всегда есть возможность обратиться и к старшей, и к младшей половине виртуального 32-битного регистра — камень в огороды архитектур IA-32 и MC68k, где можно обращаться только к младшей половине (в IA-32 — ещё и с префиксом, что замедляет выполнение).

Идём далее. Должен ли ЦП обрабатывать данные и адреса 32-битными физическими порциями? Оказывается, и это не требуется, операнды можно обрабатывать половинками в функциональных устройствах 16-битного размера. Стоит вспомнить процессор Motorola MC68000, применявшийся в первых Макинтошах, Амигах, Атари и других популярных машинах — он считался 32-битным, в нём есть 32-битные регистры, но нет ни одного 32-битного ФУ (оно появилось только в 68020). Зато есть целых три 16-битных АЛУ, два из которых умеют спариваться при выполнении 32-битной операции. У i8080 и Z80 8-битные АЛУ выполняли 16-битные операции для вычисления адреса последовательно над его байтами. Позже эта история повторилась с набором SSE и его 128-битными операндами, которые поначалу обрабатывались на 64-битных ФУ.

Наконец, обмен: нужно ли процессору физически принимать и передавать данные 32-битными порциями с 32-битной адресацией? На первый вопрос дали ответ почти все производители ЦП, выпустив чипы с половинной шириной шины: 8 бит для 16-битного i8088, 16 бит для 32-битных MC68000/010 и i80386SX/EX/CX, и даже 8 бит для 32-битного MC68008. С физической разрядностью шины адреса куда веселее. Начнём с того, что для многобайтовых шин данных (т.е. начиная с 16-битной) физическая адресация памяти может происходить по словам или по байтам. В первом случае на шину адреса всегда подаётся адрес слова, а шина данных считывает или записывает нужную его часть — от отдельного байта до слова целиком. Для обозначения разрядности доступа может применяться отдельная шина байт-маски (в архитектуре x86 такой приём начал применяться со времён i386 — по биту на каждый байт шины данных), либо комбинация управляющих сигналов с младшими битами шины адреса, которые в этом режиме не нужны (для 32-биной шины данных адрес слова нацело делится на 4, а потому младшие 2 бита шины адреса всегда равны нулю) — так было до выхода i386. Случай же адресации байтов возможен лишь при динамической подстройке ширины шины и из широко известных ЦП применялся только в MC68020/030. В результате к сегодняшнему дню используется именно адресация слов вместе с байт-маской, поэтому физическая разрядность шины адреса оказывается меньше её логической ширины на число бит, на единицу меньшее разрядности шины данных в байтах. Из чего следует, что 32-битная физическая шина адреса может быть только при 8-битной шине данных, на что ни один архитектор и инженер в здравом уме не пойдёт по очевидным соображениям.

Но это ещё не всё. Зачем нам вообще 32-битная физическая или логическая адресация? Середина-конец 80-х, на рынке только-только появились мегабитные микросхемы памяти, типичный объём памяти для ПК пока что измеряется сотнями килобайт, но чуть позже — мегабайтами. А 32-битная адресация позволит получить доступ к 4 ГБ физического ОЗУ! Да кому вообще такое может понадобиться в ближайшие лет 20 в персоналках?! Неудивительно, что первые популярные «32-битные» ЦП имели совсем не 32 бита логической ширины шины адреса: MC68000 имел 24 (23 физических + 1 для управления разрядами), а MC68008 — и вовсе 20. Intel 386SX (вышедший на 3 года позже оригинального полностью 32-битного i80386), помимо уполовинивания шины данных, сократил и шину адреса до 24 (23 физических) бит, а его встраиваемые версии 386EX/CX имели 26-битную шину. Более того, первые чипсеты, позволявшие оперировать 32-битными адресами, появились лишь в 90-х, а первые материнские платы, имевшие достаточное число слотов памяти, чтобы набрать >4 ГБ модулями максимального на тот момент размера — лишь в 2000-х. Хотя первые ЦП с 64-битной физической шиной адреса (IBM/Motorola PowerPC 620) появились аж в 1994 г.. Выводим

Итак, физически в процессоре вообще ничего не требуется делать 32-битным. Достаточно лишь архитектурно убедить программиста, что ЦП выполняет 32-битные операции одной командой. И хотя она при отсутствии полноценных внутренних ресурсов неизбежно будет декодироваться в цепочки микрокода для управления 16-битными физическими порциями информации и аппаратными блоками — это уже программиста не волнует. Так что же, достаточно переписать прошивку, переделать декодер и схему управления, и вот наш 16-битный процессор сразу стал 32-битным?

Как известно, любую хорошую идею можно довести до абсурда, и тогда она сама себя дискредитирует. Увеличение разрядности ЦП — не исключение. На этом месте архитектурщик сразу должен задаться вопросом — а зачем всё это? Увеличивать разрядность данных хорошо для ускорения работы с ними (часто требуется обрабатывать значения, не умещающиеся в 16 бит), а адресов — для получения возможности оперировать большими объёмами данных (ограничение в 64 КБ для 16-битной адресации, кое-как ослабленное сегментной моделью IA-16, сковывало программистов уже в середине 80-х). Можно, конечно, сделать страничную адресацию с программно переключаемыми банками (могли же 8-битные ЦП адресовать 1 МБ на популярных дешёвых ПК и игровых приставках), но ценой усложнения программ и замедления доступа к памяти. Аналогично — разве имеет смысл делать 32-битность для данных такой, что она почти не ускоряет производительность по сравнению с обработкой 32-битных чисел на 16-битной платформе под управлением программы, а не микрокода? Таким образом мы только упростим программирование, сэкономив на числе команд, но не получим скачок в скорости. Из чего мы приходим к выводу — увеличение разрядности должно реализовываться так, чтобы оно реально привело к качественному (больше памяти) и количественному (быстрее операции) скачку возможностей архитектуры. «Больше памяти» здесь относится именно к качественному развитию, т.к. многие алгоритмы и приложения вообще откажутся работать при недостатке ОЗУ, в то время как даже медленный процессор всё равно рано или поздно программу выполнит. Виртуальная память с дисковой подкачкой бессмысленна при менее чем 32-битной реализации.

Но означает ли всё это, что в ЦП как можно больше ресурсов, и аппаратных, и архитектурных, должны быть 32-битными, чтобы его можно было бы назвать полноценным 32-битным процессором? Совсем нет. Возьмём тот же MC68000 — у него 32-битная архитектура для данных и адресов и 32-битные регистры, но 16-битные АЛУ и внешняя шина данных и 24-битная физическая внешняя адресация. Тем не менее, недостаточная «32-битность» не мешает ему обгонять появившийся на 3 года позже «16-битный» 80286: на популярном в 1980-е бенчмарке Dhrystones MC68000 на 8 МГц набирает 2100 «попугаев», а 286 на 10 МГц — 1900 (также 16-битный i8088 на 4,77 МГц — 300).

Но всё это нам не поможет ответить на вопрос — что же такое разрядность процессора? В момент, когда мы уже было пришли к некоему заключению, на сцене появляется новый герой — тип данных. Всё вышеизложенное имело отношение лишь к целочисленным вычислениям и их аргументам. Но ведь есть ещё и вещественные. Кроме того, пока что мы оперируем скалярными величинами, но есть ещё и векторные. А ведь, по слухам, Intel намерена встроить вещественный сопроцессор прямо внутрь своего нового 80486 (напомню: на дворе у нас, условно — 80-е годы). С учётом того, что внутреннее физическое и архитектурное представление данных (с адресами FPU не работает) 80-битное — как же тогда называть «четвёрку» — «32/80-битным» процессором? Вернёмся обратно в настоящее — как называть Pentium MMX, который откусил 64 бита от каждого 80-битного скалярного вещественного регистра и назвал их целочисленным векторным регистром? А Pentum Pro/II с 256-битной шиной данных между кэшем L2 и ядром? (Ещё ранее MIPS R4000 и его варианты имели внутренний контроллёр L2 с внешней 128-битной шиной до самого кэша.) А как назвать Pentium III с его 128-битными регистрами XMM, хотя в каждом таком векторе могут пока храниться лишь 32-битные компоненты, а обрабатываться лишь парами в 64-битных ФУ, но не четвёрками? А как воспринимать готовящиеся сейчас для новых архитектур (в частности, Intel Larrabee) команды векторной адресации типа Scatter и Gather, где части векторного регистра воспринимаются как адреса, а не данные, и потому адресация тоже может считаться ххх-битной?

Современный спор о переходе с 32-битной на 64-битную платформу повторяет эту историю с дополнениями, ещё более подсаливающими и так разнообразное по вкусу блюдо. Прежде всего, если посмотреть на темпы удвоения разрядности (что бы под ней не понимали) однокристальных ЦП, то окажется, что переход от первых 4-битных к первым 32-битным произошёл всего за 8 лет — c 1971 г. (i4004) по 1979 г. (MC68000 и куда менее известный NS32016). Следующее удвоение до 64 бит потребовало 10 лет — i860 имел 32-битное целое скалярное АЛУ и 32-битные универсальные регистры со спариванием, но 64-битные FPU и целочисленное векторное ФУ, 64-битные внешние шины и, впервые, внутреннюю 128-битную шину ядро-кэш. А пока 64 бита добрались до ПК — прошло ещё лет 15, хотя 64-битный доступ к памяти (через 64-битную же шину данных, но для «32-битного» процессора) появился уже в первых Pentium в 1993 г.. А дело в том, что для целочисленных скалярных вычислений два главных типа операндов — данные и адреса — пока достаточно было иметь лишь 32-битными. Об избыточности 32-битной адресации для 80-90-х гг. уже сказано, но и жёсткая необходимость в 64-битных целочисленных вычислениях, в отличие от 32-битных, также до сих пор не возникала, да и не просматривается и сейчас. Для целых чисел диапазон от –2·109 до 2·109 или от 0 до 4·109 покрывает подавляющее большинство нужд, а редкие моменты 64-битности вполне удовлетворяются дедовским способом — операциями над частями операндов с переносом, что не так уж сильно медленнее и доступно с первых моментов появления 32-битных архитектур. Дополнительной пикантности добавляет тот факт, что 64-битная арифметика над целыми числами в архитектуре x86 появились ещё до AMD64 и EM64T, причём сразу векторная — начиная с набора SSE2 (2001 г.) существуют команды paddq и psubq для сложения и вычитания целых 64-битных компонентов, а команды 32-битного перемножения для любой архитектуры дают 64-битное число (команды деления, соответственно — его принимают; аналогично для многих 16-битных платформ, включая IA-16).

Разрядности некоторых процессоров для ПК

КритерийРазрядность
Функциональныйобработки хранения обмена
Реализационныйфизич. архитектурн. физич. архитектурн. физич. архитектурн.
Типовой (D: данных; A: адресов)DADADADADADA
i8080/85, Z80888-1616888-16168168-1616
Z800016168-641616168-64168-16238-6423
MC68000/010 (MC68008)16168-323232328-32328-16 (8)24 (20)8-3232
MC68020/03032328-323232328-32328-32328-3232
i8086/186* (i8088/188*)16168-161616168-16168-16 (8)208-1620
i8028616168-161616168-16168-16248-1624
i80386DX32328-323232328-32328-32328-3232
i80386SX (EX/CX)32328-323232328-32328-1624 (26)8-3232
i86032/64|64328-64/64|643232/64/32328-64/64/643264648-6464
i8048632/80328-32/803232/80328-32/803232328-8032
Pentium, K5 (Pentium Pro)32/80328-32/803232/80328-32/80326432 (36)8-8032 (51)
Pentium MMX (Pentium II)32/80|64328-32/80|643232/80|64328-32/80|64326432 (36)8-8032 (51)
K6 (K6-2)32/80| 64(/64)328-32/80| 64(/64)3232/80| 64(/64)328-32/80| 64(/64)3264328-8032
Athlon32/80| 64/64328-32/80| 64/643232/80| 64/64328-32/80| 64/643264368-8051
Athlon XP32/80| 64/64328-32/80| 64/32-1283232/80|64/128328-32/80| 64/1283264368-12851
Pentium III (Pentium 4/M, Core)32/80| 64/64328-32/80| 64(+128)/32-1283232/80| 64(+128)/128328-32/80| 64(+128)/1283264368-12851
Pentium 4 D/EE (Athlon 64*)64/80| 64/64648-64/80|64 + 128/32-1286464/80|64 + 128/128648-64/80|64 + 128/1286464(+16)408-12852
Atom32-64/80| 64/64-128648-64/80|64 + 128/32-1286464/80|64 + 128/128648-64/80|64 + 128/1286464368-12851
Core 2 (i7*)64/80| 128/128648-64/80|64 + 128/32-1286464/80|64 + 128/128648-64/80|64 + 128/1286464 (192+16)408-12852
Athlon II*, Phenom (II)*64/80| 128/128648-64/80|64 + 128/32-1286464/80|64 + 128/128648-64/80|64 + 128/12864128+1640 (48)8-12852

* — Мультиплексированная шина данных и адреса (для ЦП с интегрированным контроллёром памяти — только межпроцессорная)
«A/B|C/D» — для данных указана разрядность скалярного целого / вещественного | векторного целого / вещественного доменов
«X+Y» — имеет домены этого вида двух разрядностей
«X-Y» — в зависимости от команды или ФУ принимает все промежуточные значения с целой степенью двойки

Если вы дочитали до этого места, то объявленная цель статьи, скорее всего, уже достигнута, а Идеальное Конечное Точное Определение разрядности так и не найдено. Может быть, его вообще нет, и это даже хорошо. В конце концов, если компьютер это главный инструмент для работы с информацией, то каждая IT-технология это метод улучшения работы компьютера. Разрядность сама по себе ничего не даст в отрыве от всего остального арсенала высоких инфотехнологий. PDA/коммуникаторы, мобильники, нетбуки, медиа-плееры и прочая карманная электроника, а также гигантское количество встроенных контроллёров и бортовых компьютеров отлично работают, увеличивая свою популярность и без всякой 64-битности. Так зачем тогда переходят на большие разрядности? Зачем, например, никому пока не нужная 64-битность в Intel Atom для нетбуков, где 8 ГБ памяти мало того, что никому не нужны, так ещё и за пару часов досуха выжмут батарею, а научные или экономические вычисления (где могут потребоваться 64 целых бита) никто запускать не будет? Один из возможных ответов: «потому что мы можем». Дополнительная пара миллионов транзисторов для удвоения ещё оставшихся 32-битными блоков утонет каплей в море вентилей, уже потраченных на всё остальное в этом же чипе. Галопирующий прогресс микроэлектроники как главного паровоза IT сделал интегральный транзистор таким дешёвым, что теперь лакомый для любого маркетолога шильдик «64 bit» обойдётся потребителю в десяток лишних центов, обеспечивая совсем не бутафорское, а вполне реальное ускорение на 10-50 % в 1-5 % приложений. И если мелкая овчинка стоит почти бесплатной выделки, почему нет?




16 июля 2009 Г.

� ����������� �����������

� ����������� �����������


����� ������ ������ �������� ������� ������� �������� � ������ ��������, ����������, ��� �� ����� � ����������� �� ��� ����� ��. �� �������� ������ ���� ��������������, ���� ����������� �� ����������� ������������ � �������� ���������.

������ «�����������» ����� ���������� ��� �������� �������������� ��������� � ������, ������� ��� ���� ����� ���, ������������ ��������, �������������� ��� ������������ � ������ ����������. �� ������ ������������� � ����������� ����������� (��), ��� � �������� ������� �������������� ��������������� ������, �� ������� �� ��������� ������ (�� ��� ���, ���� ���-�� �� ��������, ��� ������� �������� ��� ��� ���������� ������ ����), ������� ����������� ����������� ������ ������������. ������������������ ��� ������� ������������� ������.

����������� ����, ��� ������ ����������� 80-�, � ���� (�� ���) ������� �������������� ��, � �� ��������� � ����� �� ��� ��� ��������� ����������. ������� 256-������ SSE8, ���������� GPU � 5-��������� ����������� ������ �� ����� ���� ���, �� � ��� ��� ���� ������� 16-������ ��������� (������, «16-������» ������� � ����������� ������������), � ������� 16 ��� ����� � �� ��� — �� ���� ������� ��� �� �������������� ������� �������������� ������. �������� �������� ������ �� ����� ���� ������ ������������� (������, �� ���������������) �� ��� ����������� DEC PDP-11. � ��� �������� ������� ����������� — ����������� �����, ������� ����������� ��������� ����� �� ��, ������� ����� 32-������ — �� �������, ��� ���������� ��� ���������. ������ ��� ��������� � ��������� ��������� � ������ �������. ����, ��� ������� ������: ��� ������ ���� ������� �� ����������� � ����� ���� �������� 16-������ ��, ����� ������������ ��������� ��� ���������� 32-������? ����� ������ ������ ���� �����, �������� ��� �������: ��������������� ����������� � ��������� �� �������.

���������������

������, ��� �������� � ������ — ����������� ���� ������ �������? ��������� � ����������� ����� �������������� �������: � ��� �������� ������� — ��� ���������, �������� � ����-����� ������, �� ������� ��������, ��������������, ���������(�), ������ � ���������. ��������, ��� ������� ������������ ������������ ������� ������� �� ������ ���������, ����� ����������, ��� ����� ���������� ������� ����������� � �� ������������ ������. ��������, ��� �� ��������� � �������� ������������ ������, �� �� ����� ������ �� ������� (��� ���� � ���� ���� ������������ ��������� ������) � ������������ � ������� ������������ (��� ����� ���� ������ ���� � �� ����������). ������� ����� ������������� ��������� ����������� ���������, �������� � ������ ����������.

������ ������������, ��� ��� ������������� ������ ���������������� «������», �������� �����������, �� 90% ��������� �� ��� �������� �������������, � ��� �������������. �������������, � ����� ������ �������������� ��������� ������ ��������� ������ ������� ������ �������. � ������ �������, ������ ��������� ��������� (��������������, ������������� � ���������� ��������� ��������� ������������, ��������, ���������� ��������� � ������) ����� ���� ������ �� ������ �� ������������, �� � �� ������������. �������, ��� ����������� ���� �������� � �� ���������� — ���������� � �������������.

������� ��������, ��� ������������ ���� ������ ������: ����������� ����� ���������� ��������� �� ������ �������� ������ � ������� ������������ (��� ������ ��� �� ��������� ������� ��������������������), ��������� ����� �������� � ���������� �� (��� ���������� ����� ����������� ���������� � ����� �������� ������������ ���������� �����), ���� ������ �� ���������� (���� ��������� ������ �������� ����������), � ���-�� ����� ���� ����������� � ���������� (����������). ������� ��� �������������� ����� ����� �������� ������ ���, ��� ���� ������ ���������� ���������� ����� ���� �� ��� ��������� ��������� ������, �� ���� �� ��� � ����������� �� �������� — «�������������» ����������� ����-���� ����� ���������� ������ � ���������������� �� ������ �������� ����� ���������� ��� ����� ������� ����������, �� ������� ��� ���� � ����� �� (��� ��� ������� ����������������, ������� �� ��� �������� �������� � ������� ���������� �����������). ��������� ������ �� ����� ������ �� ���� �������������, �.�. ����� �������� ������ ����� ������ ����������� ������������� � �������� ���, � ����������� ���� ������ ���-�� ��������. ���������� � ���� ���������������� ������ ���� �� ����� � ������� — ���� �������������� ���� ��������� � ������� ������������.

�������� �����������, ����������� ����� ������ ���������� ��� ���������. ��� ������ ���������� � ���������� �� � �������������� ������? �������, ������, ������ � ���������-����������� ����. � ��������� ���� �� ��� — �� ����������� ����� ������������� � ���������� ���������� ���������� � � ����������� ������� ���������� �� ����������. ���� ������� � ��������� — � ��������� ���������� RISC, ��������, ����������� ������ ��������� � ������ ������ ���� ����� ���������� ����������� ���� ������ ����������, � �.�. � ��� ���������� ���� (����� ��������� ����������� � ����������� ARM � PowerPC). ��� ������ ��� �� — ��� ������� � ������������� ��������, ��� ������� ����� ����������, ���� ����������, �� ������ ����������� �����. ���� ����� ��� ������������ — RISC ��� ��������� ����� ������, ������� ��� � �������� ������ �����, ��� ��� ����� ���������� ����������� (��� ���� �� ��������� ����� ������ ������, �� � ��� ���� �� ����� ������ ���� ������ ������). ������� ������ CISC-��������� ��������� ���������� ������ � � ������������� � ���������� ������� ������, �� ������ ����������� ����-����. ����������, ��� ����������� �� ������ — ��������� RISC, �� ��� ������ ���������, � �� ������������. �������� ������ ��� ���� ���������� — ������ � ������. �� � ����������.

��������

� ��� ������� ��� �������� ����� �����������: �������������� (���������, �������� � ������), �������������� (���������� � �������������) � ������� (������ � �������). ����� ��� 12 ����� ���� ���������� �����. �����������, ��� �� ������ ���������� ��������� ��� ������ ��������� �� �� �������� «16-������» (� ���������� ����������� ��������� ������, � ������������� �������� �������, � ��� ���������). ������ ���������, ����� �� ���� �������� ����������� ������ ������ ����� «32-������», ����� ������������ ��������� �������� ������ �����.

������ � ������������� �����. ������ �� �� ������� ������ � ������ � ���������� 32-������ �������, ����� ���������� 32-������? ������ ������, ��������, ��, � ��� �� ������ ������� �� �� ��� ������. ����� ��� 8-������ (�� ������) �� ����� ����������� ������� 16-������ ������ � ����� ��������� (����� �� �� ������ ���������������� �� ���� ���������� 16-������ ���������), �� �� ����� �� �� �������� 16-�������. ����� ����, ���� �� ������ ������� 32-������ ������, �� �����-�� 16-������ ������, ��� ��� ����� �������� 32-������?..

�� ����������� ������� �� ������������� ����������� ��� 32-������� ������� � ��������, � ����� ���������� 32-������ ������ ������ � ���������� 32-������ ���������� ����� ����� ���� ����� �� — � ������� ����, � � �������� �� ����.


Intel 486DX2. ���-�� ����� ���������� �����������…

������� �� ���������� ����������. ������ �� �� ������� ������ � ������ � ��������� 32-������ �������? �����������, �� �����������, �.�. ��� 32-������ ��������� ����� ������� ��������, ��� ������� ������������ ��� 8-������ ��, ������� � i8080. � ����������� 16-������ Z8000 ����� ���� ���������� ��������, ������� 64-������ �������� (������ ��� ������). ��� �� ��� ����������, �.�. ������ ����� ������, ����������� � ����������� �����, �� ����������, �� ��� � �� �����������. ���� ������ ���� ����������� ���������� � � �������, � � ������� �������� ������������ 32-������� �������� — ������ � ������� ���������� IA-32 � MC68k, ��� ����� ���������� ������ � ������� �������� (� IA-32 — ��� � � ���������, ��� ��������� ����������).

��� �����. ������ �� �� ������������ ������ � ������ 32-������� ����������� ��������? �����������, � ��� �� ���������, �������� ����� ������������ ����������� � �������������� ����������� 16-������� �������. ����� ��������� ��������� Motorola MC68000, ������������� � ������ ����������, ������, ����� � ������ ���������� ������� — �� �������� 32-������, � ��� ���� 32-������ ��������, �� ��� �� ������ 32-������� �� (��� ��������� ������ � 68020). ���� ���� ����� ��� 16-������ ���, ��� �� ������� ����� ����������� ��� ���������� 32-������ ��������. � i8080 � Z80 8-������ ��� ��������� 16-������ �������� ��� ���������� ������ ��������������� ��� ��� �������. ����� ��� ������� ����������� � ������� SSE � ��� 128-������� ����������, ������� �������� �������������� �� 64-������ ��.

�������, �����: ����� �� ���������� ��������� ��������� � ���������� ������ 32-������� �������� � 32-������ ����������? �� ������ ������ ���� ����� ����� ��� ������������� ��, �������� ���� � ���������� ������� ����: 8 ��� ��� 16-������� i8088, 16 ��� ��� 32-������ MC68000/010 � i80386SX/EX/CX, � ���� 8 ��� ��� 32-������� MC68008. � ���������� ������������ ���� ������ ���� �������. ������ � ����, ��� ��� ������������� ��� ������ (�.�. ������� � 16-������) ���������� ��������� ������ ����� ����������� �� ������ ��� �� ������. � ������ ������ �� ���� ������ ������ ������� ����� �����, � ���� ������ ��������� ��� ���������� ������ ��� ����� — �� ���������� ����� �� ����� �������. ��� ����������� ����������� ������� ����� ����������� ��������� ���� ����-����� (� ����������� x86 ����� ���� ����� ����������� �� ����� i386 — �� ���� �� ������ ���� ���� ������), ���� ���������� ����������� �������� � �������� ������ ���� ������, ������� � ���� ������ �� ����� (��� 32-����� ���� ������ ����� ����� ������ ������� �� 4, � ������ ������� 2 ���� ���� ������ ������ ����� ����) — ��� ���� �� ������ i386. ������ �� ��������� ������ �������� ���� ��� ������������ ���������� ������ ���� � �� ������ ��������� �� ���������� ������ � MC68020/030. � ���������� � ������������ ��� ������������ ������ ��������� ���� ������ � ����-������, ������� ���������� ����������� ���� ������ ����������� ������ � ���������� ������ �� ����� ���, �� ������� ������� ����������� ���� ������ � ������. �� ���� �������, ��� 32-������ ���������� ���� ������ ����� ���� ������ ��� 8-������ ���� ������, �� ��� �� ���� ���������� � ������� � ������� ��� �� ����� �� ��������� ������������.

�� ��� ��� �� ��. ����� ��� ������ 32-������ ���������� ��� ���������� ���������? ��������-����� 80-�, �� ����� ������-������ ��������� ���������� ���������� ������, �������� ����� ������ ��� �� ���� ��� ���������� ������� ��������, �� ���� ����� — �����������. � 32-������ ��������� �������� �������� ������ � 4 �� ����������� ���! �� ���� ������ ����� ����� ������������ � ��������� ��� 20 � �����������?! �������������, ��� ������ ���������� «32-������» �� ����� ������ �� 32 ���� ���������� ������ ���� ������: MC68000 ���� 24 (23 ���������� + 1 ��� ���������� ���������), � MC68008 — � ����� 20. Intel 386SX (�������� �� 3 ���� ����� ������������� ��������� 32-������� i80386), ������ �������������� ���� ������, �������� � ���� ������ �� 24 (23 ����������) ���, � ��� ������������ ������ 386EX/CX ����� 26-������ ����. ����� ����, ������ �������, ����������� ����������� 32-������� ��������, ��������� ���� � 90-�, � ������ ����������� �����, ������� ����������� ����� ������ ������, ����� ������� >4 �� �������� ������������� �� ��� ������ ������� — ���� � 2000-�. ���� ������ �� � 64-������ ���������� ����� ������ (IBM/Motorola PowerPC 620) ��������� �� � 1994 �..

�������

����, ��������� � ���������� ������ ������ �� ��������� ������ 32-������. ���������� ���� ������������ ������� ������������, ��� �� ��������� 32-������ �������� ����� ��������. � ���� ��� ��� ���������� ����������� ���������� �������� ��������� ����� �������������� � ������� ��������� ��� ���������� 16-������� ����������� �������� ���������� � ����������� ������� — ��� ��� ������������ �� �������. ��� ��� ��, ���������� ���������� ��������, ���������� ������� � ����� ����������, � ��� ��� 16-������ ��������� ����� ���� 32-������?

��� ��������, ����� ������� ���� ����� ������� �� �������, � ����� ��� ���� ���� ��������������. ���������� ����������� �� — �� ����������. �� ���� ����� ������������� ����� ������ �������� �������� — � ����� �� ���? ����������� ����������� ������ ������ ��� ��������� ������ � ���� (����� ��������� ������������ ��������, �� ����������� � 16 ���), � ������� — ��� ��������� ����������� ����������� �������� �������� ������ (����������� � 64 �� ��� 16-������ ���������, ���-��� ����������� ���������� ������� IA-16, ��������� ������������� ��� � �������� 80-�). �����, �������, ������� ���������� ��������� � ���������� �������������� ������� (����� �� 8-������ �� ���������� 1 �� �� ���������� ������� �� � ������� ����������), �� ����� ���������� �������� � ���������� ������� � ������. ���������� — ����� ����� ����� ������ 32-�������� ��� ������ �����, ��� ��� ����� �� �������� ������������������ �� ��������� � ���������� 32-������ ����� �� 16-������ ��������� ��� ����������� ���������, � �� ���������? ����� ������� �� ������ �������� ����������������, ��������� �� ����� ������, �� �� ������� ������ � ��������. �� ���� �� �������� � ������ — ���������� ����������� ������ ��������������� ���, ����� ��� ������� ������� � ������������� (������ ������) � ��������������� (������� ��������) ������ ������������ �����������. «������ ������» ����� ��������� ������ � ������������� ��������, �.�. ������ ��������� � ���������� ������ ��������� �������� ��� ���������� ���, � �� ����� ��� ���� ��������� ��������� �� ����� ���� ��� ������ ��������� ��������. ����������� ������ � �������� ��������� ������������ ��� ����� ��� 32-������ ����������.

�� �������� �� �� ���, ��� � �� ��� ����� ������ ��������, � ����������, � �������������, ������ ���� 32-�������, ����� ��� ����� ���� �� ������� ����������� 32-������ �����������? ������ ���. ������ ��� �� MC68000 — � ���� 32-������ ����������� ��� ������ � ������� � 32-������ ��������, �� 16-������ ��� � ������� ���� ������ � 24-������ ���������� ������� ���������. ��� �� �����, ������������� «32-��������» �� ������ ��� �������� ����������� �� 3 ���� ����� «16-������» 80286: �� ���������� � 1980-� ��������� Dhrystones MC68000 �� 8 ��� �������� 2100 «��������», � 286 �� 10 ��� — 1900 (����� 16-������ i8088 �� 4,77 ��� — 300).

�� �� ��� ��� �� ������� �������� �� ������ — ��� �� ����� ����������� ����������? � ������, ����� �� ��� ���� ������ � ������� ����������, �� ����� ���������� ����� ����� — ��� ������. �� �������������� ����� ��������� ���� � ������������� ����������� � �� ����������. �� ���� ���� ��� � ������������. ����� ����, ���� ��� �� ��������� ���������� ����������, �� ���� ��� � ���������. � ����, �� ������, Intel �������� �������� ������������ ����������� ����� ������ ������ ������ 80486 (�������: �� ����� � ���, ������� — 80-� ����). � ������ ����, ��� ���������� ���������� � ������������� ������������� ������ (� �������� FPU �� ��������) 80-������ — ��� �� ����� �������� «�������» — «32/80-������» �����������? �������� ������� � ��������� — ��� �������� Pentium MMX, ������� ������� 64 ���� �� ������� 80-������� ���������� ������������� �������� � ������ �� ������������� ��������� ���������? � Pentum Pro/II � 256-������ ����� ������ ����� ����� L2 � �����? (��� ����� MIPS R4000 � ��� �������� ����� ���������� ��������� L2 � ������� 128-������ ����� �� ������ ����.) � ��� ������� Pentium III � ��� 128-������� ���������� XMM, ���� � ������ ����� ������� ����� ���� ��������� ���� 32-������ ����������, � �������������� ���� ������ � 64-������ ��, �� �� ���������? � ��� ������������ ����������� ������ ��� ����� ���������� (� ���������, Intel Larrabee) ������� ��������� ��������� ���� Scatter � Gather, ��� ����� ���������� �������� �������������� ��� ������, � �� ������, � ������ ��������� ���� ����� ��������� ���-������?

����������� ���� � �������� � 32-������ �� 64-������ ��������� ��������� ��� ������� � ������������, ��� ����� �������������� � ��� ������������� �� ����� �����. ������ �����, ���� ���������� �� ����� �������� ����������� (��� �� ��� ��� �� ��������) ��������������� ��, �� ��������, ��� ������� �� ������ 4-������ � ������ 32-������ ��������� ����� �� 8 ��� — c 1971 �. (i4004) �� 1979 �. (MC68000 � ���� ����� ��������� NS32016). ��������� �������� �� 64 ��� ����������� 10 ��� — i860 ���� 32-������ ����� ��������� ��� � 32-������ ������������� �������� �� �����������, �� 64-������ FPU � ������������� ��������� ��, 64-������ ������� ���� �, �������, ���������� 128-������ ���� ����-���. � ���� 64 ���� ��������� �� �� — ������ ��� ��� 15, ���� 64-������ ������ � ������ (����� 64-������ �� ���� ������, �� ��� «32-�������» ����������) �������� ��� � ������ Pentium � 1993 �.. � ���� � ���, ��� ��� ������������� ��������� ���������� ��� ������� ���� ��������� — ������ � ������ — ���� ���������� ���� ����� ���� 32-�������. �� ������������ 32-������ ��������� ��� 80-90-� ��. ��� �������, �� � ������ ������������� � 64-������ ������������� �����������, � ������� �� 32-������, ����� �� ��� ��� �� ���������, �� � �� ��������������� � ������. ��� ����� ����� �������� �� –2·109 �� 2·109 ��� �� 0 �� 4·109 ��������� ����������� ����������� ����, � ������ ������� 64-�������� ������ ��������������� ��������� �������� — ���������� ��� ������� ��������� � ���������, ��� �� ��� �� ������ ��������� � �������� � ������ �������� ��������� 32-������ ����������. �������������� ����������� ��������� ��� ����, ��� 64-������ ���������� ��� ������ ������� � ����������� x86 ��������� ��� �� AMD64 � EM64T, ������ ����� ��������� — ������� � ������ SSE2 (2001 �.) ���������� ������� paddq � psubq ��� �������� � ��������� ����� 64-������ �����������, � ������� 32-������� ������������ ��� ����� ����������� ���� 64-������ ����� (������� �������, �������������� — ��� ���������; ���������� ��� ������ 16-������ ��������, ������� IA-16).

����������� ��������� ����������� ��� ��

�������� �����������
�������������� ��������� �������� ������
�������������� �����. �����������. �����. �����������. �����. �����������.
������� (D: ������; A: �������) D A D A D A D A D A D A
i8080/85, Z80 8 8 8-16 16 8 8 8-16 16 8 16 8-16 16
Z8000 16 16 8-64 16 16 16 8-64 16 8-16 23 8-64 23
MC68000/010 (MC68008) 16 16 8-32 32 32 32 8-32 32 8-16 (8) 24 (20) 8-32 32
MC68020/030 32 32 8-32 32 32 32 8-32 32 8-32 32 8-32 32
i8086/186* (i8088/188*) 16 16 8-16 16 16 16 8-16 16 8-16 (8) 20 8-16 20
i80286 16 16 8-16 16 16 16 8-16 16 8-16 24 8-16 24
i80386DX 32 32 8-32 32 32 32 8-32 32 8-32 32 8-32 32
i80386SX (EX/CX) 32 32 8-32 32 32 32 8-32 32 8-16 24 (26) 8-32 32
i860 32/64|64 32 8-64/64|64 32 32/64/32 32 8-64/64/64 32 64 64 8-64 64
i80486 32/80 32 8-32/80 32 32/80 32 8-32/80 32 32 32 8-80 32
Pentium, K5 (Pentium Pro) 32/80 32 8-32/80 32 32/80 32 8-32/80 32 64 32 (36) 8-80 32 (51)
Pentium MMX (Pentium II) 32/80|64 32 8-32/80|64 32 32/80|64 32 8-32/80|64 32 64 32 (36) 8-80 32 (51)
K6 (K6-2) 32/80| 64(/64) 32 8-32/80| 64(/64) 32 32/80| 64(/64) 32 8-32/80| 64(/64) 32 64 32 8-80 32
Athlon 32/80| 64/64 32 8-32/80| 64/64 32 32/80| 64/64 32 8-32/80| 64/64 32 64 36 8-80 51
Athlon XP 32/80| 64/64 32 8-32/80| 64/32-128 32 32/80|64/128 32 8-32/80| 64/128 32 64 36 8-128 51
Pentium III (Pentium 4/M, Core) 32/80| 64/64 32 8-32/80| 64(+128)/32-128 32 32/80| 64(+128)/128 32 8-32/80| 64(+128)/128 32 64 36 8-128 51
Pentium 4 D/EE (Athlon 64*) 64/80| 64/64 64 8-64/80|64 + 128/32-128 64 64/80|64 + 128/128 64 8-64/80|64 + 128/128 64 64(+16) 40 8-128 52
Atom 32-64/80| 64/64-128 64 8-64/80|64 + 128/32-128 64 64/80|64 + 128/128 64 8-64/80|64 + 128/128 64 64 36 8-128 51
Core 2 (i7*) 64/80| 128/128 64 8-64/80|64 + 128/32-128 64 64/80|64 + 128/128 64 8-64/80|64 + 128/128 64 64 (192+16) 40 8-128 52
Athlon II*, Phenom (II)* 64/80| 128/128 64 8-64/80|64 + 128/32-128 64 64/80|64 + 128/128 64 8-64/80|64 + 128/128 64 128+16 40 (48) 8-128 52

* — �������������������� ���� ������ � ������ (��� �� � ��������������� ����������� ������ — ������ ���������������)
«A/B|C/D» — ��� ������ ������� ����������� ���������� ������ / ������������� | ���������� ������ / ������������� �������
«X+Y» — ����� ������ ����� ���� ���� ������������
«X-Y» — � ����������� �� ������� ��� �� ��������� ��� ������������� �������� � ����� �������� ������

���� �� �������� �� ����� �����, �� ����������� ���� ������, ������ �����, ��� ����������, � ��������� �������� ������ ����������� ����������� ��� � �� �������. ����� ����, ��� ������ ���, � ��� ���� ������. � ����� ������, ���� ��������� ��� ������� ���������� ��� ������ � �����������, �� ������ IT-���������� ��� ����� ��������� ������ ����������. ����������� ���� �� ���� ������ �� ���� � ������ �� ����� ���������� �������� ������� ��������������. PDA/�������������, ����������, �������, �����-������ � ������ ��������� �����������, � ����� ���������� ���������� ���������� ����������� � �������� ����������� ������� ��������, ���������� ���� ������������ � ��� ������ 64-��������. ��� ����� ����� ��������� �� ������� �����������? �����, ��������, ������ ���� �� ������ 64-�������� � Intel Atom ��� ��������, ��� 8 �� ������ ���� ����, ��� ������ �� �����, ��� ��� � �� ���� ����� ������ ������ �������, � ������� ��� ������������� ���������� (��� ����� ������������� 64 ����� ����) ����� ��������� �� �����? ���� �� ��������� �������: «������ ��� �� �����». �������������� ���� ��������� ������������ ��� �������� ��� ���������� 32-������� ������ ������ ������ � ���� ��������, ��� ����������� �� �� ��������� � ���� �� ����. ������������ �������� ���������������� ��� �������� �������� IT ������ ������������ ���������� ����� �������, ��� ������ ������� ��� ������ ����������� ������� «64 bit» �������� ����������� � ������� ������ ������, ����������� ������ �� �����������, � ������ �������� ��������� �� 10-50 % � 1-5 % ����������. � ���� ������ ������� ����� ����� ���������� �������, ������ ���?