Главная страница
Навигация по странице:

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

  • Общие принципы взаимодействия процессора и ОЗУ

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

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

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

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

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

  • Латентность

  • Процессор: сведения общего характера Понятие архитектуры Архитектура как совместимость с кодом

  • Современные десктопные процессоры архитектуры x86 общие принципы работы - Гарматюк С.. Современные десктопные процессоры архитектуры x86 общие принципы. Современные десктопные процессоры архитектуры x86 общие принципы работы


    Скачать 395.03 Kb.
    НазваниеСовременные десктопные процессоры архитектуры x86 общие принципы работы
    АнкорСовременные десктопные процессоры архитектуры x86 общие принципы работы - Гарматюк С..pdf
    Дата04.05.2017
    Размер395.03 Kb.
    Формат файлаpdf
    Имя файлаСовременные десктопные процессоры архитектуры x86 общие принципы.pdf
    ТипДокументы
    #1984
    КатегорияИнформатика. Вычислительная техника
    страница1 из 4
      1   2   3   4

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

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

    Общие принципы взаимодействия процессора и ОЗУ
    o
    Контроллер памяти o
    Процессорная шина o
    Различия между традиционной архитектурой и K8/AMD64
    o
    Оперативная память
    Разрядность шины памяти, N-канальные контроллеры памяти
    Скорость чтения и записи
    Латентность

    Процессор: сведения общего характера o
    Понятие архитектуры
    Архитектура как совместимость с кодом
    Архитектура как характеристика семейства процесcоров
    64-битные расширения классической x86 (IA32) архитектуры o
    Процессорое ядро
    Различия между ядрами одной микроархитектуры
    Ревизии
    Частота работы ядра o
    Особенности образования названий процессоров
    Рейтинги от AMD
    Processor Number от Intel o
    Измерение скорости «в мегагерцах» — как это возможно?
    Пара слов о некоторых пикантных особенностях DDR и QDR
    протоколов

    Процессор «крупноблочно»
    o
    Кэш
    Общее описание и принцип действия
    Многоуровневое кэширование o
    Декодер o
    Исполняющие (функциональные) устройства

    Арифметико-логические устройства
    Блок вычислений с плавающей точкой o
    Регистры процессора

    Процессор в подробностях o
    Особенности кэшей
    Частота работы кэша и его шина
    Эксклюзивный и неэксклюзивный кэш
    Trace cache o
    Суперскалярность и внеочередное исполнение команд o
    Предварительное (опережающее) декодирование и кэширование
    Предсказание ветвлений
    Предвыборка данных

    Заключение
    Введение
    Код и данные: основной принцип работы процессора
    Итак, если не пытаться изложить здесь «кратенько» курс информатики для средней школы,
    то единственное что хотелось бы напомнить — это то, что процессор (за редкими исключениями) исполняет не программы, написанные на каком-нибудь языке программирования (один из которых, вы, возможно, даже знаете), а некий «машинный код». То есть командами для него являются последовательности байтов, находящихся в памяти компьютера. Иногда команда может быть равна одному байту, иногда она занимает несколько байт. Там же, в основной памяти (ОЗУ, 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 лет, этот набор поддерживают гарантированно. Для справки приведем табличку, на которой обобщена информация о поддержке различных расширенных наборов команд различными десктопными (предназначенными для настольных ПК)
    процессорами.
    Процессор
      1   2   3   4
    написать администратору сайта