Архитектура микропроцессоров: основные виды, развитие, достоинства и недостатки. Архитектуры процессора intel за все время. Архитектура современных процессоров

общие принципы работы (x86 CPU FAQ 1.0)
Disclaimer

Наверное, наиболее точно причину появления данного материала можно сформулировать так: «даже не столько нужно, чтобы он был - сколько странно, что его до сих пор не было». И действительно: в комментариях к результатам тестов, мы постоянно оперируем такими понятиями как «ёмкость кэша», «скорость процессорной шины», «поддержка расширенных наборов инструкций», но единой статьи, в которой были бы собраны разъяснения всех этих терминов - на сайте нет. Такое упущение, разумеется, следовало устранить. Данная статья с подзаголовком «x86 CPU FAQ» и является попыткой сделать это. Разумеется, некоторые её разделы могут быть отнесены не только к процессорам архитектуры x86, и не только с десктопным (предназначенным для установки в ПК) их вариантам, однако вот уж на такой глобализм мы совершенно точно не замахиваемся. Поэтому просьба помнить, что в рамках данного материала, если в явной форме не указано иное, слово «процессор» обозначает «процессор архитектуры x86, предназначенный для установки в десктопы». Возможно, в процессе дальнейшего совершенствования и расширения, появятся в статье разделы, посвящённые серверным CPU или даже процессорам других архитектур, но это уже дело будущего… Оглавление

Введение

Код и данные: основной принцип работы процессора

Итак, если не пытаться изложить здесь «кратенько» курс информатики для средней школы, то единственное что хотелось бы напомнить - это то, что процессор (за редкими исключениями) исполняет не программы, написанные на каком-нибудь языке программирования (один из которых, вы, возможно, даже знаете), а некий «машинный код». То есть командами для него являются последовательности байтов, находящихся в памяти компьютера. Иногда команда может быть равна одному байту, иногда она занимает несколько байт. Там же, в основной памяти (ОЗУ, RAM) находятся и данные. Они могут находиться в отдельной области, а могут и быть «перемешаны» с кодом. Различие между кодом и данными состоит в том, что данные - это то, над чем процессор производит какие-то операции. А код - это команды, которые ему сообщают, какую именно операцию он должен произвести. Для упрощения, мы можем представить себе программу и ее данные в виде последовательности байтов некой конечной длины, располагающуюся непрерывно (не будем усложнять) в общем массиве памяти. Например, у нас есть массив памяти длиной в 1’000’000 байт, а наша программа (вместе с данными) - это байты с номерами от 1000 до 20’000. Прочие байты - это другие программы или их данные, или просто свободная память, не занятая ничем полезным.

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

Возможно, кого-то удивит, что достаточно большой раздел в FAQ, посвященном x86 CPU, выделен под объяснение особенностей функционирования памяти в современных системах, основанных на данном типе процессоров. Однако факты - упрямая вещь: сами x86-процессоры ныне содержат так много блоков, отвечающих именно за оптимизацию их работы с ОЗУ, что игнорировать эту тесную связь было бы совершенно нелепо. Можно сказать даже так: уж, коль решения, связанные с оптимизацией работы с памятью, стали неотъемлемой частью самих процессоров - то и саму память можно рассматривать в качестве некоего «придатка», функционирование которого оказывает непосредственное влияние на скорость работы CPU. Без понимания особенностей взаимодействия процессора с памятью, невозможно понять, за счёт чего тот или иной процессор (та или иная система) исполняет программы медленнее или быстрее.

Контроллер памяти

Итак, ранее выше мы уже говорили о том, что как команды, так и данные, попадают в процессор из оперативной памяти. На самом деле всё немного сложнее. В большинстве современных x86-систем (то есть компьютеров на базе x86-процессоров), процессор как устройство к памяти обращаться вообще не может, так как не имеет в своем составе соответствующих узлов. Поэтому он обращается к «промежуточному» специализированному устройству, называемому контроллером памяти, а уже тот, в свою очередь - к микросхемам ОЗУ, размещенным на модулях памяти. Модули вы наверняка видели - это такие длинные узкие текстолитовые «планочки» (фактически - небольшие платы) с некоторым количеством микросхем на них, вставляемые в специальные разъемы на системной плате. Роль контроллера ОЗУ, таким образом, проста: он служит своего рода «мостом»* между памятью и использующими ее устройствами (кстати, к ним относится не только процессор, но об этом - чуть позже). Как правило, контроллер памяти входит в состав чипсета - набора микросхем, являющегося основой системной платы. От быстродействия контроллера во многом зависит скорость обмена данными между процессором и памятью, это один из важнейших компонентов, влияющих на общую производительность компьютера.

* - кстати, контроллер памяти физически находится в микросхеме чипсета, традиционно называемой «северным мостом».

Процессорная шина

Любой процессор обязательно оснащён процессорной шиной, которую в среде x86 CPU принято называть FSB (Front Side Bus). Эта шина служит каналом связи между процессором и всеми остальными устройствами в компьютере: памятью, видеокартой, жёстким диском, и так далее. Впрочем, как мы уже знаем из предыдущего раздела, между собственно памятью и процессором находится контроллер памяти. Соответственно: процессор посредством FSB связывается с контроллером памяти, а уже тот, в свою очередь, по специальной шине (назовём её, не мудрствуя лукаво, «шиной памяти») - с модулями ОЗУ на плате. Однако, повторимся: поскольку «внешняя» шина у классического x86 CPU всего одна, она используется не только для работы с памятью, но и для общения процессора со всеми остальными устройствами.

Различия между традиционной для
x86 CPU архитектурой и K8/AMD64

Революционность подхода компании AMD состоит в том, что её процессоры с архитектурой AMD64 (и микроархитектурой, которую условно принято называть «K8») оснащены множеством «внешних» шин. При этом одна или несколько шин HyperTransport служат для связи со всеми устройствами кроме памяти, а отдельная группа из одной или двух (в случае двухканального контроллера) шин - исключительно для работы процессора с памятью. Преимущество интеграции контроллера памяти прямо в процессор, очевидно: «путь от ядра до памяти» становится заметно «короче», что позволяет работать с ОЗУ быстрее. Правда, имеются у данного подхода и недостатки. Так, например, если ранее устройства типа жёсткого диска или видеокарты могли работать с памятью через выделенный, независимый контроллер - то в случае с архитектурой AMD64 они вынуждены работать с ОЗУ через контроллер, размещённый на процессоре. Так как CPU в данной архитектуре является единственным устройством, имеющим прямой доступ к памяти. Де-факто, в противостоянии «внешний контроллер vs. интегрированный», сложился паритет: с одной стороны, на данный момент AMD является единственным производителем десктопных x86-процессоров с интегрированным контроллером памяти, с другой - компания вроде бы вполне довольна этим решением, и не собирается от него отказываться. С третьей - Intel тоже не собирается отказываться от внешнего контроллера, и вполне довольна «классической схемой», проверенной годами.

Оперативная память

Разрядность шины памяти, N-канальные контроллеры памяти

По состоянию на сегодняшний день, вся память, используемая в современных десктопных x86-системах имеет шину шириной 64 бита. Это означает, что за один такт по данной шине одновременно может быть передано количество информации, кратное 8 байтам (8 байт для SDR-шин, 16 байт для DDR-шин). Особняком стоит только память типа RDRAM, применявшаяся в системах на базе процессоров Intel Pentium 4 на заре становления архитектуры NetBurst, но сейчас это направление признано тупиковым для x86-ПК (к слову - руку к этому приложила всё та же компания Intel, которая в своё время активно пропагандировала данный тип памяти). Некоторую неразбериху вносят лишь двухканальные контроллеры, обеспечивающие одновременную работу с двумя отдельными друг от друга 64-битными шинами, благодаря чему некоторые производители заявляют о некой «128-битности». Это, разумеется, чистой воды профанация. Арифметика на уровне 1-го класса в данном случае, увы, не работает: 2x64 вовсе не равно 128. Почему? Да хотя бы потому, что даже самые современные x86 CPU (см. ниже раздел FAQ «64-битные расширения классической x86 (IA32) архитектуры») не могут работать со 128-битной шиной и 128-битной адресацией. Грубо говоря: две независимые параллельно идущие дороги, шириной 2 метра каждая - могут обеспечить одновременный проезд двух автомобилей, шириной 2 метра - но никоим образом не одного, шириной 4 метра. Точно так же, N-канальный контроллер памяти может увеличить скорость работы с данными в N раз (и то больше теоретически, чем практически) - но никак не способен увеличить разрядность этих данных. Ширина шины памяти во всех современных контроллерах, применяемых в x86-системах, равна 64 битам - независимо от того, находится этот контроллер в чипсете, или в самом процессоре. Некоторые контроллеры оснащены двумя независимыми 64-битными каналами, но на разрядность шины памяти это никак не влияет - только на скорость считывания и записи информации.

Скорость чтения и записи

Скорость чтения и записи информации в память теоретически ограничивается исключительно пропускной способностью самой памяти. Так, например, двухканальный контроллер памяти стандарта DDR400 теоретически способен обеспечить скорость чтения и записи информации, равную 8 байт (ширина шины) * 2 (количество каналов) * 2 (протокол DDR, обеспечивающий передачу 2 пакетов данных за 1 такт) * 200"000"000 (фактическая частота работы шины памяти равная 200 МГц, то есть 200"000"000 тактов в секунду). Значения, получаемые в результате практических тестов, как правило, чуть ниже теоретических: сказывается «неидеальность» конструкции контроллера памяти, плюс накладки (задержки), вызванные работой подсистемы кэширования самого процессора (см. ниже раздел про процессорный кэш). Однако основной «подвох» содержится даже не в накладках, связанных с работой контроллера и подсистемы кэширования, а в том, что скорость «линейного» чтения или записи является вовсе не единственной характеристикой, влияющей на фактическую скорость работы процессора с ОЗУ. Для того чтобы понять, из каких составляющих складывается фактическая скорость работы процессора с памятью, нам необходимо кроме линейной скорости считывания или записи учитывать ещё и такую характеристику, как латентность .

Латентность

Латентность является не менее важной характеристикой с точки зрения быстродействия подсистемы памяти, чем скорость «прокачки данных», но совершенно другой, по сути. Большая скорость обмена данными хороша тогда, когда их размер относительно велик, но если нам требуется «понемногу с разных адресов» - то на первый план выходит именно латентность. Что это такое? В общем случае - время, которое требуется для того, чтобы начать считывать информацию с определённого адреса. И действительно: с момента, когда процессор посылает контроллеру памяти команду на считывание (запись), и до момента, когда эта операция осуществляется, проходит определённое количество времени. Причём оно вовсе не равно времени, которое требуется на пересылку данных. Приняв команду на чтение или запись от процессора, контроллер памяти «указывает» ей, с каким адресом он желает работать. Доступ к любому произвольно взятому адресу не может быть осуществлён мгновенно, для этого требуется определённое время. Возникает задержка: адрес указан, но память ещё не готова предоставить к нему доступ. В общем случае, эту задержку и принято называть латентностью. У разных типов памяти она разная. Так, например, память типа DDR2 имеет в среднем гораздо большие задержки, чем DDR (при одинаковой частоте передачи данных). В результате, если данные в программе расположены «хаотично» и «небольшими кусками», скорость их считывания становится намного менее важной, чем скорость доступа к «началу куска», так как задержки при переходе на очередной адрес влияют на быстродействие системы намного сильнее, чем скорость считывания или записи.

«Соревнование» между скоростью чтения (записи) и латентностью - одна из основных головных болей разработчиков современных систем: к сожалению, рост скорости чтения (записи), почти всегда приводит к увеличению латентности. Так, например, память типа SDR (PC66, PC100, PC133) обладает в среднем лучшей (меньшей) латентностью, чем DDR. В свою очередь, у DDR2 латентность ещё выше (то есть хуже), чем у DDR.

Следует понимать, что «общая» латентность подсистемы памяти зависит не только от неё самой, но и от контроллера памяти и места его расположения - все эти факторы тоже влияют на задержку. Именно поэтому компания AMD в процессе разработки архитектуры AMD64 решила «одним махом» решить проблему высокой латентности, интегрировав контроллер прямо в процессор - чтобы максимально «сократить дистанцию» между процессорным ядром и модулями ОЗУ. Затея удалась, но дорогой ценой: теперь система на базе определённого CPU архитектуры AMD64 может работать только с той памятью, на которую рассчитан его контроллер. Наверное, именно поэтому компания Intel до сих пор не решилась на такой кардинальный шаг, предпочитая действовать традиционными методами: усовершенствуя контроллер памяти в чипсете и механизм Prefetch в процессоре (про него см. ниже).

В завершение, заметим, что понятия «скорость чтения / записи» и «латентность», в общем случае, применимы к любому типу памяти - в том числе не только к классической DRAM (SDR, Rambus, DDR, DDR2), но и к кэшу (см. ниже). Процессор: сведения общего характера

Понятие архитектуры

Архитектура как совместимость с кодом

Наверняка вы часто встречались с термином «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 лет, этот набор поддерживают гарантированно. Для справки приведем табличку, на которой обобщена информация о поддержке различных расширенных наборов команд различными десктопными (предназначенными для настольных ПК) процессорами.

Процессор
Intel Pentium II
Intel Celeron до 533 MHz
Intel Pentium III
Intel Celeron 533-1400 MHz
Intel Pentium 4
Intel Celeron от 1700 MHz
Intel Celeron D
Intel Pentium 4 eXtreme Edition
Intel Pentium eXtreme Edition
Intel Pentium D
AMD K6
AMD K6-2
AMD K6-III
AMD Athlon
AMD Duron до 900 MHz
AMD Athlon XP
AMD Duron от 1000 MHz
AMD Athlon 64 / Athlon FX
AMD Sempron
AMD Athlon 64 X2
VIA C3

* в зависимости от модификации

На данный момент всё популярное десктопное программное обеспечение (операционные системы Windows и Linux, офисные пакеты, компьютерные игры, и прочее) разрабатывается именно для x86-процессоров. Оно выполняется (за исключением «дурно воспитанных» программ) на любом x86-процессоре, независимо от того, кто его произвел. Поэтому вместо ориентированных на разработчика изначальной архитектуры терминов «Intel-совместимый» или «Pentium-совместимый», стали употреблять нейтральное название: «x86-совместимый процессор», «процессор с архитектурой x86». В данном случае под «архитектурой» понимается совместимость с определённым набором команд, то есть, можно сказать, «архитектура процессора с точки зрения программиста». Есть и другая трактовка того же термина.

Архитектура как характеристика семейства процесcоров

«Железячники» - люди, работающие в основном не с программным обеспечением, а с аппаратным, под «архитектурой» понимают несколько другое (правда, более корректно то, что они называют «архитектурой», называется «микроархитектурой», но де-факто приставку «микро» частенько опускают). Для них «архитектура CPU» - это некий набор свойств, присущий целому семейству процессоров, как правило, выпускаемому в течение многих лет (иначе говоря - «внутренняя конструкция», «организация» этих процессоров). Так, например, любой специалист по x86 CPU вам скажет, что процессор с ALU, работающими на удвоенной частоте, QDR-шиной, Trace cache, и, возможно, поддержкой технологии Hyper-Threading - это «процессор архитектуры NetBurst» (не пугайтесь незнакомых терминов - все они будут разъяснены чуть позже). А процессоры Intel Pentium Pro, Pentium II и Pentium III - это «архитектура P6». Таким образом, понятие «архитектуры» применительно к процессорам несколько двойственно: под ним может пониматься как совместимость с неким единым набором команд, так и совокупность аппаратных решений, присущих определённой достаточно широкой группе процессоров. Разумеется, такой дуализм одного из основополагающих понятий не очень удобен, однако так уж сложилось, и вряд ли в ближайшее время что-то поменяется…

64-битные расширения классической x86 (IA32) архитектуры

Не так давно оба ведущих производителя x86 CPU анонсировали две практически идентичных* технологии (впрочем, AMD предпочитает называть это архитектурой), благодаря которым классические x86 (IA32) CPU получили статус 64-битных. В случае с AMD данная технология получила наименование «AMD64» (64-битная архитектура AMD), в случае с Intel - «EM64T» (расширенная 64-битная технология работы с памятью). Также почтенные аксакалы, знакомые с историей вопроса, иногда употребляют наименование «x86-64» - как общее обозначение всех 64-битных расширений архитектуры x86, не привязанное к зарегистрированным торговым маркам какого-либо производителя. Де-факто, употребление одного из трёх, приведенных выше, наименований, зависит больше от личных предпочтений употребляющего, чем от фактических различий - ибо различия между AMD64 и EM64T умещаются на кончике очень тонкой иглы. К тому же, сама AMD ввела «фирменное» наименование «AMD64» лишь незадолго до анонса собственных процессоров на основе данной архитектуры, а до этого совершенно спокойно употребляла в собственных документах более нейтральное «x86-64». Однако так или иначе, всё сводится к одному: некоторые внутренние регистры процессоров стали вместо 32-битных 64-битными, 32-битные команды x86-кода получили свои 64-битные аналоги, кроме того, объём адресуемой памяти (включая не только физическую, но и виртуальную) многократно увеличился (за счёт того, что адрес приобрёл вместо 32-битного 64-битный формат). Количество маркетинговых спекуляций на тему «64-битности» превысило все разумные пределы, поэтому нам следует рассмотреть достоинства данного нововведения особенно пристально. Итак: что же на самом деле изменилось, а что - нет?

* - Доводы о том, что Intel, дескать, «нагло скопировала EM64T с AMD64» не выдерживают никакой критики. И вовсе не потому, что это не так - а потому, что вовсе не «нагло». Есть такое понятие: «кросс-лицензионное соглашение». Если таковое соглашение имеет место быть, это означает, что все разработки одной компании в определённой области, становятся автоматически доступными другой, равно как и разработки другой автоматически становятся доступны первой. Intel воспользовалась кросс-лицензированием для разработки EM64T, взяв за основу AMD64 (чего никто никогда не отрицал). AMD воспользовалась тем же соглашением для введения в свои процессоры поддержки наборов дополнительных инструкций SSE2 и SSE3, разработанных Intel. И ничего в этом постыдного нет: раз договорились «делиться» разработками - значит, надо делиться.

Что не изменилось? В первую очередь - быстродействие процессоров. Вопиющей глупостью будет считать, что один и тот же процессор при переходе из привычного 32-битного в 64-битный режим (а 32-битный режим все нынешние x86 CPU поддерживают в обязательном порядке) станет работать в 2 раза быстрее. Разумеется, в некоторых случаях некое ускорение от использования 64-битной целочисленной арифметики может присутствовать - но количество этих случаев сильно ограничено, и большинства современного пользовательского программного обеспечения они никак не касаются. Кстати: а почему мы употребили термин «64-битная целочисленная арифметика»? А потому, что блоки операций с плавающей точкой (см. ниже) во всех x86-процессорах уже давным-давно не 32-битные. И даже не 64-битные. Классический x87 FPU (см. ниже), окончательно ставший частью CPU ещё во времена старого доброго 32-битного Intel Pentium - уже был 80-битным . Операнды команд SSE и SSE2/3 - и вовсе 128-битные! В этом плане архитектура x86 достаточно парадоксальна: при всём притом, что формально процессоры данной архитектуры достаточно долгое время оставались 32-битными - разрядность тех блоков, где «бо льшая битность» была реально необходима - наращивалась совершенно независимо от остальных. Например, процессоры AMD Athlon XP и Intel Pentium 4 «Northwood» совмещали в себе блоки, работающие с 32-битными, 80-битными, и 128-битными операндами. 32-битными оставались лишь основной набор команд (унаследованный от первого процессора архитектуры IA32 - Intel 386) и адресация памяти (максимум 4 гигабайта, если не считать «извращений» типа Intel PAE).

Таким образом, то, что процессоры AMD и Intel стали «формально 64-битными», на практике принесло нам лишь три усовершенствования: появление команд для работы с 64-битными целыми числами, увеличение количества и/или разрядности регистров, и увеличение максимального объёма адресуемой памяти. Заметим: реальной пользы этих нововведений (особенно третьего!) никто не отрицает. Равно как никто не отрицает заслуг компании AMD в продвижении идеи «осовременивания» (за счёт введения 64-битности) x86-процессоров. Мы лишь хотим предостеречь от чрезмерных ожиданий: не стоит надеяться на то, что компьютер, покупавшийся «в ценовом классе ВАЗа», от установки 64-битного программного обеспечения станет «лихим Мерседесом». Чудес на свете не бывает…

Процессорное ядро

Различия между ядрами одной микроархитектуры

«Процессорное ядро» (как правило, для краткости его называют просто «ядро») - это конкретное воплощение [микро]архитектуры (т.е. «архитектуры в аппаратном смысле этого слова»), являющееся стандартом для целой серии процессоров. Например, 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 байт в секунду. Вопрос: даже если принять, что одна команда занимает не более одного байта, а данных у нас нет совсем, с какой скоростью будет исполняться программа в такой системе? Правильно: не более 1000 команд в секунду, и производительность CPU тут совершенно ни при чём: мы будем ограничены не ей, а скоростью поступления команд в процессор. Таким образом, следует понимать: невозможно непрерывно наращивать одну только частоту ядра, не ускоряя одновременно подсистему памяти, так как в этом случае начиная с определённого этапа, увеличение частоты CPU перестанет сказываться на увеличении быстродействия системы в целом.

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

Раньше, когда небо было голубее, пиво - вкуснее, а девушки - красивее, процессоры называли просто: имя производителя + название модельного ряда + частота. Например: «AMD K6-2 450 MHz». В настоящее время уже оба основных производителя от этой традиции отошли, и вместо частоты употребляют какие-то непонятные циферки, обозначающие невесть что. Краткому объяснению того, что же на самом деле эти циферки обозначают, и посвящены следующие два раздела.

Рейтинги от AMD

Причина, по которой компания AMD «изъяла» частоту из наименования своих процессоров, и заменила её некой абстрактной цифрой - общеизвестна: после появления процессора Intel Pentium 4, который работает на очень высоких частотах, процессоры AMD рядом с ним стали «плохо выглядеть на витрине» - покупатель не верил, что CPU с частотой, например, 1500 МГц, может обогнать CPU с частотой 2000 МГц. Поэтому частоту в наименовании заменили рейтингом. Формальная («де-юре», так сказать) трактовка этого рейтинга в устах AMD в разные времена звучала немного по-разному, но ни разу не прозвучала в том виде, в каком её воспринимали пользователи: процессор AMD с неким рейтингом, должен быть как минимум не медленнее процессора Intel Pentium 4 с соответствующей данному рейтингу частотой. Между тем, ни для кого не являлось особенным секретом, что именно такая трактовка и являлась конечной целью введения рейтинга. В общем, все всё прекрасно понимали, но AMD старательно делала вид, что она тут ни при чём:). Пенять ей за это не стоит: в конкурентной борьбе применяются совсем другие правила, чем в рыцарских поединках. Тем более что результаты независимых тестов демонстрировали: в целом, рейтинги своим процессорам AMD назначает достаточно справедливые. Собственно, именно до тех пор, пока это так - вряд ли имеет смысл протестовать против использования рейтинга. Правда, остаётся открытым один вопрос: а к чему же (нас интересует, понятное дело, состояние де-факто, а не разъяснения маркетингового отдела) будет привязан рейтинг процессоров AMD чуть позже, когда вместо Pentium 4 Intel начнёт выпускать какой-нибудь другой процессор?

Processor Number от Intel

Что нужно запомнить сразу: Processor Number (далее PN) у процессоров Intel - это не рейтинг. Не рейтинг производительности, и не рейтинг чего-либо другого. Фактически, это просто «артикул», элемент строчки в складской ведомости, единственная задача которого - сделать так, чтобы строчка, обозначающая один процессор, отличалась от строчки, обозначающей другой. В рамках серии (первая цифра PN), две остальные цифры, в принципе, кое о чём могут сказать, но, учитывая наличие таблиц, в которых приведено полное соответствие между PN и реальными параметрами, мы не видим особого смысла в том, чтобы заучивать какие-то промежуточные соответствия. Мотивация, которой руководствовалась Intel, вводя PN (вместо опять-таки указания частоты CPU) - более сложная, чем у AMD. Необходимость введения PN (как её объясняет сама Intel) связана, прежде всего, с тем, что два основных конкурента по-разному подходят к вопросу об уникальности наименования CPU. Например, у AMD название «Athlon 64 3200+» может обозначать сразу четыре процессора с несколько различными техническими характеристиками (но одинаковым «рейтингом»). Intel придерживается мнения, что наименование процессора должно быть уникальным, в связи с чем ранее компании приходилось «изворачиваться», добавляя к значению частоты в наименовании различные буквы, и это приводило к путанице. По идее, PN должен был эту путаницу устранить. Трудно сказать, была ли достигнута поставленная цель: всё равно номенклатура процессоров Intel осталась достаточно сложной. С другой стороны, это неизбежно, так как ассортимент продуктов уж больно велик. Однако независимо от всего прочего, одного эффекта де-факто добиться точно удалось: теперь только разбирающиеся в вопросе специалисты могут по названию процессора быстро и точно «по памяти» сказать, что он собой представляет, и какова будет его производительность в сравнении с другими CPU. Насколько это хорошо? Сложно сказать. Мы предпочтём воздержаться от комментариев.

Измерение скорости «в мегагерцах» - как это возможно?

Никак это невозможно, потому что скорость не измеряется в мегагерцах, как не измеряется расстояние в килограммах. Однако господа маркетологи давно уже поняли, что в словесном поединке между физиком и психологом побеждает всегда последний - причём независимо от того, кто на самом деле прав. Поэтому мы и читаем про «сверхбыструю 1066 MHz FSB», мучительно пытаясь понять, как скорость может измеряться с помощью частоты. На самом деле, раз уж прижилась такая извращённая тенденция, нужно просто чётко представлять себе, что имеется в виду. А имеется в виду следующее: если мы «закрепим» ширину шины на N битах - то её пропускная способность действительно будет зависеть от того, на какой частоте данная шина функционирует, и какое количество данных она способна передавать за такт. По обычной процессорной шине с «одинарной» скоростью (такая шина была, например, у процессора Intel Pentium III) за такт передаётся 64 бита, то есть 8 байт. Соответственно, если рабочая частота шины равна 100 МГц (100"000"000 тактов в секунду) - то скорость передачи данных будет равна 8 байт * 100"000"000 герц ~= 763 мегабайта в секунду (а если считать в «десятичных мегабайтах», в которых принято считать потоки данных , то ещё красивее - 800 мегабайт в секунду). Соответственно, если на тех же 100 мегагерцах работает DDR-шина, способная передавать за один такт удвоенный объём данных - скорость вырастет ровно вдвое. Поэтому, согласно парадоксальной логике господ маркетологов, данную шину следует именовать «200-мегагерцевой». А если это ещё и QDR (Quad Data Rate) шина - то она и вовсе «400-мегагерцевая» получается, так как за один такт передаёт четыре пакета данных. Хотя реальная частота работы у всех трёх вышеописанных шин одинаковая - 100 мегагерц. Вот так «мегагерцы» и стали синонимом скорости.

Таким образом, QDR-шина (с «учетверённой» скоростью), работающая на реальной частоте 266 мегагерц, волшебным образом оказывается у нас «1066-мегагерцевой». Цифра «1066» в данном случае олицетворяет то, что её пропускная способность ровно в 4 раза больше «односкоростной» шины, работающей на той же самой частоте. Вы ещё не запутались?.. Привыкайте! Это вам не какая-нибудь теория относительности, тут всё намного сложней и запущенней… Впрочем, самое главное здесь - выучить наизусть один простой принцип: если уж мы занимаемся таким извращением, как сравнение скорости двух шин между собой «в мегагерцах» - то они обязательно должны быть одинаковой ширины. Иначе получается как в одном форуме, где человек всерьёз доказывал, что пропускная способность AGP2X («133-мегагерцевая», но 32-битная шина) - выше, чем пропускная способность FSB у Pentium III 800 (реальная частота 100 МГц, ширина 64 бита ).

Пара слов о некоторых пикантных особенностях DDR и QDR протоколов

Как уже было сказано выше, в режиме DDR по шине за один такт передаётся удвоенный объём информации, а в режиме QDR - учетверённый. Правда, в документах, ориентированных больше на прославление достижений производителей, чем на объективное освещение реалий, почему-то всегда забывают указать одно маленькое «но»: режимы удвоенной и учетверённой скорости включаются только при пакетной передаче данных . То есть, если мы запросили из памяти парочку мегабайтов с адреса X по адрес Y - то да, эти два мегабайта будут переданы с удвоенной/учетверённой скоростью. А вот сам запрос на данные посылается по шине с «одинарной» скоростью - всегда ! Соответственно, если запросов у нас много, а размер пересылаемых данных не очень велик, то количество данных, которые «путешествуют» по шине с одинарной скоростью (а запрос - это тоже данные) будет почти равно количеству тех, которые передаются со скоростью удвоенной или учетверённой. Вроде бы нам никто открыто не врал, вроде бы DDR и QDR действительно работают, но… как говорится в одном старом анекдоте: «то ли он у кого-то украл шубу, то ли у него кто-то украл шубу, но что-то там с шубой не то…» ;) Процессор «крупноблочно»

Кэш

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

Во всех современных процессорах есть кэш (по-английски - cache). Кэш - это некая особенная разновидность памяти (основная особенность, кардинально отличающая кэш от ОЗУ - скорость работы), которая является своего рода «буфером» между контроллером памяти и процессором. Служит этот буфер для увеличения скорости работы с ОЗУ. Каким образом? Сейчас попытаемся объяснить. При этом мы решили отказаться от попахивающих детским садом сравнений, которые частенько встречаются в популяризаторской литературе на процессорную тематику (бассейны, соединённые трубами разного диаметра, и т.д. и т.п.). Всё-таки человек, который дочитал статью до этого места, и не заснул - наверное, способен выдержать и «переварить» чисто техническое объяснение, без бассейнов, кошечек и одуванчиков.

Итак, представим, что у нас есть много сравнительно медленной памяти (пусть это будет ОЗУ размером 10"000"000 байт) и относительно мало очень быстрой (пусть это будет кэш размером всего 1024 байта). Как нам с помощью этого несчастного килобайта увеличить скорость работы со всей памятью вообще? А вот здесь следует вспомнить, что данные в процессе работы программы, как правило, не бездумно перекидываются с места на место - они изменяются . Считали из памяти значение какой-то переменной, прибавили к нему какое-то число - записали обратно на то же место. Считали массив, отсортировали по возрастанию - опять-таки записали в память. То есть в один какой-то момент программа работает не со всей памятью целиком, а, как правило, с относительно маленьким её фрагментом. Какое решение напрашивается? Правильно: загрузить этот фрагмент в «быструю» память, обработать его там, а потом уже записать обратно в «медленную» (или просто удалить из кэша, если данные не изменялись). В общем случае, именно так и работает процессорный кэш: любая считываемая из памяти информация попадает не только в процессор, но и в кэш. И если эта же информация (тот же адрес в памяти) нужна снова, сначала процессор проверяет: а нет ли её в кэше? Если есть - информация берётся оттуда, и обращения к памяти не происходит вовсе. Аналогично с записью: информация, если её объём влезает в кэш - пишется именно туда, и только потом, когда процессор закончил операцию записи, и занялся выполнением других команд, данные, записанные в кэш, параллельно с работой процессорного ядра «потихоньку выгружаются» в ОЗУ.

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

А для того чтобы было понятно, насколько важен кэш, приведем простой пример: скорость обмена данными процессора Pentium 4 со своим кэшам более чем в 10 раз (!) превосходит скорость его работы с памятью. Фактически, в полную силу современные процессоры способны работать только с кэшем: как только они сталкиваются с необходимостью прочитать данные из памяти - все их хваленые мегагерцы начинают просто «греть воздух». Опять-таки, простой пример: выполнение простейшей инструкции процессором происходит за один такт, то есть за секунду он может выполнить такое количество простых инструкций, какова его частота (на самом деле еще больше, но это оставим на потом…). А вот время ожидания данных из памяти может в худшем случае составить более 200 тактов! Что делает процессор, пока он ждет нужных данных? А ничего он не делает. Просто стоит и ждет…

Многоуровневое кэширование

Специфика конструирования современных процессорных ядер привела к тому, что систему кэширования в подавляющем большинстве CPU приходится делать многоуровневой. Кэш первого уровня (самый «близкий» к ядру) традиционно разделяется на две (как правило, равные) половины: кэш инструкций (L1I) и кэш данных (L1D). Это разделение предусматривается так называемой «гарвардской архитектурой» процессора, которая по состоянию на сегодня является самой популярной теоретической разработкой для построения современных CPU. В L1I, соответственно, аккумулируются только команды (с ним работает декодер, см. ниже), а в L1D - только данные (они впоследствии, как правило, попадают во внутренние регистры процессора). «Над L1» стоит кэш второго уровня - L2. Он, как правило, больше по объёму, и является уже «смешанным» - там располагаются и команды, и данные. L3 (кэш третьего уровня), как правило, полностью повторяет структуру L2, и в современных x86 CPU встречается редко. Чаще всего, L3 - это плод компромисса: за счёт использование более медленной и узкой шины, его можно сделать очень большим, но при этом скорость L3 всё равно остаётся более высокой, чем скорость памяти (хотя и не такой высокой, как у L2-кэша). Тем не менее, алгоритм работы с многоуровневым кэшем в общих чертах не отличается от алгоритма работы с одноуровневым, просто добавляются лишние итерации: сначала информация ищется в L1, если её там нет - в L2, потом - в L3, и уже потом, если ни на одном уровне кэша она не найдена - идёт обращение к основной памяти (ОЗУ).

Декодер

На самом деле, исполнительные блоки всех современных десктопных x86-процессоров… вовсе не работают с кодом в стандарте x86. У каждого процессора есть своя, «внутренняя» система команд, не имеющая ничего общего с теми командами (тем самым «кодом»), которые поступают извне. В общем случае, команды, исполняемые ядром - намного проще, «примитивнее», чем команды стандарта x86. Именно для того, чтобы процессор «внешне выглядел» как x86 CPU, и существует такой блок как декодер: он отвечает за преобразование «внешнего» x86-кода во «внутренние» команды, исполняемые ядром (при этом достаточно часто одна команда x86-кода преобразуется в несколько более простых «внутренних»). Декодер является очень важной частью современного процессора: от его быстродействия зависит то, насколько постоянным будет поток команд, поступающих на исполняющие блоки. Ведь они неспособны работать с кодом x86, поэтому то, будут они что-то делать, или простаивать - во многом зависит от скорости работы декодера. Достаточно необычный способ ускорить процесс декодирования команд реализовала в процессорах архитектуры NetBurst компания Intel - см. ниже про Trace cache.

Исполняющие (функциональные) устройства

Пройдя через все уровни кэша и декодер, команды наконец-то попадают на те блоки, ради которых вся эта катавасия и устраивалась: исполняющие устройства. По сути, именно исполняющие устройства и являются единственно необходимым элементом процессора. Можно обойтись без кэша - скорость снизится, но программы работать будут. Можно обойтись без декодера - исполняющие устройства станут сложнее, но работать процессор будет. В конце концов, ранние процессоры архитектуры x86 (i8086, i80186, 286, 386, 486, Am5x86) - как-то без декодера обходились. Без исполняющих устройств обойтись невозможно, ибо именно они исполняют код программы. В самом первом приближении они традиционно делятся на две больших группы: арифметико-логические устройства (ALU) и блок вычислений с плавающей точкой (FPU).

Арифметико-логические устройства

ALU традиционно отвечают за два типа операций: арифметические действия (сложение, вычитание, умножение, деление) с целыми числами, логические операции с опять-таки целыми числами (логическое «и», логическое «или», «исключающее или», и тому подобные). Что, собственно, и следует из их названия. Блоков ALU в современных процессорах, как правило, несколько. Для чего - вы поймёте позже, прочитав раздел «Суперскалярность и внеочередное исполнение команд». Понятно, что ALU может исполнить только те команды, которые предназначены для него. Распределением команд, поступающих с декодера, по различным исполняющим устройствам, занимается специальный блок, но это уже, как говорится, «слишком сложные материи», и их вряд ли имеет смысл разъяснять в материале, который посвящен лишь поверхностному ознакомлению с основными принципами работы современных x86 CPU.

Блок вычислений с плавающей запятой*

FPU занимается выполнением команд, работающих с числами с плавающей запятой, кроме того, традиционно на него «вешают всех собак» в виде всяческих дополнительных наборов команд (MMX, 3DNow!, SSE, SSE2, SSE3…) - независимо от того, работают они с числами с плавающей запятой, или с целыми. Как и в случае с ALU, отдельных блоков в FPU может быть несколько, и они способны работать параллельно.

* - согласно традиций русской математической школы, мы называем FPU «блоком вычислений с плавающей запятой », хотя буквально его название (Floating Point Unit) переводится как «…с плавающей точкой» - согласно американскому стандарту написания таких чисел.

Регистры процессора

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

Особенности кэшей

Частота работы кэша и его шина

Во всех современных x86 CPU все уровни кэша работают на той же частоте, что и процессорное ядро, но это вовсе не всегда было так (данный вопрос уже поднимался выше). Однако скорость работы с кэшем зависит не только от частоты, но и от ширины шины, с помощью которой он соединён с процессорным ядром. Как вы (надеемся) помните из ранее прочитанного, скорость передачи данных является, по сути, произведением частоты работы шины (количества тактов в секунду) на количество байт, которые передаются по шине за один такт. Количество передаваемых за такт байтов можно увеличивать за счёт введения DDR и QDR (Double Data Rate и Quad Data Rate) протоколов - или просто за счёт увеличения ширины шины. В случае с кэшем более популярен второй вариант - не в последнюю очередь из-за «пикантных особенностей» DDR/QDR, описанных выше. Разумеется, минимально разумной шириной шины кэша является ширина внешней шины самого процессора, то есть, по состоянию на сегодняшний день - 64 бита. Именно так, в духе здорового минимализма, и поступает компания AMD: в её процессорах ширина шины L1 L2 равна 64 битам, но при этом она двунаправленная, то есть, способна работать одновременно на передачу и приём информации. В духе «здорового гигантизма» в очередной раз поступила компания Intel: в её процессорах, начиная с Pentium III «Coppermine», шина L1 L2 имеет ширину… 256 бит! По принципу «кашу маслом не испортишь», как говорится. Правда, шина эта однонаправленная, то есть в один момент времени работает либо только на передачу, либо только на приём. Споры о том, какой из подходов лучше (двунаправленная шина, но более узкая, или однонаправленная широкая) - продолжаются до сих пор… впрочем, равно как и множество других споров относительно технических решений, применяемых двумя основными конкурентами на рынке x86 CPU.

Эксклюзивный и не эксклюзивный кэш

Концепции эксклюзивного и не эксклюзивного кэширования очень просты: в случае не эксклюзивного кэша, информация на всех уровнях кэширования может дублироваться. Таким образом, L2 может содержать в себе данные, которые уже находятся в L1I и L1D, а L3 (если он есть) может содержать в себе полную копию всего содержимого L2 (и, соответственно, L1I и L1D). Эксклюзивный кэш, в отличие от не эксклюзивного, предусматривает чёткое разграничение: если информация содержится на каком-то уровне кэша - то на всех остальных она отсутствует. Плюс эксклюзивного кэша очевиден: общий размер кэшируемой информации в данном случае равен суммарному объёму кэшей всех уровней - в отличие от не эксклюзивного кэша, где размер кэшируемой информации (в худшем случае) равен объёму самого большого уровня кэша. Минус эксклюзивного кэша менее очевиден, но он есть: необходим специальный механизм, который следит за собственно «эксклюзивностью» (так, например, при удалении информации из L1-кэша, перед этим автоматически инициируется процесс её копирования в L2).

Не эксклюзивный кэш традиционно использует компания Intel, эксклюзивный (с момента появления процессоров Athlon на ядре Thunderbird) - компания AMD. В целом, мы наблюдаем здесь классическое противостояние между объёмом и скоростью: за счёт эксклюзивности, при одинаковых объёмах L1/L2 у AMD общий размер кэшируемой информации получается больше - но за счёт неё же он работает медленней (задержки, вызванные наличием механизма обеспечения эксклюзивности). Следует, наверное, заметить, что недостатки не эксклюзивного кэша компания Intel в последнее время компенсирует просто, тупо, но весомо: наращивая его объёмы. Для топовых процессоров данной компании стал уже почти что нормой L2-кэш объёмом 2 МБ - и AMD с её 128 КБ L1С+L1D и максимум 1 МБ L2 пока «не переплюнуть» эти 2 МБ даже за счёт эксклюзивности.

Кроме того, увеличивать общий объём кэшируемой информации за счёт введения эксклюзивной архитектуры кэша имеет смысл только в том случае, когда выигрыш в объёме получается достаточно больши м. Для компании AMD это актуально т.к. у её сегодняшних CPU суммарный объём L1D+L1I равен 128 КБ. Процессорам Intel, у которых объём L1D равен максимум 32 КБ, а L1I иногда имеет совсем другую структуру (см. про Trace cache), введение эксклюзивной архитектуры дало бы намного меньше пользы.

А ещё есть такое распространённое заблуждение, что архитектура кэша у CPU компании Intel «инклюзивная». На самом деле - нет. Именно НЕ эксклюзивная. Инклюзивная архитектура предусматривает, что на «нижнем» уровне кэша не может находиться ничего, чего нет на более «верхнем». Не эксклюзивная архитектура всего лишь допускает дублирование данных на разных уровнях.

Trace cache

Концепция Trace cache, состоит в том, чтобы сохранять в кэше инструкций первого уровня (L1I) не те команды, которые считаны из памяти, а уже декодированные последовательности (см. декодер). Таким образом, если некая x86-команда исполняется повторно, и она всё ещё находится в L1I, декодеру процессора не нужно снова преобразовывать её в последовательность команд «внутреннего кода», так как L1I содержит данную последовательность в уже декодированном виде. Концепция Trace cache очень удачно вписывается в общую концепцию архитектуры Intel NetBurst, ориентированную на создание процессоров с очень высокой частотой работы ядра. Однако полезность Trace cache для [относительно] менее высокочастотных CPU до сих пор находится под вопросом, так как сложность организации Trace cache становится сопоставима с задачей конструирования обычного быстрого декодера. Поэтому, отдавая должное оригинальности идеи, мы всё же сказали бы, что универсальным решением «на все случаи жизни» Trace cache считать нельзя.

Суперскалярность и внеочередное исполнение команд

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

1) A = B + C
2) Z = X + Y
3) K = A + Z

Легко заметить, что команды (1) и (2) совершенно независимы друг от друга - они не пересекаются ни по исходным данным (переменные B и C в первом случае, X и Y во втором), ни по месту размещения результата (переменная A в первом случае и Z во втором). Стало быть, если на данный момент у нас есть свободные исполняющие блоки в количестве более одного, данные команды можно распределить по ним, и выполнить одновременно, а не последовательно*. Таким образом, если принять время исполнения каждой команды равным N тактов процессора, то в классическом случае исполнение всей последовательности заняло бы N*3 тактов, а в случае с параллельным исполнением - всего N*2 тактов (так как команду (3) нельзя выполнить, не дождавшись результата исполнения двух предыдущих).

* - разумеется, степень параллелизма не бесконечна: команды могут быть выполнены параллельно только в том случае, когда на данный момент времени есть в наличии соответствующее количество свободных от работы блоков (ФУ), причём именно таких, которые «понимают» рассматриваемые команды . Самый простой пример: блок, относящийся к ALU, физически неспособен исполнить инструкцию, предназначенную для FPU. Обратное также верно.

На самом деле всё ещё сложнее. Так, если у нас имеется следующая последовательность:

1) A = B + C
2) K = A + M
3) Z = X + Y

То очередь исполнения команд процессором будет изменена! Так как команды (1) и (3) независимы друг от друга (ни по исходным данным, ни по месту размещения результата), они могут быть выполнены параллельно - и будут выполнены параллельно. А вот команда (2) будет выполнена после них (третьей) - поскольку для того, чтобы результат вычислений был корректен, необходимо, чтобы перед этим была выполнена команда (1). Именно поэтому обсуждаемый в данном разделе механизм и называется «внеочередным исполнением команд» (Out-of-Order Execution, или сокращённо «OoO»): в тех случаях, когда очерёдность выполнения никак не может сказаться на результате, команды отправляются на исполнение не в той последовательности, в которой они располагаются в коде программы, а в той, которая позволяет достичь максимального быстродействия.

Теперь вам должно стать окончательно понятно, зачем современным CPU такое количество однотипных исполняющих блоков: они обеспечивают возможность параллельного выполнения нескольких команд, которые в случае с «классическим» подходом к проектированию процессора пришлось бы выполнять в той последовательности, в которой они содержатся в исходном коде, одну за другой.

Процессоры, оснащённые механизмом параллельного исполнения нескольких подряд идущих команд, принято называть «суперскалярными». Однако не все суперскалярные процессоры поддерживают внеочередное исполнение. Так, в первом примере нам достаточно «простой суперскалярности» (выполнения двух последовательных команд одновременно) - а вот во втором примере без перестановки команд местами уже не обойтись, если мы хотим получить максимальное быстродействие. Все современные x86 CPU обладают обоими качествами: являются суперскалярными, и поддерживают внеочередное исполнение команд. В то же время, были в истории x86 и «простые суперскаляры», OoO не поддерживающие. Например, классическим десктопным x86-суперскаляром без OoO был Intel Pentium .

Справедливости ради, стоит заметить, что никаких заслуг в разработке концепций суперскалярности и OoO - нет ни у Intel, ни у AMD, ни у какого-либо иного (в том числе из ныне почивших) производителя x86 CPU. Первый суперскалярный компьютер, поддерживающий OoO, был разработан Сеймуром Креем (Seymour Cray) ещё в 60-х годах XX века. Для сравнения: Intel свой первый суперскалярный процессор (Pentium) выпустила в 1993 году, первый суперскаляр с OoO (Pentium Pro) - в 1995 году; первый суперскаляр с OoO от AMD (K5) увидел свет в 1996 году. Комментарии, как говорится, излишни…

Предварительное (опережающее) декодирование
и кэширование

Предсказание ветвлений

В любой более-менее сложной программе присутствуют команды условного перехода: «Если некое условие истинно - перейти к исполнению одного участка кода, если нет - другого». С точки зрения скорости выполнения кода программы современным процессором, поддерживающим внеочередное исполнение, любая команда условного перехода - воистину бич божий. Ведь до тех пор, пока не станет известно, какой участок кода после условного перехода окажется «актуальным» - его невозможно начать декодировать и исполнять (см. внеочередное исполнение). Для того чтобы как-то примирить концепцию внеочередного исполнения с командами условного перехода, предназначается специальный блок: блок предсказания ветвлений. Как понятно из его названия, занимается он, по сути, «пророчествами»: пытается предсказать, на какой участок кода укажет команда условного перехода, ещё до того, как она будет исполнена. В соответствии с указаниями «штатного внутриядерного пророка», процессором производятся вполне реальные действия: «напророченный» участок кода загружается в кэш (если он там отсутствует), и даже начинается декодирование и выполнение его команд. Причём среди выполняемых команд также могут содержаться инструкции условного перехода, и их результаты тоже предсказываются, что порождает целую цепочку из пока не проверенных предсказаний! Разумеется, если блок предсказания ветвлений ошибся, вся проделанная в соответствии с его предсказаниями работа просто аннулируется.

На самом деле, алгоритмы, по которым работает блок предсказания ветвлений, вовсе не являются шедеврами искусственного интеллекта. Преимущественно они просты… и тупы. Ибо чаще всего команда условного перехода встречается в циклах: некий счётчик принимает значение X, и после каждого прохождения цикла значение счётчика уменьшается на единицу. Соответственно, до тех пор, пока значение счётчика больше нуля - осуществляется переход на начало цикла, а после того, как он становится равным нулю - исполнение продолжается дальше. Блок предсказания ветвлений просто анализирует результат выполнения команды условного перехода, и считает, что если N раз подряд результатом стал переход на определённый адрес - то и в N+1 случае будет осуществлён переход туда же. Однако, несмотря на весь примитивизм, данная схема работает просто замечательно: например, в случае, если счётчик принимает значение 100, а «порог срабатывания» предсказателя ветвлений (N) равен двум переходам подряд на один и тот же адрес - легко заметить, что 97 переходов из 98 будут предсказаны правильно!

Разумеется, несмотря на достаточно высокую эффективность простых алгоритмов, механизмы предсказания ветвлений в современных CPU всё равно постоянно совершенствуются и усложняются - но тут уже речь идёт о борьбе за единицы процентов: например, за то, чтобы повысить эффективность работы блока предсказания ветвлений с 95 процентов до 97, или даже с 97% до 99…

Предвыборка данных

Блок предвыборки данных (Prefetch) очень похож по принципу своего действия на блок предсказания ветвлений - с той только разницей, что в данном случае речь идёт не о коде, а о данных. Общий принцип действия такой же: если встроенная схема анализа доступа к данным в ОЗУ решает, что к некоему участку памяти, ещё не загруженному в кэш, скоро будет осуществлён доступ - она даёт команду на загрузку данного участка памяти в кэш ещё до того, как он понадобится исполняемой программе. «Умно» (результативно) работающий блок предвыборки позволяет существенно сократить время доступа к нужным данным, и, соответственно, повысить скорость исполнения программы. К слову: грамотный Prefetch очень хорошо компенсирует высокую латентность подсистемы памяти, подгружая нужные данные в кэш, и тем самым, нивелируя задержки при доступе к ним, если бы они находились не в кэше, а в основном ОЗУ.

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

Алгоритмы Prefetch, как и алгоритмы блока предсказания ветвлений, тоже не блещут интеллектуальностью: как правило, данный блок стремится отследить, не считывается ли информация из памяти с определённым «шагом» (по адресам), и на основании этого анализа пытается предсказать, с какого адреса будут считываться данные в процессе дальнейшей работы программы. Впрочем, как и в случае с блоком предсказания ветвлений, простота алгоритма вовсе не означает низкую эффективность: в среднем, блок предвыборки данных чаще «попадает», чем ошибается (и это, как и в предыдущем случае, прежде всего связано с тем, что «массированное» чтение данных из памяти, как правило происходит в процессе исполнения различных циклов). Заключение

Я - тот кролик, который не может начать жевать траву до тех пор, пока
не поймёт во всех деталях, как происходит процесс фотосинтеза!
(изложение личной позиции одним из близких знакомых автора)

Вполне возможно, те чувства, которые у вас возникли после прочтения данной статьи, можно описать примерно следующим образом: «Вместо того чтобы на пальцах объяснить, какой процессор лучше - взяли и загрузили мне мозги кучей специфической информации, в которой ещё разбираться и разбираться, и конца-края не видно!» Вполне нормальная реакция: поверьте, мы вас хорошо понимаем. Скажем даже больше (и пусть с головы упадёт корона!): если вы думаете, что мы сами можем ответить на этот простецкий вопрос («какой процессор лучше?») - то вы очень сильно заблуждаетесь. Не можем. Для одних задач лучше один, для других - другой, а тут ещё цена разная, доступность, симпатии конкретного пользователя к определённым маркам… Не имеет задача однозначного решения. Если бы имела - наверняка кто-то бы его нашёл, и стал бы самым знаменитым обозревателем за всю историю независимых тестовых лабораторий.

Хотелось бы подчеркнуть ещё раз: даже полностью усвоив и осмыслив всю информацию, изложенную в данном материале - вы по-прежнему не сможете предсказать, какой из двух процессоров будет быстрее в ваших задачах, глядя только на их характеристики . Во-первых - потому, что далеко не все характеристики процессоров здесь рассмотрены. Во-вторых - потому, что есть и такие параметры CPU, которые в числовом виде могут быть представлены только с очень большой «натяжкой». Так для кого же (и для чего) всё это написано? В основном - для тех самых «кроликов», которые непременно желают знать, что происходит внутри тех устройств, которыми они пользуются ежедневно. Зачем? Может, они просто лучше себя чувствуют, когда знают, что вокруг них происходит? :)

В ближайших планах на расширение FAQ:

  1. Раздел, посвящённый многопроцессорным системам: объяснение понятия SMP, технология Hyper-Threading, N-процессорность, N-ядерность.
  2. Раздел, посвящённый физическим характеристикам CPU: типы корпусов, сокеты, энергопотребление, и т.п.

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

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

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

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

Как уже упоминалось выше, главное назначение кэш-памяти - это хранение данных, которые часто используются процессором. Кэш является буфером, в который загружаются данные, и, несмотря на его небольшой объём, (около 4-16 Мбайт) в современных процессорах, он дает значительный прирост производительности в любых приложениях.

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

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

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

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

Современные процессоры, оснащены кэшем, который состоит, зачастую из 2 -ух или 3-ёх уровней. Конечно же, бывают и исключения, но зачастую это именно так.

В общем, могут быть такие уровни: L1 (первый уровень), L2 (второй уровень), L3 (третий уровень). Теперь немного подробнее по каждому из них:

1. Кэш первого уровня (L1) - наиболее быстрый уровень кэш-памяти, который работает напрямую с ядром процессора, благодаря этому плотному взаимодействию, данный уровень обладает наименьшим временем доступа и работает на частотах близких процессору. Является буфером между процессором и кэш-памятью второго уровня.

Мы будем рассматривать объёмы на процессоре высокого уровня производительности Intel Core i7-3770K. Данный процессор оснащен 4х32 Кб кэш-памяти первого уровня 4 x 32 КБ = 128 Кб. (на каждое ядро по 32 КБ)

2. Кэш второго уровня (L2) - второй уровень более масштабный, нежели первый, но в результате, обладает меньшими «скоростными характеристиками». Соответственно, служит буфером между уровнем L1 и L3. Если обратиться снова к нашему примеру Core i7-3770 K, то здесь объём кэш-памяти L2 составляет 4х256 Кб = 1 Мб.

3. Кэш третьего уровня (L3) - третий уровень, опять же, более медленный, нежели два предыдущих. Но всё равно он гораздо быстрее, нежели оперативная память. Объём кэша L3 в i7-3770K составляет 8 Мбайт. Если два предыдущих уровня разделяются на каждое ядро, то данный уровень является общим для всего процессора. Показатель довольно солидный, но не заоблачный. Так как, к примеру, у процессоров Extreme-серии по типу i7-3960X, он равен 15Мб, а у некоторых новых процессоров Xeon, более 20.

Рассмотрим CISK и RISK архитектуру.

CISC -- концепция проектирования процессоров, которая характеризуется следующим набором свойств:

Нефиксированное значение длины команды;

Арифметические действия кодируются в одной команде;

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

Типичными представителями являются процессоры на основе команд x86 (исключая современные Intel Pentium 4, Pentium D, Core, AMD Athlon, Phenom, которые являются гибридными) и процессоры Motorola MC680x0.

Наиболее распространённая архитектура современных настольных, серверных и мобильных процессоров построена по архитектуре Intel x86 (или х86-64 в случае 64-разрядных процессоров). Формально, все х86-процессоры являлись CISC-процессорами, однако новые процессоры, начиная с Intel Pentium Pro, являются CISC-процессорами с RISC-ядром. Они непосредственно перед исполнением преобразуют CISC-инструкции процессоров x86 в более простой набор внутренних инструкций RISC.

В микропроцессор встраивается аппаратный транслятор, превращающий команды x86 в команды внутреннего RISC-процессора. При этом одна команда x86 может порождать несколько RISC-команд (в случае процессоров типа P6 -- до четырёх RISC-команд в большинстве случаев). Исполнение команд происходит на суперскалярном конвейере одновременно по несколько штук.

Это потребовалось для увеличения скорости обработки CISC-команд, так как известно, что любой CISC-процессор уступает RISC-процессорам по количеству выполняемых операций в секунду. В итоге, такой подход и позволил поднять производительность CPU.

Недостатки CISK архитектуры:

Высокая стоимость аппаратной части;

Сложности с распараллеливанием вычислений.

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

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

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

Наборы инструкций в более ранних архитектурах для облегчения ручного написания программ на языках ассемблеров или прямо в машинных кодах, а также для упрощения реализации компиляторов, выполняли как можно больше работы. Нередко в наборы включались инструкции для прямой поддержки конструкций языков высокого уровня. Другая особенность этих наборов -- большинство инструкций, как правило, допускали все возможные методы адресации -- к примеру, и операнды, и результат в арифметических операциях доступны не только в регистрах, но и через непосредственную адресацию, и прямо в памяти. Позднее такие архитектуры были названы CISC. Однако многие компиляторы не задействовали все возможности таких наборов инструкций, а на сложные методы адресации уходит много времени из-за дополнительных обращений к медленной памяти. Было показано, что такие функции лучше исполнять последовательностью более простых инструкций, если при этом процессор упрощается и в нём остаётся место для большего числа регистров, за счёт которых можно сократить количество обращений к памяти. В первых архитектурах, причисляемых к RISC, большинство инструкций для упрощения декодирования имеют одинаковую длину и похожую структуру, арифметические операции работают только с регистрами, а работа с памятью идёт через отдельные инструкции загрузки (load) и сохранения (store). Эти свойства и позволили лучше сбалансировать этапы конвейеризации, сделав конвейеры в RISC значительно более эффективными и позволив поднять тактовую частоту.

Характерные особенности RISK процессоров:

Фиксированная длина машинных инструкций (например, 32 бита) и простой формат команды.

Специализированные команды для операций с памятью -- чтения или записи. Операции вида «прочитать-изменить-записать» отсутствуют. Любые операции «изменить» выполняются только над содержимым регистров (т. н. архитектура load-and-store).

Большое количество регистров общего назначения (32 и более).

Отсутствие поддержки операций вида «изменить» над укороченными типами данных -- байт, 16-битное слово. Так, например, система команд DEC Alpha содержала только операции над 64-битными словами, и требовала разработки и последующего вызова процедур для выполнения операций над байтами, 16- и 32-битными словами.

Отсутствие микропрограмм внутри самого процессора. То, что в CISC-процессоре исполняется микропрограммами, в RISC-процессоре исполняется как обыкновенный (хотя и помещённый в специальное хранилище) машинный код, не отличающийся принципиально от кода ядра ОС и приложений. Так, например, обработка отказов страниц в DEC Alpha и интерпретация таблиц страниц содержалась в так называемом PALCode (Privileged Architecture Library), помещённом в ПЗУ. Заменой PALCode можно было превратить процессор Alpha из 64-битного в 32-битный, а также изменить порядок байтов в слове и формат входов таблиц страниц виртуальной памяти.

Рассмотрим конвейеры.

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

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

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

Считается, что впервые конвейерные вычисления были использованы либо в проекте ILLIAC II (англ. en:ILLIAC II), либо в проекте IBM Stretch (англ. en:IBM Stretch). Проект IBM Stretch предложил термины «получение» (англ. «Fetch»), «расшифровка» (англ. «Decode») и «выполнение» (англ. «Execute»), которые затем стали общеупотребимыми.

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

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

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

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

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

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

Преимущества и недостатки.

Конвейер помогает не во всех случаях. Существует несколько возможных минусов. Конвейер инструкций можно назвать «полностью конвейерным», если он может принимать новую инструкцию каждый машинный цикл (англ. en:clock cycle). Иначе в конвейер должны быть вынужденно вставлены задержки, которые выравняют конвейер, при этом ухудшат его производительность.

Преимущества:

Время цикла процессора уменьшается, таким образом увеличивая скорость обработки инструкций в большинстве случаев.

Некоторые комбинационные логические элементы, такие как сумматоры (англ. adders) или умножители (англ. multipliers) могут быть ускорены путем увеличения количества логических элементов. Использование конвейера может предотвратить ненужное наращивание количества элементов.

Недостатки:

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

Задержка инструкций в беcконвейерном процессоре слегка ниже, чем в конвейерном эквиваленте. Это происходит из-за того, что в конвейерный процессор должны быть добавлены дополнительные триггеры.

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

центральный графический процессор производитель

В процессе работы процессор обрабатывает данные, которые находятся в его регистрах, в оперативной памяти и внешних буферных устройствах процессора. Всего существует 3 информационных потока, обрабатываемых процессором:

  1. Данные подлежащие обработки

Совокупность разнообразных команд, которые может выполнить процессор над данными, образует систему команд процессора. Чем больше набор команд процессора, тем сложнее его архитектура, тем длиннее запись команд в байтах, тем дольше средняя продолжительность выполнения команд процессора. Процессоры Intelнасчитывают более 1000 команд и относятся к процессорам с расширенной системой команд (CISC).

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

    Используя вызовы функций операционной системы(прерывания DOS,APIWindowsи т.д.);

    Используя вызовы функций базовой системы ввода-вывода (BIOS);

    Непосредственно взаимодействуя с известным им «железом» - портами и памятью устройств или контроллеров интерфейсов.

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

Облик PC-совместимого компьютера в значительной степени определяется разработчиками из фирмMicrosoftиIntel. Для этих фирм стало уже традицией выпускать объемистый документ, диктующий разработчикам аппаратуры требования для получения желаемого логотипа “DesignedforMicrosoftWindows”.

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

В настоящее время выделяют следующие типы архитектур процессора:

    RISC – возможность выполнения меньшего количества команд, но с большой скоростью Команды состоящие из более простых команд, выполняются более производительно и с большой скоростью. Недостатки: сложные алгоритмы не всегда можно разбить на последовательность простых команд.

    CISC – процессоры универсальны и могут использоваться в любых компьютерных системах.

    MISC – промежуточный тип архитектуры. Имеет внутреннее ядро микропроцессора, выполненное поRISC-архитектуре и внешнее выполненное по структуреCISC.

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

Шины расширения является средствами подключения системного уровня: они позволяют адаптерам и контроллерам непосредственно использовать системные ресурсы PC– пространства памяти и ввода-вывода, прерывания, каналы прямого доступа к памяти. Как следствие, изготовителям модулей расширения приходится точно следовать протоколам шины, включая жесткие частотные и нагрузочные параметры, а также временные диаграммы. Отклонения приводят к несовместимости с некоторыми системными платами. Если при подключении к внешним интерфейсам это ведет к неработоспособности только самого устройства, то некорректное подключение к системной шине может блокировать работу всего компьютера. Следует также учитывать ограниченность ресурсовPC. Самые дефицитные из них – линии запросов прерываний, проблема прерываний, известная по шинеISA, так и не была радикально решена с переходом наPCI. Другой дефицит – каналы прямого доступа шиныISA, используемые и для прямого управления шиной, - в шинеPCIисчез. Доступное адресное пространство памяти и портов ввода-вывода, в котором было тесновато абонентам шиныISA, вPCIсущественно расширено. Проблемы распределения ресурсов на шинах решаются по-разному, но чаще всего применяется технологияPnP.

В современных настольных компьютерах основной шиной расширения является PCI, портAGPприсутствует практически повсеместно, шинаISA, несмотря на рекомендации отойти от нее, сохраняется как средство подключения старых карт расширений.

Выделяют 3 вида шин:

    Шина данных

    Адресная шина

    Шина команд

Шина данных – происходит копирование данных из оперативной памяти, в регистре процессора и наоборот. 64 разрядная.

Адресная шина – данные, которые передаются, трактуются как адреса ячеек оперативной памяти. С помощью этой шины процессор считывает адреса команд, которые надо выполнить, а также данные, которыми оперируют команды. 32-разрядная.

Шина команд (управления)– поставляет команды, которые выполняет процессором. Простые команды укладываются в один байт, более сложные в 2,3 байта. 32-разрядная.

Магистрально-модульный принцип построения компьютера

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

    ISA – позволяет связать между собой все устройства в системном блоке, а так же обеспечить подключение новых устройств через стандартные слоты. Пропускная способность составляет 5,5 Мб в секунду. Сейчас используют только для подключения внешних устройств, которые не требуют большой пропускной способности (звук, модемы).

    EISA - 32-битная шина средней производительности, применяемая в основном для подключения контроллеров дисков и адаптеров локальных сетей в серверах. В настоящее время вытеснена шинойPCI. Раньше применялась в серверных платформах, где необходимо устанавливать множество дополнительных плат расширения. В слотEISAможно устанавливать картыISA(но не наоборот). Пропускная способность до 32-Мб-в секунду.

    VLB – локальная шина, которая представляет собой соединение процессора с оперативной памятью в обход основной магистральной шины. Эта шина работает на более высокой частоте и позволяет увеличить скорость передачи данных. Эта шина имеет интерфейс для подключения видео адаптера необходимого для подключения монитора в состав вычислительного комплекса. Пропускная способность до 130 Мб в секунду. Рабочая тактовая частота – 50 МГц. Зависит от типа устройств подключаемых к этой шине.

    PCI – стандарт подключения внешних устройств который введен дляPentium. По своей сути это интерфейс - локальные шины с разъемами для подключения внешних компонентов вычислительных систем. Тактовая частота - до 166 МГц и обеспечивает передачу информации со скоростью 264 Мб в секунду независимо от количества подключенных устройств. С введением этого стандарта появилась возможность для подключения технологии “Plug&Play”: после физического подключения устройства обеспечивается автоматическая конфигурация в составе вычислительной системы.

    FSB – шина, которая используется для связи процессора с оперативной памятью компьютера, эта шина работает на частоте 133-МГц и выше. Пропускная способность до 800 Мб/сек. Частота работы шиныFSBявляется основным параметром, который указывается в спецификации материнской платы.

    AGP – специальный шинный интерфейс, который предназначен для подключения видео адаптера. Этот интерфейс необходим в современных вычислительных устройствах, потому что параметры шиныPCIне отвечают требованиям видеоадаптера по быстродействию. Пропускная способность 1066 Мб/сек. В отличие от шиныPCIдля портаAGPвозникают проблемы совместимости карт акселераторов с типом системной платы (чипсета) и процессора даже при формальном соответствии их параметров.

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

Конфигурирование шин расширения предполагает в основном настройку их временных параметров:

    Для шины PCIзадается частота синхронизации, кроме того, сCMOSSetupдля этой шины могут определяться некоторые её возможные режимы – конкурентные обращения, слежение за палитрами.

    Для порта AGPзадается частота, поддерживаемые режимы, а также апертурыAGP.

    Для шин ISAиPCIиногда настройкамиCMOSSetupприходится распределять системные ресурсы (главным образом, линии запросов прерываний).

    Для шины ISAкроме частоты (которая должна быть порядка 8 МГц) задают время восстановления для 8- и 16-битных обращений к памяти и вводу-выводу. Неустойчивая работа адаптеров может потребовать замедления шиныISA, но в настоящее время понижение её производительности не сильно отражается на производительности компьютера в целом.

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

В условиях использования единой технологии (и отсутствия практически применимых альтернатив, так как до массового внедрения квантовых процессоров еще далеко) единственным способом приспособить вычислительные чипы под те или иные задачи - стало изобретение различных архитектур ЦП.

Что такое архитектура процессора

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

За все время было создано много различных архитектур. Самые популярные из них - CISC, MISC, VLIW и RISC. Различия между ними касаются, главным образом, системы взаимодействия процессора с обрабатываемыми данными. Сейчас активно используются конвейерные архитектуры CISC и RISC.

Как работает архитектура процессора

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

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

В процессоре все аналогично: если на раннем этапе конвейера происходит ошибка - конвейер нужно перезапускать. Это замедляет производительность и приводит к пустым тратам энергии. Так как для компактных и мобильных устройств энергоэффективность очень важна - специально для них была создана архитектура RISC. От CISC она отличается упрощенным набором команд, которые принимает процессор, и укороченным конвейером. Такая особенность приводит к снижению производительности на фоне CISC (а компьютерные x86-процессоры Intel и AMD построены на ней), но позволяет минимизировать пустую трату энергии.

Архитектура процессоров ARM

Всевозможные MIPS, PowerPC, SPARC и прочие архитектуры типа RISC оставим IT-специалистам. Когда дело касается смартфонов - стоит детальнее уделить внимание ARM, Это - разновидность RISC архитектуры с коротким конвейером, которая является одной из самых распространенных и удачных. Именно ARM использует большинство производителей (Qualcomm, MediaTek, Apple, Samsung, Huawei-HiSilicon и другие). Только Intel в своих SoC атом используют x86-совместимые CISC ядра.

Особенностью ARM процессоров является использование короткого конвейера. Его длина составляет 3 и более этапов, что немного на фоне десятков стадий у CISC. За счет этого сбои в работе конвейера минимально сказываются на скорости обработки программ, максимально эффективно нагружая каждый такт. Поэтому именно ARM стала самой популярной архитектурой процессоров для смартфонов и планшетов.

Архитектура и микроархитектура процессора

Довольно часто в СМИ и интернете происходит путаница между понятиями архитектуры и микроархитектуры процессора. Чтобы внести ясность, следует установить отношение между данными терминами. Так вот, архитектура - это общий принцип устройства и работы процессора, а микроархитектура - всего лишь один из вариантов ее реализации, имеющий свои особенности, но сохранающий совместимость с базовой архитектурой.

Виды микроархитектур ARM для смартфонов

Большинство чипсетов для смартфонов содержат процессоры, созданные на ARM, а именно - микроархитектурах семейства Cortex и других. Список актуальных версий и их отличия приведены ниже.

Возможно вам будет интересно:

mobcompany.info

Архитектура процессора (общие вопросы и строение)

В первую очередь-что нам говорит Википедия о Пентиум 3? Intel Pentium III (в русской разговорной речи - Интел Пентиум три) - x86-совместимый микропроцессор архитектуры Intel P6, анонсированный 26 февраля 1999 года. Ядро Pentium III представляет собой модифицированное ядро Deschutes (которое использовалось в процессорах Pentium II). По сравнению с предшественником расширен набор команд (добавлен набор инструкций SSE) и оптимизирована работа с памятью. Это позволило повысить производительность как в новых приложениях, использующих расширения SSE, так и в существующих (за счёт возросшей скорости работы с памятью). Также был введён 64-битный серийный номер, уникальный для каждого процессора.

Вопрос: Архитектура процессора - что это? Ответ: Термин «архитектура процессора» в настоящее время не имеет однозначного толкования. С точки зрения программистов, под архитектурой процессора подразумевается его способность исполнять определенный набор машинных кодов. Большинство современных десктопных CPU относятся к семейству x86, или Intel-совместимых процессоров архитектуры IA32 (архитектура 32-битных процессоров Intel). Ее основа была заложена компанией Intel в процессоре i80386, однако в последующих поколениях процессоров она была дополнена и расширена как самой Intel (введены новые наборы команд MMX, SSE, SSE2 и SSE3), так и сторонними производителями (наборы команд EMMX, 3DNow! и Extended 3DNow!, разработанные компанией AMD). Однако разработчики компьютерного железа вкладывают в понятие «архитектура процессора» (иногда, чтобы окончательно не запутаться, используется термин «микроархитектура») несколько иной смысл. С их точки зрения, архитектура процессора отражает основные принципы внутренней организации конкретных семейств процессоров. Например, архитектура процессоров Intel Pentium обозначалась как Р5, процессоров Pentium II и Pentium III - Р6, а популярные в недавнем прошлом Pentium 4 относились к архитектуре NetBurst. После того, как компания Intel закрыла архитектуру Р5 для сторонних производителей, ее основной конкурент - компания AMD была вынуждена разработать собственную архитектуру - К7 для процессоров Athlon и Athlon XP, и К8 для Athlon 64.

Вопрос: Какие процессоры лучше, 64-битные или 32-битные? И почему? Ответ: Достаточно удачное 64-битное расширение классической 32-битной архитектуры IA32 было предложено в 2002 году компанией AMD (первоначально называлось x86-64, сейчас - AMD64) в процессорах семейства К8. Спустя некоторое время компанией Intel было предложено собственное обозначение - EM64T (Extended Memory 64-bit Technology). Но, независимо от названия, суть новой архитектуры одна и та же: разрядность основных внутренних регистров 64-битных процессоров удвоилась (с 32 до 64 бит), а 32-битные команды x86-кода получили 64-битные аналоги. Кроме того, за счет расширения разрядности шины адресов объем адресуемой процессором памяти существенно увеличился.

И… все. Так что те, кто ожидает от 64-битных CPU сколь-нибудь существенного прироста производительности, будут разочарованы - их производительность в подавляющем большинстве современных приложений (которые в массе своей заточены под IA32 и вряд ли в обозримом будущем будут перекомпилированы под AMD64/EM64T) практически та же, что и у старых добрых 32-битных процессоров. Весь потенциал 64-битной архитектуры может раскрыться лишь в отдаленном будущем, когда в массовых количествах появятся (а может, и не появятся) приложения, оптимизированные под новую архитектуру. В любом случае, наиболее эффективен переход на 64-бита будет для программ, работающих с базами данных, программ класса CAD/CAE, а также программ для работы с цифровым контентом.

Вопрос: Что такое процессорное ядро? Ответ: В рамках одной и той же архитектуры различные процессоры могут достаточно сильно отличаться друг от друга. И различия эти воплощаются в разнообразных процессорных ядрах, обладающих определенным набором строго обусловленных характеристик. Чаще всего эти отличия воплощаются в различных частотах системной шины (FSB), размерах кэша второго уровня, поддержке тех или иных новых систем команд или технологических процессах, по которым изготавливаются процессоры. Нередко смена ядра в одном и том же семействе процессоров влечет за собой замену процессорного разъема, из чего вытекают вопросы дальнейшей совместимости материнских плат. Однако в процессе совершенствования ядра, производителям приходится вносить в него незначительные изменения, которые не могут претендовать на «имя собственное». Такие изменения называются ревизиями ядра и, чаще всего, обозначаются цифробуквенными комбинациями. Однако в новых ревизиях одного и того же ядра могут встречаться достаточно заметные нововведения. Так, компания Intel ввела поддержку 64-битной архитектуры EM64T в отдельные процессоры семейства Pentium 4 именно в процессе изменения ревизии.

Вопрос: В чем заключается преимущество двухъядерных процессоров перед одноядерными? Ответ: Самым значимым событием 2005 года стало появление двухъядерных процессоров. К этому времени классические одноядерные CPU практически полностью исчерпали резервы роста производительности за счет повышения рабочей частоты. Камнем преткновения стало не только слишком высокое тепловыделение процессоров, работающих на высоких частотах, но и проблемы с их стабильностью. Так что экстенсивный путь развития процессоров на ближайшие годы был заказан, и их производителям волей-неволей пришлось осваивать новый, интенсивный путь повышения производительности продукции. Самой расторопной на рынке десктопных CPU, как всегда, оказалась Intel, первой анонсировавшая двухъядерные процессоры Intel Pentium D и Intel Extreme Edition. Впрочем, AMD с Athlon64 X2 отстала от конкурента буквально на считанные дни. Несомненным достоинством двухъядерников первого поколения, к которым относятся вышеназванные процессоры, является их полная совместимость с существующими системными платами (естественно, достаточно современными, на которых придется только обновить BIOS). Второе поколение двухъядерных процессоров, в частности, Intel Core 2 Duo, «требует» специально разработанных для них чипсетов и со старыми материнскими платами не работает.

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

Впрочем, если сегодня стоит вопрос выбора процессора для игрового ПК среднего или верхнего ценового диапазона, то, в любом случае, лучше предпочесть двухъядерный, а то и 4-ядерный процессор чуть более высокочастотному одноядерному аналогу, так как рынок неуклонно движется в сторону мультиядерных систем и оптимизированных параллельных вычислений. Такая тенденция будет господствующей в ближайшие годы, так что доля ПО, оптимизированного под несколько ядер, будет неуклонно возрастать, и очень скоро может наступить момент, когда мультиядерность станет насущной необходимостью.

Вопрос: Что такое кэш? Ответ: Во всех современных процессорах имеется кэш (по-английски - cache) - массив сверхскоростной оперативной памяти, являющейся буфером между контроллером сравнительно медленной системной памяти и процессором. В этом буфере хранятся блоки данных, с которыми CPU работает в текущий момент, благодаря чему существенно уменьшается количество обращений процессора к чрезвычайно медленной (по сравнению со скоростью работы процессора) системной памяти. Тем самым заметно увеличивается общая производительность процессора.

При этом в современных процессорах кэш давно не является единым массивом памяти, как раньше, а разделен на несколько уровней. Наиболее быстрый, но относительно небольшой по объему кэш первого уровня (обозначаемый как L1), с которым работает ядро процессора, чаще всего делится на две половины - кэш инструкций и кэш данных. С кэшем L1 взаимодействует кэш второго уровня - L2, который, как правило, гораздо больше по объему и является смешанным, без разделения на кэш команд и кэш данных. Некоторые десктопные процессоры, по примеру серверных процессоров, также порой обзаводятся кэшем третьего уровня L3. Кэш L3 обычно еще больше по размеру, хотя и несколько медленнее, чем L2 (за счет того, что шина между L2 и L3 более узкая, чем шина между L1 и L2), однако его скорость, в любом случае, несоизмеримо выше, чем скорость системной памяти.

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

Вопрос: Что такое процессорная шина? Ответ: Процессорная (иначе - системная) шина, которую чаще всего называют FSB (Front Side Bus), представляет собой совокупность сигнальных линий, объединенных по своему назначению (данные, адреса, управление), которые имеют определенные электрические характеристики и протоколы передачи информации. Таким образом, FSB выступает в качестве магистрального канала между процессором (или процессорами) и всеми остальными устройствами в компьютере: памятью, видеокартой, жестким диском и так далее. Непосредственно к системной шине подключен только CPU, остальные устройства подсоединяются к ней через специальные контроллеры, сосредоточенные в основном в северном мосте набора системной логики (чипсета) материнской платы. Хотя могут быть и исключения - так, в процессорах AMD семейства К8 контроллер памяти интегрирован непосредственно в процессор, обеспечивая, тем самым, гораздо более эффективный интерфейс память-CPU, чем решения от Intel, сохраняющие верность классическим канонам организации внешнего интерфейса процессора. Основные параметры FSB некоторых процессоров приведены в табл

Процессор частота FSB, МГц Тип FSB Теоретическая пропускная способность FSB, Мб/с
Intel Pentium III 100/133 AGTL+ 800/1066
Intel Pentium 4 100/133/200 QPB 3200/4266/6400
Intel Pentium D 133/200 QPB 4266/6400
Intel Pentium 4 EE 200/266 QPB 6400/8533
Intel Core 133/166 QPB 4266/5333
Intel Core 2 200/266 QPB 6400/8533
AMD Athlon 100/133 EV6 1600/2133
AMD Athlon XP 133/166/200 EV6 2133/2666/3200
AMD Sempron 800 HyperTransport
AMD Athlon 64 800/1000 HyperTransport 6400/8000

Процессоры компании Intel используют системную шину QPB (Quad Pumped Bus), передающую данные четыре раза за такт, тогда как системная шина EV6 процессоров AMD Athlon и Athlon XP передает данные два раза за такт (Double Data Rate). В архитектуре AMD64, используемой компанией AMD в процессорах линеек Athlon 64/FX/Opteron, применен новый подход к организации интерфейса CPU - здесь вместо процессорной шины FSB и для сообщения с другими процессорами используются: высокоскоростная последовательная (пакетная) шина HyperTransport, построенная по схеме Peer-to-Peer (точка-точка), обеспечивающая высокую скорость обмена данными при сравнительно низкой латентности.

И наконец-то конкретика!

Процессы первого поколения этого семейства (Intel Pentium III 450 и Intel Pentium III 500) были анонсированы Intel в конце февраля 1999 года и имели следующие характеристики:

  • технология производства: 0,25 мкм;
  • ядро процессора: Katmai, разработанное на основе Deschutes (поздняя версия ядра процессоров Intel Pentium II) с добавленным SSE-конвейером для обработки 70 новых SSE-инструкций;
  • L1-кэш: объем - 32 Кбайт (16 Кбайт для данных плюс 16 Кбайт для инструкций);
  • L2-кэш: объем - 512 Кбайт, тактовая частота - половина тактовой частоты ядра, внешний (не интегрирован на одном кристалле с процессором, а выполнен на отдельных микросхемах, которые расположены на той же печатной плате, что и микросхема процессора), поддерживает ECC-механизм обнаружения и коррекции ошибок при обмене данными с ядром процессора; в терминологии Intel такой L2-кэш называют Discrete Cache;
  • частота системной шины: 100 МГц, поддерживается ECC;
  • напряжение питания ядра процессора: 2,0 В;
  • многопроцессорность: поддерживается до двух процессоров на одной системной шине;
  • идентификация: каждый процессор имеет уникальный 96-битный серийный номер, «прошитый» в нем во время изготовления, который может быть считан программными средствами;
  • в случае нежелания пользователя «разглашать» серийный номер своего процессора возможность считывания его серийного номера может быть заблокирована на уровне BIOS с помощью программы настройки BIOS материнской платы или же утилиты Processor Serial Number Control Utility физический разъем: Slot 1;
  • исполнение: S.E.C.C.- или S.E.C.C.2-картридж.

online-studies.ru

Архитектура современных процессоров

Введение

4. Виртуализация

6. Будущие технологии

Библиографический список

Введение

Процессор (или центральный процессор, ЦП) - это транзисторная микросхема, которая является главным вычислительным и управляющим элементом компьютера.

Английское название процессора - CPU (Central Processing Unit).

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

В первом процессоре компании Intel - i4004, выпущенном в 1971 году, на одном кристалле было 2300 транзисторов, а в процессоре Intel Pentium 4, выпущенном 14 апреля 2003 года, их уже 55 миллионов.Современные процессоры изготавливаются по 0,13-микронной технологии, т.е. толщина кристалла процессора, составляет 0,13 микрон. Для сравнения - толщина кристалла первого процессора Intel была 10 микрон.

Рисунок 1 – принципиальная схема процессора

Управляющий блок - управляет работой всех блоков процессора.

Арифметико-логический блок - выполняет арифметические и логические вычисления.

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

Блок декодировки - преобразует данные в двоичную систему.

Блок предварительной выборки - получает команду от устройства (клавиатура и т.д.) и запрашивает инструкции в системной памяти.

Кэш-память (или просто кэш) 1-го уровня - хранит часто использующиеся инструкции и данные.

Кэш-память 2-го уровня - хранит часто использующиеся данные.

Блок шины - служит для ввода и вывода информации.

Эта схема соответствует процессорам архитектуры P6. По этой архитектуре создавались процессоры с Pentium Pro до Pentium III. Процессоры Pentium 4 изготавливаются по новой архитектуре Intel® NetBurst.

В процессорах Pentium 4 кэш 1-го уровня поделен на две части - кэш данных и кэш команд.

Существует два типа тактовой частоты - внутренняя и внешняя.

Внутренняя тактовая частота - это тактовая частота, с которой происходит работа внутри процессора.

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

До 1992 года в процессорах внутренняя и внешняя частоты совпадали, а в 1992 году компания Intel представила процессор 80486DX2, в котором внутренняя и внешняя частоты были различны - внутренняя частота была в 2 раза больше внешней. Было выпущено два типа таких процессоров с частотами 25/50 МГц и 33/66 МГц, затем Intel выпустила процессор 80486DX4 с утроенной внутренней частотой (33/100 МГц).

С этого времени остальные компании-производители также стали выпускать процессоры с удвоенной внутренней частотой, а компания IBM стала выпускать процессоры с утроенной внутренней частотой (25/75 МГц, 33/100 МГц и 40/120 МГц).

В современных процессорах, например, при тактовой частоте процессора 3 ГГц, частота системной шины 800 МГц.

Для чего предназначены дополнительные наборы команд? В первую очередь - для увеличения быстродействия при выполнении некоторых операций. Одна команда из дополнительного набора, как правило, выполняет действие, для которого понадобилась бы небольшая программа, состоящая из команд основного набора. Опять-таки, как правило, одна команда выполняется процессором быстрее, чем заменяющая ее последовательность. Однако в 99% случаев, ничего такого, чего нельзя было бы сделать с помощью основных команд, с помощью команд из дополнительного набора сделать нельзя. Таким образом, упомянутая выше проверка программой поддержки дополнительных наборов команд процессором, должна выполнять очень простую функцию: если, например, процессор поддерживает SSE - значит, считать будем быстро и с помощью команд из набора SSE. Если нет - будем считать медленнее, с помощью команд из основного набора. Корректно написанная программа обязана действовать именно так. Впрочем, сейчас практически никто не проверяет у процессора наличие поддержки MMX, так как все CPU, вышедшие за последние 5 лет, этот набор поддерживают гарантированно. Для справки приведем таблицу, на которой обобщена информация о поддержке различных расширенных наборов команд различными десктопными (предназначенными для настольных ПК) процессорами.

Таблица 1

Сравнение основных наборов команд

* в зависимости от модификации

В 1970г. доктор Маршиан Эдвард Хофф с командой инженеров из Intelсконструировал первый микропроцессор. Во всяком случае, так принято считать – хотя на самом деле еще в 1968 году инженеры Рэй Холт и Стив Геллер создали подобную универсальную микросхему SLFдля бортового компьютера истребителя F-14. Первый процессор работал на частоте 750 кГц. Сегодняшние процессоры от Intelбыстрее своего прародителя более чем в десять тысяч раз

Тактовая частота – это то количество элементарных операций (тактов), которые процессор может выполнить в течение секунды. Еще недавно этот показатель был для пользователей не то, что самым важным – единственным значимым! Многие пользователи пытались «разогнать» свой процессор при помощи специальных программ. Впрочем, частота процессоров и безо всякого разгона возрастала в геометрической прогрессии – в полном соответствии с так называемым «законом Мура» (в свое время Гордон Мур предсказал, что каждые полтора года частота микропроцессоров будет удваиваться вместе с числом транзисторов на кристалле). Этот принцип успешно работал вплоть до 2004 г. – пока на пути инженеров Intelне встали законы физики. Ведь размеры транзисторов «ужимать» до бесконечности нельзя. Уже сегодня процессоры производятся по 65-наномикронной технологии (технология 65 нанометров), а толщина «подложки» транзисторов не превышает 1 нм (всего 5 атомов). В ближайшие годы размеры транзисторов могут сократиться до 22 нм, что близко к физическому пределу. Одновременно с уменьшением размеров транзисторов резко возрастает количество тепла, которое выделяет работающий процессор – например у последних моделей Pentiumтепловыделение составляет около 120 ватт (что соответствует двум бытовым электролампам)!

1. 8086: первый процессор для ПК

8086 стал первым процессором x86 - Intel к тому времени уже выпустила модели 4004, 8008, 8080 и 8085. Этот 16-битный процессор мог работать с 1 Мбайт памяти по внешней 20-битной адресной шине. Тактовая частота, выбранная IBM (4,77 МГц) была довольно низкой, и к концу своей карьеры процессор работал на 10 МГц. Первые ПК использовали производную процессора 8088, которая имела всего 8-битную внешнюю шину данных. Что интересно, системы управления в американских шаттлах используют процессоры 8086, и NASA пришлось в 2002 году покупать процессоры через eBay, поскольку Intel их больше не производила.

Таблица 2

Характеристики 8086

80286: 16 Мбайт памяти, но всё ещё 16 битов

Выпущенный в 1982 году, процессор 80286 был в 3,6 раза быстрее 8086 на той же тактовой частоте. Он мог работать с памятью объёмом до 16 Мбайт, но 286 всё ещё оставался 16-битным процессором. Он стал первым процессором x86, оснащённым диспетчером памяти (memory management unit, MMU), который позволял работать с виртуальной памятью. Подобно 8086, процессор не содержал блока работы с плавающей запятой (floating-point unit, FPU), но мог использовать чип-сопроцессор x87 (80287). Intel выпускала 80286 на максимальной тактовой частоте 12,5 МГц, хотя конкурентам удалось добиться 25 МГц.

Таблица 3

Характеристики 8026

386: 32-битный и с кэш-памятью

Intel 80836 стал первым процессором x86 с 32-битной архитектурой. Вышло несколько версий этого процессора. Две наиболее известные: 386 SX (Single-word eXternal), который использовал 16-битную шину данных, и 386 DX (Double-word eXternal) с 32-битной шиной данных. Можно отметить ещё две версии: SL, первый процессор x86 с поддержкой кэша (внешнего) и 386EX, который использовался в космической программе (например, телескоп "Хаббл" использует этот процессор).

Таблица 4

Характеристики 386

486: FPU и множители

Процессор 486 для многих стал знаковым, поскольку с него началось знакомство с компьютером целого поколения. На самом деле, знаменитый 486 DX2/66 долгое время считался минимальной конфигурацией для геймеров. Этот процессор, выпущенный в 1989 году, обладал рядом новых интересных функций, подобно встроенному на кристалл сопроцессору FPU, кэшу данных и впервые представил множитель. Сопроцессор x87 был встроен в линейку 486 DX (не SX). В процессор был интегрирован кэш первого уровня объёмом 8 кбайт (сначала со сквозной записью/write-through, затем с обратной записью/write-back с чуть более высокой производительностью). Существовала возможность добавления кэша L2 на материнскую плату (работал на частоте шины).

Второе поколение 486 процессоров обзавелось множителем CPU, поскольку процессор работал быстрее, чем FSB, появились версии DX2 (множитель 2x) и DX4 (множитель 3x). Ещё один анекдот: "487SX", продаваемый как FPU для 486SX, представлял собой, по сути, полноценный процессор 486DX, который отключал и заменял оригинальный CPU.

Таблица 5

Характеристики 486

У DX4 было 16 кбайт кэша и больше транзисторов - 1,6 млн. Этот процессор, изготавливаемый по 600-нм техпроцессу с площадью кристалла 76 мм², потреблял меньше энергии, чем оригинальный 486 (при напряжении 3,3 В).

Рассмотрим их на примере процессора IntelPentium1.

В июне 1989 года Винодом Дэмом (англ. Vinod Dahm) были сделаны первые наброски процессора под кодовым названием P5. В конце 1991 года была завершена разработка макета процессора, и инженеры смогли запустить на нём программное обеспечение. Начался этап оптимизации топологии и повышения эффективности работы. В феврале 1992 года проектирование в основном было завершено, началось всеобъемлющее тестирование опытной партии процессоров. В апреле 1992 года принято решение о начале промышленного производства, в качестве основной промышленной базы была выбрана орегонская фабрика № 5. Началось промышленное освоение производства и окончательная доводка технических характеристик.

Основные отличия от процессора 486:

а) Суперскалярная архитектура. Благодаря использованию суперскалярной архитектуры процессор может выполнять 2 команды за 1 такт. Такая возможность существует благодаря наличию двух конвейеров - u- и v-. u-конвейер - основной, выполняет все операции над целыми и вещественными числами; v-конвейер - вспомогательный, выполняет только простые операции над целыми и частично над вещественными. Чтобы старые программы (для 486) в полной мере использовали возможности такой архитектуры, необходимо было их перекомпилировать. Pentium - первый CISC-процессор, использующий многоконвейерную архитектуру.

б) 64-битная шина данных. Позволяет процессору Pentium за один шинный цикл обмениваться вдвое большим объёмом данных с оперативной памятью, чем 486 (при одинаковой тактовой частоте).

в) Механизм предсказания адресов ветвления. Применяется для сокращения времени простоя конвейеров, вызванного задержками выборки команд при изменении счетчика адреса во время выполнения команд ветвления. Для этого в процессоре используется буфер адреса ветвления BTB (Branch Target Buffer), использующий алгоритмы предсказания адресов ветвления.

г) Раздельное кэширование программного кода и данных. В процессорах Pentium используется кэш-память первого уровня (кэш L1) объёмом 16 Кб, разделённая на 2 сегмента: 8 Кб для данных и 8 Кб для инструкций. Это улучшает производительность и позволяет делать двойное кэширование доступным чаще, чем это было возможно раньше. Кроме того, изменён механизм кэширования.

д) Улучшенный блок вычислений с плавающей запятой (FPU).

е) Симметричная многопроцессорная работа (SMP).

3. Переход к двуядерным процессорам

Рисунок 2 – микрофотография одного из первых двуядерных процессоров

компьютер процессор одноядерный двуядерный

Первой двуядерные чипы для настольных ПК представила корпорация Intel - 11 апреля было официально объявлено о начале поставок процессора Pentium 4 Extreme Edition 840. AMD не заставила себя долго ждать и уже 21 апреля ознакомила публику с тремя серверными двуядерными процессорами Opteron, а также представила новую торговую марку - Athlon 64 X2, под которой уже 9 мая были официально презентованы двуядерные процессоры для настольных ПК.

Переход на двуядерную архитектуру обусловлен тем, что традиционные методы по увеличению производительности практически исчерпали себя. Из-за ряда технологических проблем темпы наращивания тактовых частот в последнее время заметно замедлились. К примеру, в последний год перед появлением двуядерных процессоров компания Intel смогла нарастить частоты своих CPU лишь на 400 МГц, а конкуренты от AMD ускорились всего на 200 МГц. Как видим, рост тактовых частот дается нелегко. А другие методы, такие как увеличение скорости шины и размера кэш-памяти, ощутимого прироста производительности не дают.

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

Что же представляет собой двуядерный процессор? На первый взгляд это просто два процессора, объединенных в общем корпусе. Но не все так просто. Во-первых, нужно различать термины «процессор» и «процессорное ядро». Во-вторых, существует проблема общих ресурсов, доступ к которым нужно распределять между двумя ядрами. Если же посмотреть с точки зрения программного обеспечения, то двуядерный процессор система рассматривает как два независимых. Понятно, что двуядерный процессор способен одновременно выполнять два потока инструкций, в то время как обычный CPU производит вычисления строго по очереди. До этого уже была произведена попытка разделить выполняемые инструкции - речь идет о технологии Intel Hyper-Threading. Вот только в ней два «виртуальных» процессора почти во всем разделяют между собой ресурсы одного «физического» процессора (кэши, конвейер, исполнительные устройства). Практически все ресурсы общие - и если они уже заняты одним из выполняющихся потоков, то второй будет вынужден ожидать их освобождения.

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

Полноценный двуядерный процессор - совсем другое дело. В этом случае система определяет действительно два «честных» процессорных ядра. И прирост производительности при этом составляет уже не 10-20% (средний показатель для процессора с технологией Hyper-Threading), а все 80-90% и даже больше (естественно, при использовании обоих ядер). В принципе, двуядерный процессор представляет собой SMP-систему (SMP - Symmetric MultiProcessing, симметричная многопроцессорная обработка; термин, обозначающий систему с несколькими равноправными процессорами). По сути своей он не отличается от обыкновенной двухпроцессорной системы, в которой установлено два независимых процессора. В результате мы получаем все преимущества двухпроцессорных систем без необходимости использования сложных и дорогих двухпроцессорных материнских плат.

Один из способов создать энергоэффективный процессор - это переход от одноядерной процессорной архитектуры к многоядерной. Дело в том, что многоядерные процессоры позволяют повышать производительность именно за счет увеличения IPC, то есть количества инструкций программного кода, обрабатываемых за каждый такт работы процессора. В идеале при переходе от одноядерной архитектуры процессора к двуядерной можно сохранить тот же уровень производительности, снизив тактовую частоту каждого из ядер почти вдвое. В реальности, конечно, все несколько сложнее - результат будет зависеть от используемого приложения и его оптимизации к двуядерному процессору. То есть, чтобы приложение могло одновременно задействовать несколько процессорных ядер, оно должно хорошо распараллеливаться. Если же программный код написан таким образом, что подразумевает только последовательное выполнение инструкций, от многоядерности проку не будет. Для того чтобы продемонстрировать, как именно масштабируется производительность многоядерного процессора в зависимости от оптимизации программного кода к многоядерной архитектуре, рассмотрим следующий пример. Имеется многоядерный процессор с количеством ядер равным n. Предположим, что на этом процессоре выполняется программа, включающая N инструкций программного кода, причем S инструкций этого кода может выполняться только последовательно друг за другом, а P (равное N – S) инструкций являются программно независимыми друг от друга и могут выполняться одновременно на всех ядрах процессора. Обозначим через s (равное S / N) - долю инструкций, выполняемых последовательно, а через p (равное 1 – s) - долю инструкций, выполняемых параллельно.

Рисунок 3 - Выполнение программного кода на одноядерном процессоре

В случае применения одноядерного процессора (рисунок 4) время, затрачиваемое на выполнение всего программного кода, составит:

t1 = N / IPS(3.1)

В случае использования n-ядерного процессора (рисунок 1) время, затрачиваемое на выполнение всего программного кода, окажется меньше за счет параллельного выполнения P команд на n ядрах процессора и составит:

Поскольку приростом производительности в данном случае можно считать сокращение времени выполнения программы при использовании многоядерного процессора по сравнению со временем выполнения той же программы при применении одноядерного процессора, то есть t1 / tn, получим, что прирост производительности составит:

Графическая зависимость прироста производительности от числа ядер процессора показана на рисунке 5.

Рисунок 4 - Выполнение программного кода на многоядерном процессоре

Как видно из приведенной формулы, прирост производительности в случае многоядерной архитектуры процессора в большой степени зависит от оптимизации приложения к многоядерной архитектуре, то есть от его способности распараллеливаться. К примеру, даже в случае, когда 90% программного кода распараллеливается на несколько исполнительных ядер, использование четырехъядерного процессора позволяет получить только трехкратный прирост производительности в сравнении с одноядерной архитектурой процессора.

Рисунок 5 - Зависимость прироста производительности от числа ядер процессора

Рассмотренный пример представляет собой идеальную ситуацию, но в реальности все несколько сложнее, тем не менее, основная идея остается неизменной: использование многоядерных процессоров требует внесения кардинальных изменений в программное обеспечение. До сих пор, обсуждая прирост производительности, который можно получить при переходе от одноядерной к многоядерной архитектуре, мы рассматривали только одно приложение. Тем не менее, многоядерные процессоры позволяют ощутить существенный прирост производительности при одновременной работе нескольких приложений. В идеальном случае каждое приложение может исполняться на отдельном ядре процессора независимо от других приложений. К примеру, можно параллельно конвертировать видеофайлы, играть в игры и т.п. Многоядерная архитектура процессоров позволяет одновременно решать две глобальные задачи: увеличивать производительность процессоров и одновременно создавать энергоэффективные процессоры. Конечно, многоядерная архитектура - это лишь один из рецептов создания высокопроизводительных энергоэффективных процессоров. Для создания действительно энергоэффективного многоядерного процессора необходимо, чтобы каждое его ядро было оптимизировано для многоядерной архитектуры и к тому же было энергоэффективным. К примеру, двухъядерные процессоры Intel, основанные на архитектуре NetBurst (семейство Intel Pentium D), позволяют лишь частично решить проблему повышения энергоэффективности. Дело в том, что микроархитектура каждого ядра процессора семейства Intel Pentium D оптимизирована под масштабирование тактовой частоты и не является энергоэффективной. Другим подходом к повышению производительности в рамках заданного энергопотребления является переход на принципиально иную микроархитектуру ядра. Отметим, что данный подход не противоречит идее многоядерности, а скорее дополняет ее.

4. Виртуализация

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

Программная виртуализация:

Динамическая трансляция - При динамической трансляции (бинарной трансляции) проблемные команды гостевой OC перехватываются гипервизором. После того как эти команды заменяются на безопасные, происходит возврат управления гостевой ОС. Паравиртуализация - техника виртуализации, при которой гостевые операционные системы подготавливаются для исполнения в виртуализированной среде, для чего их ядро незначительно модифицируется. Операционная система взаимодействует с программой Гипервизора, который предоставляет ей гостевой API, вместо использования напрямую таких ресурсов, как таблица страниц памяти. Метод паравиртуализации позволяет добиться более высокой производительности, чем метод динамической трансляции. Метод паравиртуализации применим лишь в том случае, если гостевые ОС имеют открытые исходные коды, которые можно модифицировать согласно лицензии.

Аппаратная виртуализация:

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

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

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

г) Гостевая система становится не привязана к архитектуре хостовой платформы и к реализации платформы виртуализации. Технология аппаратной виртуализации делает возможным запуск 64-битных гостевых систем на 32-битных хостовых системах (с 32-битными средами виртуализации на хостах).

Реализации:

IBMSystem370, VM/370 - 60-е года. На виртуальных системах IBM VM были отработаны идеи и технологии, во многом определившие архитектуры современных решений по виртуализации; VMware; Xen; KVM.

Технологии:

V86 mode - старая; Intel VT (VT-x) - Intel Virtualization Technology for x86; AMD Pacific.

5. Кратко о некоторых других технологиях

а) Intel Turbo Boost – при необходимости позволяет работающим ядрам повышать тактовую частоту (с шагом 133 МГц) до максимально возможной по тепловой защите. Неиспользуемые ядра могут программно переводиться в режим нулевого энергопотребления.

б) Технология Intel Smart Cache обеспечивает высокую производительность и эффективность кэш-памяти, оптимизирована для самых современных многопоточных игр.

в) Технология Intel QuickPath Interconnect разработана для повышения пропускной способности и снижения задержек в процессе обмена. С процессорами Extreme Edition она позволяет достигнуть суммарных скоростей передачи данных до 25,6 ГБ/с.

г) Технология Intel HD Boost значительно повышает производительность в мультимедийных задачах. Команды из наборов дополнительных инструкций выполняются за один тактовый цикл, позволяя достичь нового уровня эффективности с приложениями, оптимизированными для набора команд SSE4.

6. Будущие технологии

Оптические компьютеры - Процессоры, в которых вместо электрических сигналов обработке подвергаются потоки света (фотоны, а не электроны).

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

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

Библиографический список

Леонтьев, П.В. Новейший самоучитель работы на компьютере / П.В. Леонтьев М.: ОЛМА Медиа Групп, 2008. 528 с.

http://www.ixbt.com/cpu/x86-cpu-faq-2006.shtml

http://www.thg.ru/cpu/intel_cpu_history/index.html

http://ru.wikipedia.org/wiki/Pentium

http://rpnyamal.ru/?page_id=3

http://www.compress.ru/article.aspx?id=16962&iid=786

mirznanii.com

Архитектура микропроцессоров. Основные виды архитектур

Архитектура микропроцессоров.

Эта глава посвящена архитектурным особенностям микропроцессоров. В ней приведены общие сведения о микропроцессорах, рассматриваются принципы структурно – функциональной организации) типы данных, регистровая память, спо­собы адресации и система команд микропроцессоров. Излагаемый материал ил­люстрируется на простейших 8– и 16–разрядных процессорах.

Основные понятия. Микропроцессор - это программно–управляемое устройство в виде интегральной микросхемы (БИС или СБИС), предназначенное для обработки цифровой информации. Поскольку все современные микро­процессоры имеют интегральное исполнение, синонимом микропроцессора стал термин процессор.

Микроконтроллер - это специализированный процессор, предназначен­ный для реализации функций управления (control - управление).

Цифровой сигнальный процессор (Digital Signal Processor - DSP) - это специа­лизированный процессор, предназначенный для обработки цифровых сигналов.

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

Под организацией процессора понимают совокупность его узлов (устройств, блоков, модулей), связи между узлами и их функциональные характе­ристики. Организация определяет аппаратную организацию процессора, т. е. состав и взаимодействие его аппаратных средств. Выделяют два уровня организации:

● физическую организацию в виде принципиальной схемы;

● логическую организацию в виде структурно–функциональной схемы.

В дальнейшем рассматривается организация микропроцессоров на логиче­ском уровне, или структурно–функциональная организация процессоров.

Под архитектурой процессора будем понимать совокупность его программно–аппаратных средств, обеспечивающих обработку цифровой инфор­мации (выполнение программы), т. е. совокупность всех средств, доступных про­грамме (или пользователю). Это более общее понятие по сравнению с понятием организация включает в себя набор программно–доступных регистров и операци­онных устройств, систему основных команд и способов адресации, объем и орга­низацию адресуемой памяти, виды и способы обработки данных (обмен, преры­вания, примой доступ к памяти и др.). Например, современные 32–разрядные процессоры х86 с архитектурой IA–32 (Intel Architecture - 32 bit) имеют стандарт­ный набор регистров, общую систему основных команд, одинаковые способы организации и адресации памяти, защиты памяти и обслуживания прерываний. Отметим, что понятие архитектуры в большей степени характеризует свойства системы, чем устройства.

Основные виды архитектур.

По форматам используемых команд (инструкций) можно выделить:

● CISC–архитектуру, которая относится к процессорам (компьютерам) с полным набором команд (Complete Instruction Set Computer - CISC). Она реализова­на во многих типах микропроцессоров (например Pentium), выполняющих большой набор разноформатных команд с использованием многочисленных способов адресации.

Система команд процессоров с CISC–архитектурой может содержать не­сколько сотен команд разного формата (от 1 до 15 байт), или степени слож­ности, и использовать более 10 различных способов адресации, что позволя­ет программисту реализовать наиболее эффективные алгоритмы решения различных задач.

Развитие традиционных CISC–архитектур микропроцессоров по пути рас­ширения функциональных возможностей и снижения затрат на программиро­вание привело к увеличению числа команд в наборе и числа микрокоманд в команде. Следствием этого явилось усложнение интегральных схем и сни­жение быстродействия выполнения программ. Один из возможных путей уст­ранения указанных недостатков состоит в использовании сокращенного набо­ра команд, организация которого подчинена увеличению скоростей их выпол­нения;

● RISC–архитектуру, которая относится к процессорам (компьютерам) с сокра­щенным набором команд (Reduced instruction Set Computer - RISC). Появле­ние RISC–архитектуры продиктовано тем, что многие CISC–команды и спо­собы адресации используются достаточно редко. Основная особенность RISC–архитектуры проявляется в том, что система команд состоит из неболь­шого количества часто используемых команд одинакового формата, которые могут быть выполнены за один командный цикл (такт) центрального процес­сора. Более сложные, редко используемые команды реализуются на про­граммном уровне. Однако за счет значительного повышения скорости испол­нения команд средняя производительность RISC–процессоров может оказать­ся выше, чем у процессоров с CISC–архитектурой.

Большинство команд RISC–процессоров связано с операцией регистр–регистр. Для обращения к памяти оставлены наиболее простые с точки зре­ния временных затрат операции загрузки в регистры и записи в память.

Современные RISC–процессоры реализуют около 100 команд, имеющих фиксированный формат длиной 4 байта, и используют небольшое число наи­более простых способов адресации (регистровую, индексную и некоторые другие).

Для сокращения количества обращений к внешней оперативной памяти RISC–процессоры содержат десятки–сотни регистров общего назначения (РОН), тогда как в CISC–процессорах всего 8–16 регистров. Обращение к внешней памяти в RISC–процессорах используется только в операциях за­грузки данных в РОН или пересылки результатов из РОН в память. За счет со­кращения аппаратных средств, необходимых для декодирования и выполне­ния сложных команд, достигается существенное упрощение интегральных схем RISC–процессоров и снижение их стоимости. Кроме того, значительно повышается производительность. Благодаря указанным достоинствам во многих современных CISC–процессорах (последние модели Pentium и К7) ис­пользуется RISC–ядро. При этом сложные CISC–команды предварительно преобразуются в последовательность простых RISC–операций и быстро вы­полняются RISC–ядром;

● VLIW–архитектуру, которая относится к микропроцессорам с использованием очень длинных команд (Very Large Instruction Word - VLIW). Отдельные поля команды содержат коды, обеспечивающие выполнение различных операций. Одна VLIW–команда может выполнить сразу несколько операций одновремен­но в различных узлах микропроцессора. Формирование «длинных» VLIW–ko­манд производит соответствующий компилятор при трансляции программ, написанных на языке высокого уровня. VLIW–архитектура реализована в неко­торых типах современных микропроцессоров и является весьма перспектив­ной для создания нового поколения сверхвысокопроизводительных процес­соров.

По способу организации выборки команд и данных различа­ют два вида архитектур:

● принстонская архитектура, или архитектура фон–Неймана, особенностью которой является (рис. 2.1.1) использование:

Общей основной (оперативной) памяти для хранения программ и данных, что позволяет оперативно и эффективно перераспределять ее объем в за­висимости от решаемых задач в каждом конкретном случае применении микропроцессора;

Общей шины, по которой в процессор поступают команды и данные, а в опе­ративную память записываются результаты, что значительно упрощает отладку, тестирование и текущий контроль функционирования системы, повышает ее надежность. Чтобы отделить команду от данных, первым из памяти всегда поступает код выполняемой операции, а затем следуют данные. По умолчанию код операции загружается в регистр команд, а дан­ные - в блок регистров (рис. 2.1.1). Из–за ограниченного числа внешних выводов общая шина обычно работает в режиме временного мультиплек­сирования, т. е. противоположные направления обмена данными между микропроцессором, памятью или другими внешними устройствами разде­лены во времени.

Недостаток принстонской архитектуры - использование общей шины для пе­редачи команд и данных ограничивает производительность цифровой системы;

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

Недостатки гарвардской архитектуры: усложнение конструкции из–за ис­пользования отдельных шин для команд и данных; фиксированный объем па­мяти для команд и данных; увеличение общего объема памяти из–за невоз­можности ее оптимального перераспределения между командами и данными. Гарвардская архитектура получила широкое применение в микроконтрол­лерах - специализированных микропроцессорах для управления различными объектами, а также во внутренней структуре современных высокопроизводи­тельных микропроцессоров в кэш–памяти с раздельным хранением команд и данных. В то же время во внешней структуре большинства микропроцессор­ных систем реализуются принципы принстонской архитектуры.

Отметим, что архитектура микропроцессора тесно связана с его структурой. Реализация тех или иных архитектурных особенностей требует введении в струк­туру микропроцессора соответствующих устройств и обеспечения механизмов их совместного функционирования.

pue8.ru

Архитектура процессора

Технический университет Молдовы

РЕФЕРАТ ПО ПРОГРАММИРОВАНИЮ

ТЕМА: Память и архитектура процессора

Факультет CIM

Группа С - 092

Подготовил Плис Владимир.

Кишинёв 1999 г.

Введение.

1) Историческая ретроспектива.

2) Архитектурное развитие.

3) Процесс производства.

4) Программная совместимость.

5) Обзор процессоров.

Будущие разработки Intel.

Процессор, или более полно микропроцессор, а также часто называемый ЦПУ (CPU - central processing unit) является центральным компонентом компьютера. Это разум, который управляет, прямо или косвенно, всем происходящим внутри компьютера.

Когда фон Нейман впервые предложил хранить последовательность инструкций, так называемые программы, в той же памяти, что и данные, это была поистине новаторская идея. Опубликована она в "First Draft of a Report on the EDVAC" в 1945 году. Этот отчет описывал компьютер состоящим из четырех основных частей: центрального арифметического устройства, центрального управляющего устройства, памяти и средств ввода-вывода.

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

Историческая ретроспектива

Как известно, все процессоры персональных компьютеров основаны на оригинальном дизайне Intel. Первым применяемым в PC процессором был интеловский чип 8088. В это время Intel располагал выпущенным ранее более мощным процессором 8086. 8088 был выбран по соображениям экономии: его 8-битная шина данных допускала более дешевые системные платы, чем 16-битная у 8086. Также во время проектирования первых PC большинство доступных интерфейсных микросхем использовали 8-битный дизайн. Те первые процессоры даже не приближаются к мощи, достаточной для запуска современных приложений.

В таблице ниже приведены основные группы интеловских процессоров от первой генерации 8088/86 до шестого поколения Pentium Pro и Pentium II:

Третье поколение процессоров, основанных на Intel 80386SX и 80386DX, были первыми применяемыми в PC 32-битными процессорами. Основным отличием между ними было то, что 386SX был 32-разрядным только внутри, поскольку он общался с внешним миром по 16-разрядной шине. Это значит, что данные между процессором и остальным компьютером перемещались на вполовину меньшей скорости, чем у 486DX.

Четвертая генерация процессоров была также 32-разрядной. Однако все они предлагали ряд усовершенствований. Во-первых, был полностью пересмотрен весь дизайн 486 поколения, что само по себе удвоило скорость. Во-вторых, все они имели 8kb внутреннего кэша, прямо у процессорной логики. Такое кэширование передачи данных от основной памяти значило, что среднее ожидание процессора запросов к памяти на системной плате сократилось до 4%, поскольку, как правило, необходимая информация уже находилась в кэше.

Модель 486DX отличалась от 486SX только поставляемым внутри математическим сопроцессором. Этот отдельный процессор спроектирован для проведения операций над числами с плавающей точкой. Он мало применяется в каждодневных приложениях, но кардинально меняет производительность числовых таблиц, статистического анализа, систем проектирования и так далее.

Важной инновацией было удвоение частоты, введенное в 486DX2. Это значит что внутри процессор работает на удвоенной по отношению ко внешней электронике скоростью. Данные между процессором, внутренним кэшем и сопроцессором передаются на удвоенной скорости, приводя к сравнимой прибавке в производительности. 486DX4 развил эту технологию дальше, утраивая частоту до внутренних 75 или 100MHz, а также удвоив объем первичного кэша до 16kb.

Pentium, определив пятое поколение процессоров, значительно превзошел в производительности предшествующие 486 чипы благодаря нескольким архитектурным изменениям, включая удвоение ширины шины до 64 бит. P55C MMX сделал дальнейшие значительные усовершенствования, удвоив размер первичного кэша и расширив набор инструкций оптимизированными для мультимедиа приложений операциями.

Pentium Pro, появившись в 1995 году как наследник Pentium, был первым в шестом поколении процессоров и ввел несколько архитектурных особенностей, не встречавшихся ранее в мире PC. Pentium Pro стал первым массовым процессором, радикально изменившим способ выполнения инструкций переводом их в RISC-подобные микроинструкции и выполнением их в высокоразвитом внутреннем ядре. Он также замечателен значительно более производительным вторичным кэшем относительно всех прежних процессоров. Вместо использования базирующегося на системной плате кэша, работающего на скорости шины памяти, он использует интегрированный кэш второго уровня на своей собственной шине, работающей на полной частоте процессора, обычно в три раза быстрее кэша на Pentium-системах.

Следующий новый чип после Pentium Pro Intel представил спустя почти полтора года - появился Pentium II, давший очень большой эволюционный шаг от Pentium Pro. Это распалило спекуляции, что одна из основных целей Intel в производстве Pentium II был уход от трудностей в изготовлении дорогого интегрированного кэша второго уровня в Pentium Pro. Архитектурно Pentium II не очень отличается от Pentium Pro с подобным эмулирующим x86 ядром и большинством схожих особенностей.

Pentium II улучшил архитектуру Pentium Pro удвоением размера первичного кэша до 32kb, использованием специального кэша для увеличения эффективности 16-битной обработки, (Pentium Pro оптимизирован для 32-битных приложений, а с 16-битным кодом не обращается столь же хорошо) и увеличением размеров буферов записи. Однако о основной темой разговоров вокруг новых Pentium II была его компоновка. Интегрированный в Pentium Pro вторичный кэш, работающий на полной частоте процессора, был заменен в Pentium II на малую схему, содержащую процессор и 512kb вторичного кэша, работающего на половине частоты процессора. Собранные вместе, они заключены в специальный одностороний картридж (single-edge cartridge - SEC), предназначенный для вставления в 242-пиновый разъем (Socket 8) на нового стиля системных платах Pentium II.

Основная структура

Основные функциональные компоненты процессора

  • Ядро: Сердце современного процессора - исполняющий модуль. Pentium имеет два параллельных целочисленных потока, позволяющих читать, интерпретировать, выполнять и отправлять две инструкции одновременно.
  • Предсказатель ветвлений: Модуль предсказания ветвлений пытается угадать, какая последовательность будет выполняться каждый раз когда программа содержит условный переход, так чтобы устройства предварительной выборки и декодирования получали бы инструкции готовыми предварительно.
  • Блок плавающей точки. Третий выполняющий модуль внутри Pentium, выполняющий нецелочисленные вычисления
  • Первичный кэш: Pentium имеет два внутричиповых кэша по 8kb, по одному для данных и инструкций, которые намного быстрее большего внешнего вторичного кэша.
  • Шинный интерфейс: принимает смесь кода и данных в CPU, разделяет их до готовности к использованию, и вновь соединяет, отправляя наружу.

Все элементы процессора синхронизируются с использованием частоты часов, которые определяют скорость выполнения операций. Самые первые процессоры работали на частоте 100kHz, сегодня рядовая частота процессора - 200MHz, иначе говоря, часики тикают 200 миллионов раз в секунду, а каждый тик влечет за собой выполнение многих действий. Счетчик Команд (PC) - внутренний указатель, содержащий адрес следующей выполняемой команды. Когда приходит время для ее исполнения, Управляющий Модуль помещает инструкцию из памяти в регистр инструкций (IR). В то же самое время Счетчик команд увеличивается, так чтобы указывать на последующую инструкцию, а процессор выполняет инструкцию в IR. Некоторые инструкции управляют самим Управляющим Модулем, так если инструкция гласит "перейти на адрес 2749", величина 2749 записывается в Счетчик Команд, чтобы процессор выполнял эту инструкцию следующей.

Многие инструкции задействуют Арифметико-логическое Устройство (ALU), работающее совместно с Регистрами Общего Назначения - место для временного хранения, которое может загружать и выгружать данные из памяти. Типичной инструкцией ALU может служить добавление содержимого ячейки памяти к регистру общего назначения. ALU также устанавливает биты Регистра Состояний (Status register - SR) при выполнении инструкций для хранения информации о ее результате. Например, SR имеет биты, указывающие на нулевой результат, переполнение, перенос и так далее. Модуль Управления использует информацию в SR для выполнения условных операций, таких как "перейти по адресу 7410 если выполнение предыдущей инструкции вызвало переполнение".

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

Архитектурное развитие

В соответствии с законом Мура (сформулированным в 1965 году Гордоном Муром (Gordon Moore), одним из создателей Intel), CPU удваивает свою мощность и возможности каждые 18-24 месяцев. В последние годы Intel настойчиво следовал этому закону, оставаясь лидером на рынке и выпуская более мощные чипы процессоров для PC, чем любая другая компания. В 1978 году 8086 работал на частоте 4.77MHz и содержал менее миллиона транзисторов, на конец 1995 года их Pentium Pro вмещал уже 21 миллион транзисторов и работал на 200MHz.

Законы физику ограничивают разработчиков в непосредственном увеличении частоты, и хотя частоты растут каждый год, только это не может дать того прироста производительности, что мы используем сегодня. Вот почему инженеры постоянно ищут способ заставить процессор выполнять больше работы за каждый тик. Одно развитие состоит в расширении шины данных и регистров. Даже 4-битные процессоры способны складывать 32-битные числа, правда выполнив массу инструкций, - 32-битные процессоры решают эту задачу в одну инструкцию. Большинство сегодняшних процессоров имеют 32-разрядную архитектуру, на повестке уже 64-разрядные.

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

Говоря, что "нечто происходит с каждым тиком", мы недооцениваем как долго на самом деле происходит выполнение инструкции. Традиционно, это занимало пять тиков - один для загрузки инструкции, другой для ее декодирования, один для получения данных, один для выполнения и один для записи результата. В этом случае очевидно 100MHz процессор мог выполнить только 20 миллионов инструкций в секунду.

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

Более того, многие процессоры сейчас имеют суперскалярную архитектуру. Это значит, что схема каждой стадии потока дублируется, так что много инструкций могут передаваться параллельно. Pentium Pro, примером, может выполнять до пяти инструкций за цикл тика.

Процесс производства

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

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

Сперва выращивается кремневая болванка. Она должна иметь бездефектную кристаллическую структуру, этот аспект налагает ограничение на ее размер. В прежние дни болванка ограничивалась диаметром в 2 дюйма, а сейчас распространены 8 дюймов. На следующей стадии болванка разрезается на слои, называемые пластинами (wafers). Они полируются до безупречной зеркальной поверхности. На этой пластине и создается чип. Обычно из одной пластины делается много процессоров.

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

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

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

В прежние времена производство полупроводников приводило к удаче или неудаче с отношением успеха менее 50% работающих чипов. Сегодня выход результата намного выше, но никто не ожидает 100%. Как только новый слой добавляется на пластину, каждый чип тестируется и отмечается любое несоответствие. Индивидуальные чипы отделяются и с этой точки зовутся матрицами. Плохие бракуются, а хорошие упаковываются в PGA (Pin Grid Arrays) корпус - керамический прямоугольник с рядами штырьков на дне, именно такой корпус большинство людей принимают за процессор.

4004 использовал 10-микронный процесс: наименьшие детали составляли одну 10-миллионную метра. По сегодняшним стандартам это чудовищно. Если предположить, что Pentium Pro изготовлен по такой технологии он был бы размером 14x20 сантиметров, и был бы медленным - быстрые транзисторы малы. Большинство процессоров сегодня используют 0.25-микронные технологию, и 0.1-микронный процесс - среднесрочная перспектива для многих производителей.

Программная совместимость

На заре компьютерного века многие люди писали свои программы, а точный набор исполняемых инструкций процессора не был существенен. Сегодня, однако, люди ждут возможность использовать готовые программы, так что набор инструкций первостепенен. Хотя ничего нет магического с технической точки зрения в архитектуре Intel 80x86, она уже давно стала индустриальным стандартом.

Когда сторонние производители делают процессор с другими инструкциями, он не будет работать с принятым стандартным программным обеспечением, и в результате не продается. В дни 386-х и 486-х компании, например AMD, клонировали интеловские процессоры, но это всегда было с отставанием на поколение. Cyrix 6x86 и AMD K5 были конкурентами интеловского Pentium, но это были не чистые копии. K5 имел собственный набор инструкций и транслировал инструкции 80x86 во внутренние при загрузке, так что K5 не требовал при проектировании предварительного создания Pentium. Многое в действительности создавалось параллельно, сдерживала только схема трансляции. Когда K5 наконец появился, он перепрыгнул Pentium в отношении производительности при одинаковых частотах.

Другой путь, по которому процессоры с разной архитектурой относительно единообразны к внешнему миру, - это стандартная шина. В этом отношении введенная в 1994 году шина PCI - один из наиболее важных стандартов. PCI определяет набор сигналов, разрешающих процессору общаться с другими частями PC. Он включает шины адреса и данных, плюс набор управляющих сигналов. Процессор имеет свои собственные шины, так что чипсет используется для преобразования из этой "частной" шины в "публичную" PCI.

Введение Pentium в 1993 году революционизировало рынок PC, вложив в корпус среднего PC больше мощи, чем имела NASA в кондиционируемых компьютерных помещениях начала 60-х. Архетектура Pentium представляет шаг вперед от 486.

Это был основанный на CISC чип с более 3.3 миллионами транзисторов, произведенный по 0.35-микронной технологии. Внутри процессор использовал 32-разрядную шину, но внешняя шина данных была 64-разрядна. Внешняя шина требовала других материнских плат, и для их поддержки Intel выпустил специальный чипсет для связи Pentium с 64-разрядным внешним кэшем и шиной PCI.

Большинство Pentium (75MHz и выше) работают на 3.3V с 5V вводом-выводом. У Pentium двойной потоковый суперскалярный дизайн, позволяющий ему выполнять больше инструкций за тик. Пять стадий (загрузка, декодирование, генерация адреса, выполнение и выгрузка) при исполнении целочисленных инструкций остаются, как в 486, но Pentium имеет два параллельных целочисленных потока, позволяющих ему читать, интерпретировать, выполнять, и записывать две операции одновременно. Так проводятся только целочисленные операции - с дробными числами обращается отдельный модуль плавающей точки.

Pentium также использует два 8-килобайтных ассоциативных буфера, более известных как первичный или первого уровня кэш) - один для инструкций и другой для данных. Объем кэша удвоен по сравнению с предшественником, 486. Этот кэш добавляет к производительности, поскольку действует как временное хранилище информации для данных, доставляемых из медленной основной памяти.

Буфер Ветвлений (BTB) обеспечивает динамическое предсказание ветвлений. Он улучшает выполнение инструкций запоминанием способа ветвления и применением той же ветви при следующем выполнении инструкции. Когда BTB делает правильное предсказание, производительность увеличивается. 80-точечный Модуль Плавающей Точки обеспечивает арифметическое средство для обращения с "вещественными" числами.

Обзор процессоров

Интеловский Pentium Pro, выпущенный в конце 1995 года с ядром CPU, состоящим из 5.5 миллионов транзисторов, плюс 15.5 миллионов транзисторов во вторичном кэше, изначально предназначался для рынка серверов и high-end рабочих станций. Этот суперскалярный процессор включает особенности процессоров высшей категории и оптимизирован под 32-битные операции.

Pentium Pro отличается от Pentium"а наличием встроенного вторичного кэша размером от 256kb до 1mb, работающего на внутренней частоте. Помещение вторичного кэша на чипе, а не на системной плате, позволяет передавать данные по 64-битному каналу, а не по 32-битной системной шине у Pentium. Такая физическая близость также добавляет к росту производительности. Эта комбинация настолько мощна, что 256kb встроенного кэша эквивалентны 2mb на системной плате.

Даже большим фактором в производительности Pentium Pro является комбинация технологий, известных как "динамическое выполнение". Оно включает предсказание ветвлений, анализ потока данных и спекулятивное выполнение. Их комбинирование позволяет позволяет процессору использовать пропадающие иначе циклы тиков, производя предсказания программного потока выполнения инструкций вперед.

Pentium Pro был также первым процессором в семействе x86 с применением сверх поточности (superpipelining), этот поток включает 14 стадий, делящихся на три секции. Очередная подготовительная секция, обрабатывающая декодирование и вывод инструкции, состоит из восьми стадий. Внеочередное ядро, выполняющее инструкцию, имеет три стадии и очередное завершение состоит из трех финальных стадий.

Другим, более важным отличием Pentium Pro является его обращение с инструкциями. Он получает CISC (Complex Instruction Set Computer) x86 инструкции, и преобразовывает их во внутренний RISC (Reduced Instruction Set Computer) микрокод. Преобразование спроектировано так, чтобы избежать некоторые ограничения, унаследованные от набора инструкций x86, таких как нерегулярное декодирование инструкций и арифметические операции регистр-в-память. Микрокод затем пересылается во внеочередной исполнитель инструкций, который определяет, готова ли инструкция к выполнению, и, если нет, передвигает код по кругу, чтобы предотвратить застопорение потока.

У миграции в сторону RISC есть свои минусы. Во-первых, преобразование инструкций занимает время, пусть оно даже меряется в нано- или микросекундах. В результате Pentium Pro неизбежно тратит производительную мощь на обработку инструкций. Второй минус в том, что внеочередной дизайн может частично влиять на 16-битный код, приводя к застопориванием. Это может быть причиной частичного обновления регистра, происходящего до полного чтения регистра, и налагать строгие производственные издержки до семи циклов тика.

Pentium Pro был первым микропроцессором, не использующим почтенный Socket 7, требуя большего 242-контактного интерфейса Socket 8 и ново годизайна системных плат.

MultiMedia eXtensions

Процессор Intel’s P55C MMX с мультимедиа расширением выпускается с начала 1997 года. Он представил наиболее значительное изменение базисной архитектуры процессоров PC за последние десять лет и обеспечивал три главных улучшения:

  • встроенный кэш первого уровня стандартного Pentium удваивался до 32kb
  • добавлено 57 новых инструкций, предназначенных специально для более эффективного манипулирования видео, аудио и графическими данными
  • был развит новый процесс, названный SIMD (Single Instruction Multiple Data - Одна Инструкция Много Данных) и позволяющий выполнять одинаковую инструкцию ко многим экземплярам данных одновременно.

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

По утверждениям Intel, эти усовершенствования дают 10-20% увеличение скорости для не-MMX приложений, и более 60% ускорения для MMX приложений.

Заметное отсутствие MMX версии для ноутбуков Intel исправил в конце 1997 года объявлением мобильных версий процессора с кодовым названием Tillamook, по имени небольшого города в Opегоне. Новые процессоры с частотой 200 и 233MHz и технологией MMX на некоторое время выдвинули ноутбуки на уровень настольных систем. 226MHz версия была выпущена позже в 1998 году.

Tillamook - это первый процессор, построенный на развитом Intel Mobile Module для ноутбуков (MMO). Модуль держит процессор, 512kb вторичного кэша, регулятор напряжения для питания процессора от высшего внешнего напряжения, часы, и новый "северный мост" 430TX PCI. Соединяется с системной платой рядом из 280 разъемов, подобно SEC картриджу Pentium II.

Наибольшим отличием в самом чипе было применение 0.25-микронной технологии по сравнению с применявшейся раннее Intel в мобильных чипах 0.28. Меньший микрон фактор оказал влияние на частоту и напряжение: транзисторы в процессоре (с электрическими нулями и единицами) ближе примыкались, и скорость автоматически увеличивалась. Так как транзисторы сближались, напряжение уменьшалось, чтобы избежать разрушений от сильных электрических полей. Предыдущие версии мобильных интеловских процессоров питались от 2.45v на ядре, а у Tillamook оно было опушено до 1.8v. Регулятор напряжения требовался для защиты чипа от шин PCI и памяти, которые работали на 3.3v. От уменьшения напряжения на процессоре значительно экономилась энергия.

Выпущенный с середины 1997 года, Pentium II ввел ряд больших изменений в мир процессоров PC.

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

Во вторых, процессор, вторичный кэш и тепло отвод были смонтированы на небольшой плате, вставлявшейся в разъем на системной плате, что больше напоминало карту расширения, чем традиционную схему процессор/гнездо. Intel окрестил это Single Edge Contact cartridge (SEC) - односторонне контактный картридж. В этом картридже находятся шесть отдельных компонент - процессор, четыре индустриально стандартных burst-static-cache RAM и один tag RAM. Дизайн SEC картриджа наделял важными преимуществами. PGA-компоновка Pentium Pro требовала 387 контактов, в то время как SEC-картридж - только 242. Уменьшение на треть числа контактов произошло благодаря наличию в картридже дискретных элементов, таких как замыкающие резисторы и конденсаторы. Эти элементы обеспечивают расщепление сигналов, что значит намного меньшее число требуемых разъемов питания. Разъем SEC-картриджа использует так называемый Slot 1 и воспринимается как принимающий эстафету у уходящего Socket 7.

Третье изменение - в большем синтезе, так как Pentium II объединяет Dual Independent Bus (DIB) от Pentium Pro c технологией MMX от Pentium MMX, формируя новый вид - гибрид Pentium Pro/MMX. Таким образом, внешне очень отличный от предыдущих интеловских процессоров, Pentium II внутренне являет собой смесь новых технологий и улучшений старых чипов.

И наконец, в отличие от Pentium Pro, работающего на 3.3v, Pentium II питается от 2.8v, позволяя Intel пускать его на больших частотах без чрезмерного увеличения требование к мощности. В то время, как 200MHz Pentium Pro с 512kb кэша потребляет 37.9 ватт, 266MHz Pentium II с 512kb кэша сжигает 37.0 ватт.

Подобно Pentium Pro, Pentium II применяет интеловскую Технологию Динамического Исполнения. Когда программная инструкция считывается в процессор и декодируется, она попадает в исполняемый пул. Технология Динамического Исполнения принимает три основных подхода к оптимизации способа обращения процессора с кодом. Множественные Предсказания Ветвлений проверяют программный поток вдоль нескольких ветвей и предсказывают, где в памяти находится следующая инструкция.

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

У Технологии Динамического Исполнения есть два основных преимущества: Инструкции обрабатываются быстрее и эффективнее, чем обычно, и, в отличие от CPU с применением RISC архитектуры, программы не надо перекомпилировать для извлечения выгод процессора. Процессор все делает на лету.

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

Хотя шина между процессором и кэшем второго уровня работает медленнее, чем на обычном Pentium Pro (на половине скорости процессора), она чрезвычайно масштабируема. Чем быстрее процессор, тем быстрее кэш, независимо от 66MHz передней шины. Вдобавок, передняя шина может быть увеличена с 66 до 100MHz без влияния на шину кэша второго уровня. Также очевидно, что наличие памяти на одном кристалле с процессором негативно сказывается на проценте выхода годных 512kb Pentium Pro, сохраняя высокими цены. Pentium II опирается на GTL+ (gunning-transceiver-logic) логику хост-шины, допускающую естественную поддержку двух процессоров. Во время выхода это обеспечивало стоимостно эффективное минималистское двухпроцессорное решение, допускаемое симметричной мультипроцессорностью (SMP). Двухпроцессорное ограничение налагалось не самим Pentium II, а поддержкой чипсета. Изначальное ограничение чипсета двухпроцессорной конфигурацией позволяло Intel и поставщикам рабочих станций предлагать двухпроцессорные системы как временное и экономичное решение, что по другому и не было возможно. Это ограничение было снято с середины 1998 года с выходом чипсета 450NX, поддерживающего от одного до четырех процессоров. Чипсет 440FX, содержащий чипы PMC и DBX, не допускал чередования (interleaving) памяти, но поддерживал EDO DRAM, позволяя улучшать производительность памяти уменьшением ожидания.

Когда Intel проектировал Pentium II, он также взялся за слабую 16-битную производительность его предшественника. Pentium Pro роскошно работает с полностью 32-битным обеспечением, таким как Windows NT, но опускается ниже стандартного Pentium"а, обрабатывая 16-битный код. Это влечет худшую чем Pentium производительность под Windows 95, большие части которой пока 16-битны. Intel решил эту проблему использованием пентиумного кэша с дескрипторами сегментов в Pentium II.

Как и Pentium Pro, Pentium II чрезвычайно быстр в арифметике плавающей точки. В сочетании с Accelerated Graphics Port (AGP) это делает Pentium II мощным решением для высокопроизводительной 3D графики.

333MHz воплощение Pentium II под кодовым названием Deschutes (по реке, текущей в Орегоне), было анонсировано в начале 1998 года с планируемыми в течение года 400MHz и выше. Имя Deschutes в действительности относится к двум разным линиям CPU.

Версия для Slot 1 - ничего более, чем слегка эволюционировавший Pentium II. Архитектура и физический дизайн идентичны, за исключением того, что Deschutes Slot 1 частью сделан с использованием 0.25-микронной технологии, введенной осенью 1997 года с ноутбучным процессором Tillamook, по сравнению с 233-300MHz версиями, выполненными по 0.35-микронному процессу. Применение 0.25-микрон означает, что транзисторы на матрице физически ближе между собой и CPU потребляет меньше энергии, а следовательно рассеивает меньше тепла на данной частоте, позволяя ядру тикать на больших частотах.

Все иное у Slot 1 Deschutes идентично обычному Pentium II. Смонтированный на основание и заключенный в SEC картридж, он поддерживает набор инструкций MMX и общается с 512kb вторичного кэша на половинной частоте ядра. Он имеет тот же конечный коннектор, и работает на тех же системных платах с теми же чипсетами. Как таковой он работает с 440FX или 440LX на внешней частоте 66MHz.

С весны 1998 года большой шаг в производительности пришел со следующим воплощением Deschutes, когда вышел новый чипсет 440BX, допускающий 100MHz передачу по системной шине, уменьшая закупоривание данных и поддерживая частоты от 350 до 400MHz.

Другой процессор, зовущийся Deschutes, относится к Slot 2, выпущен с середины 1998 года как Pentium II Xeon. Intel разбил Slot 1 и Slot 2 Deschutes на взаимодополняющие товарные линии, где Slot 1 предназначен для массового производства, а Slot 2 нацелен на high-end серверы и туда, где цена вторична по отношению к производительности.

Мобильный Pentium II

Естественное продвижение маломощного (в смысле энерго потребления/рассеивания) семейства Pentium II Deschutes на рынок портативных PC осуществилось с выпуском линейки мобильных Pentium II в апреле 1998 года. Новый процессор и его компаньон мобильный 440BX чипсет, изначально были доступны в 233 и 266MHz вариантах, скомпонованные в существующий мобильный модуль (MMO) или новый мини-картридж формат. Intel ожидает к концу 1998 года более половины из снаряженных его мобильными процессорами PC будут уже Pentium II, а срок мобильных Pentium II Tillamook окончится к середине 1999 года.

В попытке лучшего удовлетворения сектора дешевых PC, до настоящего времени вотчины производителей клонов, AMD и Cyrix, продолжающих развивать унаследованную архитектуру Socket 7, Intel выпустил свой ряд процессоров Celeron в апреле 1998 года.

Основанный на той же P6 архитектуре, что и Pentium II, и используя тот же 0.25-микронный процесс, Celeron-системы предлагают полный комплект последних технологий, включая поддержку AGP графики, ATA-33 жестких дисков, SDRAM и ACPI. Celeron будет работать на любом интеловском Pentium II чипсете, поддерживающим 66MHz системной шины, включая 440LX, 440BX и новый 440EX, специально спроектированный для рынка "базовых" PC. В отличие от Pentium II с его SEC картриджем, Celeron не имеет защитного пластикого покрытия вокруг карт процессора, что Intel называет Single Edge Processor Package (SEPP). Он полностью совместим со Slot1, что позволяет использовать существующие платы, но механизм крепления для карты CPU не адаптирован для форм фактора SEPP.

Первые 266 и 300MHz Celeron"ы без кэша второго уровня встретили мало энтузиазма на рынке, не неся или неся мало преимуществ над системами-клонами Socket 7. В августе 1998 года Intel пополнил ряд Celeron семейством процессором, названных Mendocino. Снабженный 128kb вторичного кэа на матрице, работающего на полной частоте процессора, и соединяясь через внешнюю 66MHz шину, новый Celeron стал намного более живым, чем его вялый предшественник. Отчасти путано, две доступные версии получили названия Celeron 333 и 300a. Первый является основной версией, совместимый с существующей интеловской архитектурой, в то время как второй патентует Pin 370 socket, отличный от Socket 7 и Socket 1, нацеленный на дешевые low-end машины.

В июне 1998 года Intel предложил свой процессор Pentium II Xeon. Технически Xeon представляет комбинацию технологий Pentium Pro и Pentium II и спроектирован, чтобы предложить выдающуюся производительность в критических приложениях рабочих станций и серверов. Используя новый интерфейс Slot 2, Xeon приблизительно вдвое больше размера Pentium II, в основном из-за увеличения кэша второго уровня.

Как и 350 и 400MHz Pentium II CPU, передняя шина работает на 100MHz для увеличения обмена. Наиболее значительным отличием от стандартного Pentium II является то, что кэш второго уровня работает на полной частоте ядра CPU, в отличие от дизайна Slot 1, ограничивающего вторичный кэш половиной частоты ядра, что позволяет Intel использовать дешевый готовый burst SRAM как вторичный кэш, а не производя свой собственный заказной SRAM. Намного более дорогой заказной полноскорстной кэш служит главной причиной разницы в ценах между Slot 1 и Slot 2 решениями.

Чип поставляется с тремя размерами вторичного кэша. Рабочие станции снабжаются 512kb версией. 1mb версия, выпущенная позднее, используется для серверов, до тех пор, пока 2mb версия ожидается (позднее в этом году). Система кэша второго уровня подобна типу, используемому в Pentium Pro, это одна из основных составляющих стоимости Xeon. Другая состоит в том, что корректирующий ошибки (ECC) SRAM стал стандартом во всех Xeon-ах.

Другим преодоленным Xeon"ом ограничением стал дуальный SMP (symmetric multiprocessor). Невозможность запуска мультипроцессорных Pentium II систем с более чем двумя процессорами было основной причиной выживания Pentium Pro в секторе high-end серверов, когда требуется четыре, шесть или восемь процессоров. Slot 2 обеспечивает четырехстороннюю мультипроцессорность.

Хотя Intel решил направить Xeon на оба рынка - рабочих станций и серверов, он разработал разные чипсеты системных плат для каждого из них. 440GX построен вокруг архитектуры ядра 440BC чипсета и предназначен для рабочих станций. 450NX, с другой стороны, спроектирован специально для рынка серверов.

Будущие разработки Intel

Intel сейчас имеет в разработке ряд процессоров

  • Katmai, названный в честь вулкана на Аляске, отмечен как новая версия Pentium II. Katmai будет основан на P6 архитектуре, начатой Pentium Pro. Подобно Deschutes, этот чип строится на интеловском 0.25-микронном процессе. Наиболее значительным отличием будет ревизия MMX расширения поднятием до MMX2. MMX2 содержит больше 32-битных инструкций - существующий MMX во многом 16-битен - и значительно улучшает производительность 3D графики. Другие изменения включают 100MHz внешнюю шину, увеличенный Level 1 кэш и новую логику ядра чипсета, спроектированную для преодоления 500MHz рубежа скорости Pentium II. Katmai наиболее вероятно увидит свет в начале 1999 года.
  • Dixon, следующий представитель семьи Mendocino, обещается во второй половине 1999 года. Вероятно, он будет включать больше кэша второго уровня (192 или 256kb) и Katmai New Instructions (KNI), наконец полностью вытиснившие MMX.
  • Willamette, названный по другой орегонской реке, - изменение поступи Intel. С развитым ядром Pentium Pro и возможностью 100MHz внешней шины, Willamette ожидается более чем на 50% быстрее существующих Pentium II. Willamette по слухам усилит производительность плавающей точки и поддержку 3D геометрии. Он найдет свой путь на рынок в конце 1999 года, но не станет массовым в настольных системах до 2000-го.
  • Merced, названый по калифорнийской реке, отметит конец процессоров, использующий x86 архитектуру. Результат совместного проекта исследований Hewlett-Packard и Intel, Merced станет первым процессором, использующим полный 64-битный IA-64 набор инструкций. Это должно привести к производительности, превосходящей старые RISC и CISC процессоры. Merced, однако, еще будет способен выполнять x86 инструкции, но не без ущерба в производительности. Merced, появление которого ожидается к середине 2000 года, позиционируется как новая эра в вычислительной мощи. Он, вероятно, будет обслуживать в основном рынок серверов и рабочих станций, в то время как Willamette, по существу обрезанная версия Mersed, будет работать в high-end персональных компьютерах.

  • Как проверить южный мост на материнской плате

сокращенным набором команд ) родился в результате практических исследований частоты использования команд программистами, проведенных в 70-х годах в США и Англии. Их непосредственный итог - известное "правило 80/20": в 80% кода типичной прикладной программы используется лишь 20% простейших машинных команд из всего доступного набора.

Первый "настоящий" RISC - процессор с 31 командой был создан под руководством Дэвида Паттерсона из Университета Беркли, затем последовал процессор с набором из 39 команд. Они включали в себя 20-50 тыс. транзисторов. Плодами трудов Паттерсона воспользовалась компания Sun Microsystems, разработавшая архитектуру SPARC с 75 командами в конце 70-х годов. В 1981 г. в Станфордском университете стартовал проект MIPS по выпуску RISC -процессора с 39 командами. В итоге была основана корпорация Mips Computer в середине 80-х годов и сконструирован следующий процессор уже с 74 командами.

По данным независимой компании IDC , в 1992 году архитектура SPARC занимала 56% рынка, далее следовали MIPS - 15% и PA-RISC - 12,2%

Примерно в то же время Intel разработала серию 80386, последних "истинных" CISC-процессоров в семействе IA-32 . В последний раз повышение производительности было достигнуто только за счет усложнения архитектуры процессора: из 16-разрядной она превратилась в 32-разрядную, дополнительные аппаратные компоненты поддерживали виртуальную память , и добавился целый ряд новых команд.

Основные особенности RISC -процессоров:

  1. Сокращенный набор команд (от 80 до 150 команд).
  2. Большинство команд выполняется за 1 такт.
  3. Большое количество регистров общего назначения.
  4. Наличие жестких многоступенчатых конвейеров.
  5. Все команды имеют простой формат, и используются немногие способы адресации.
  6. Наличие вместительной раздельной кэш-памяти.
  7. Применение оптимизирующих компиляторов, которые анализируют исходный код и частично меняют порядок следования команд.

RISC-процессоры 3-го поколения

Самыми крупными разработчиками RISC -процессоров считаются Sun Microsystems ( архитектура SPARC - Ultra SPARC ), IBM (многокристальные процессоры Power , однокристальные PowerPC - PowerPC 620), Digital Equipment ( Alpha - Alpha 21164), Mips Technologies (семейство Rxx00 -- R 10000), а также Hewlett-Packard ( архитектура PA-RISC - PA-8000).

Все RISC -процессоры третьего поколения:

  • являются 64-х разрядными и суперскалярными (запускаются не менее 4-х команд за такт);
  • имеют встроенные конвейерные блоки арифметики с плавающей точкой;
  • имеют многоуровневую кэш-память. Большинство RISC-процессоров кэшируют предварительно дешифрованные команды;
  • изготавливаются по КМОП-технологии с 4 слоями металлизации.

Для обработки данных применяется алгоритм динамического прогнозирования ветвлений и метод переназначения регистров, что позволяет реализовать внеочередное выполнение команд.

Повышение производительности RISC -процессоров достигается за счет повышения тактовой частоты и усложнения схемы кристалла. Представителями первого направления являются процессоры Alpha фирмы DEC , наиболее сложными остаются процессоры компании Hewlett-Packard. Рассмотрим процессоры этих фирм более подробно.

Структура процессоров Alpha: 21064, 21264

Структура процессора Alpha 21064 представлена на рис. 10.1 .


Рис. 10.1.

Основные функциональные блоки процессора Alpha 21064:

  • I-cache - кэш команд.
  • IRF - регистровый файл целочисленной арифметики.
  • F-box - устройство арифметики с плавающей точкой.
  • E-box - устройство целочисленной арифметики (7 ступеней конвейера ).
  • I-box - командное устройство (управляет кэш команд, выборкой и дешифрацией команд).
  • A-box - устройство управления загрузкой/сохранением данных. Управляет процессом обмена данными м/у IRF, FRF , кэш данных и внешней памятью.
  • Write Buffer - буфер обратной записи.
  • D-cache - КЭШ данных.
  • BIU - интерфейсный блок, с помощью которого подключаются внешняя кэшпамять, размером 128 Кб-8 Мб.

Сравнительные характеристики Alpha 21164 и 21264

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

Alpha 21264 читает до четырех инструкций за один такт и может одновременно исполнять до шести инструкций. Самое большое его отличие от модели 21164 - это способность выполнять команды (впервые для Alpha) с изменением их очередности (Out-of-Order).

Эффективность выполнения Out-of-Order определяется количеством инструкций, которыми может манипулировать ЦП в целях определения оптимального порядка выполнения команд. Чем больше инструкций ЦП может для этого использовать, тем лучше, тем дальше он может заглядывать вперед. Процессоры Intel класса Р6 ( Pentium Pro , Pentium II, Xeon) могут одновременно обращаться не менее чем с 40 командами. У других процессоров данный показатель значительно больше: PA-8000 фирмы HP оперирует 56 командами, а процессор Alpha справляется с 80 командами.

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

Каждый регистр может временно хранить значения текущих команд. Если обрабатывается какая-либо инструкция, нет необходимости перегружать результат в целевой регистр - вместо этого ЦП просто переименовывает временный регистр ( Register Renaming ).

Подобное переименование регистров есть и в других процессорах. Однако в 21264 реализована уникальная "хитрость" - он имеет задублированный набор целочисленных регистров, каждый из 80 целочисленных регистров дублируется еще раз. Таким образом, на чипе в целом - 160 целочисленных регистров. Это одна из причин, почему, несмотря на сложность выполнения Out-of-Order, допустима высокая частота процессора 21264.

Блоки целочисленных операций в обеих группах идентичны не полностью. Одна из них содержит блок умножения, а вторая - специальную логику для обработки движущихся изображений (MPEG). Для этого набор команд Alpha был дополнен пятью новыми командами. Самая интересная из них - PERR - служит для оценки движения, т.е. выполнения задачи, возникающей как при сжатии, так и декомпрессии MPEG. Команда PERR выполняет работу девяти обычных инструкций. Таким образом, процессор 21264 может декодировать видеопоследовательности MPEG-2, а также DVD-аудиоданные AC-3 в режиме реального времени без использования дополнительных периферийных устройств.