Центральное процессорное устройство - Central processing unit

Intel 80486DX2 CPU, как видно из выше
Нижняя сторона Intel 80486DX2 , показывая его контакты

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

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

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

ИС, которая содержит ЦП, может также содержать память , периферийные интерфейсы и другие компоненты компьютера; такие интегрированные устройства по-разному называются микроконтроллерами или системами на кристалле (SoC).

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

История

EDVAC , один из первых компьютеров с хранимой программой

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

Идея , хранящая программа компьютера была уже присутствует в конструкции Дж Преспера Эккерт и Джон Уильям Mauchly «s ENIAC , но первоначально была опущена так , что она может быть закончена раньше. 30 июня 1945 года, до того, как был создан ENIAC, математик Джон фон Нейман распространил статью, озаглавленную « Первый проект отчета по EDVAC» . Это была схема компьютера с хранимой программой, который в конечном итоге должен был быть завершен в августе 1949 года. EDVAC был разработан для выполнения определенного количества инструкций (или операций) различных типов. Примечательно, что программы, написанные для EDVAC, должны были храниться в памяти высокоскоростного компьютера, а не определяться физической разводкой компьютера. Это позволило преодолеть серьезное ограничение ENIAC, которое требовало значительных затрат времени и усилий для перенастройки компьютера для выполнения новой задачи. Благодаря проекту фон Неймана программу, которую запускал EDVAC, можно было изменить, просто изменив содержимое памяти. EDVAC, однако, не был первым компьютером с хранимой программой; Манчестер младенца , маломасштабная экспериментальная запасенной компьютерная программа, провел свою первую программу на 21 июня 1948 и Manchester Mark 1 провел свою первую программу в ночь с 16-17 июня 1949.

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

Хотя фон Нейману чаще всего приписывают дизайн компьютера с хранимой программой из-за его дизайна EDVAC, и этот дизайн стал известен как архитектура фон Неймана , другие до него, такие как Конрад Цузе , предлагали и реализовывали аналогичные идеи. Так называемая Гарвардская архитектура в Harvard Mark I , который был завершен до того EDVAC, также используется дизайн , хранящая программы с помощью перфоленты , а не электронной память. Ключевое различие между архитектурами фон Неймана и Гарварда состоит в том, что последняя разделяет хранение и обработку инструкций и данных ЦП, в то время как первая использует одно и то же пространство памяти для обоих. Большинство современных ЦП в основном построены по фон Нейману, но ЦП с архитектурой Гарварда также встречаются, особенно во встроенных приложениях; например, микроконтроллеры Atmel AVR - это процессоры с архитектурой Гарварда.

Реле и вакуумные лампы (термоэлектронные лампы) обычно использовались в качестве переключающих элементов; Для полезного компьютера требуются тысячи или десятки тысяч коммутационных устройств. Общая скорость системы зависит от скорости переключателей. Ламповые компьютеры, такие как EDVAC, имели тенденцию к сбоям в среднем восемь часов, тогда как релейные компьютеры, такие как (медленнее, но раньше) Harvard Mark I, выходили из строя очень редко. В конце концов, ламповые ЦП стали доминировать, потому что значительные преимущества в скорости обычно перевешивали проблемы с надежностью. Большинство этих ранних синхронных процессоров работали на более низких тактовых частотах по сравнению с современными конструкциями микроэлектроники. Частоты тактового сигнала в диапазоне от 100 кГц до 4 МГц были очень распространены в то время, в значительной степени ограниченные скоростью коммутационных устройств, с которыми они были построены.

Транзисторные процессоры

Процессор IBM PowerPC 604e

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

В 1964 году IBM представила свою компьютерную архитектуру IBM System / 360, которая использовалась в серии компьютеров, способных запускать одни и те же программы с разной скоростью и производительностью. Это было важно в то время, когда большинство электронных компьютеров были несовместимы друг с другом, даже если они были произведены одним и тем же производителем. Чтобы облегчить это улучшение, IBM использовала концепцию микропрограммы (часто называемую «микрокодом»), которая до сих пор широко используется в современных процессорах. Архитектура System / 360 была настолько популярна, что десятилетиями доминировала на рынке мэйнфреймов и оставила наследие, которое до сих пор продолжают аналогичные современные компьютеры, такие как IBM zSeries . В 1965 году Digital Equipment Corporation (DEC) представила еще один влиятельный компьютер, ориентированный на научные и исследовательские рынки, PDP-8 .

Плата Fujitsu с процессорами SPARC64 VIIIfx

Компьютеры на базе транзисторов имели несколько явных преимуществ перед своими предшественниками. Помимо повышения надежности и снижения энергопотребления, транзисторы также позволяли процессорам работать на гораздо более высоких скоростях из-за короткого времени переключения транзистора по сравнению с лампой или реле. Повышенная надежность и резко увеличенное быстродействие переключающих элементов (которые к тому времени были почти исключительно транзисторами); Тактовые частоты процессора в десятки мегагерц были легко получены в этот период. Кроме того, в то время как дискретные транзисторы и ЦП на микросхемах интенсивно использовались, начали появляться новые высокопроизводительные конструкции, такие как векторные процессоры SIMD (Single Instruction Multiple Data) . Эти ранние экспериментальные образцы позже породили эпоху специализированных суперкомпьютеров , как те , сделанные Cray Inc и Fujitsu Ltd .

Маломасштабные интеграционные процессоры

ЦП, основная память и интерфейс внешней шины DEC PDP-8 / I, выполненный на интегральных схемах среднего размера

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

IBM System / 370 , являющаяся продолжением System / 360, использовала микросхемы SSI, а не дискретные транзисторные модули Solid Logic Technology . Фирмы DEC PDP-8 / I и KI10 PDP-10 также перешли от отдельных транзисторов , используемых ПРП-8 и PDP-10 на SSI ИС, и их чрезвычайно популярной PDP-11 линия была построена с SSI ИМС , но в конечном итоге реализованы Компоненты LSI, когда они стали практичными.

Процессоры для крупномасштабной интеграции

Ли Бойсел опубликовал влиятельные статьи, в том числе «манифест» 1967 года, в котором описывалось, как построить эквивалент 32-разрядного мэйнфрейма из относительно небольшого числа крупномасштабных интегральных схем (БИС). Единственный способ построения LSI чипов, которые являются чипы со ста или более ворот, было построить их с помощью МОП полупроводникового производственного процесса (либо PMOS логику , логику NMOS , или КМОП логики ). Однако некоторые компании продолжали создавать процессоры на основе микросхем биполярной транзисторно-транзисторной логики (TTL), поскольку транзисторы с биполярным переходом были быстрее, чем микросхемы MOS вплоть до 1970-х годов (некоторые компании, такие как Datapoint, продолжали создавать процессоры из микросхем TTL до самого начала). 1980-е годы). В 1960-х годах МОП-микросхемы были медленнее и изначально считались полезными только в приложениях, требующих небольшого энергопотребления. После разработки Федерико Фаггина в Fairchild Semiconductor технологии МОП с кремниевым затвором в 1968 году, МОП-микросхемы в значительной степени заменили биполярный ТТЛ в качестве стандартной технологии микросхем в начале 1970-х годов.

По мере развития микроэлектронных технологий все большее количество транзисторов размещалось на ИС, что уменьшало количество отдельных ИС, необходимых для всего ЦП. ИС MSI и LSI увеличили количество транзисторов до сотен, а затем и до тысяч. К 1968 году количество микросхем, необходимых для создания полного ЦП, было сокращено до 24 микросхем восьми различных типов, каждая из которых содержала примерно 1000 полевых МОП-транзисторов. В отличие от своих предшественников SSI и MSI, первая LSI-реализация PDP-11 содержала ЦП, состоящий всего из четырех интегральных схем LSI.

Микропроцессоры

Die из Intel 80486DX2 микропроцессора (фактический размер: 12 × 6,75 мм) в упаковке
Процессор Intel Core i5 на материнской плате ноутбука серии Vaio E (справа, под тепловой трубкой )
Внутри ноутбука, с удаленным процессором из гнезда

Достижения в технологии МОП- ИС привели к изобретению микропроцессора в начале 1970-х годов. С момента появления первого коммерчески доступного микропроцессора Intel 4004 в 1971 году и первого широко используемого микропроцессора Intel 8080 в 1974 году этот класс процессоров почти полностью вытеснил все другие методы реализации центральных процессоров. Производители мэйнфреймов и миникомпьютеров того времени запустили проприетарные программы разработки ИС для обновления своих старых компьютерных архитектур и в конечном итоге выпустили микропроцессоры, совместимые с наборами команд, которые были обратно совместимы с их старым аппаратным и программным обеспечением. В сочетании с появлением и возможным успехом повсеместного распространения персональных компьютеров термин ЦП теперь применяется почти исключительно к микропроцессорам. Несколько процессоров (обозначенных ядер ) могут быть объединены в одном процессоре.

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

Хотя сложность, размер, конструкция и общая форма ЦП сильно изменились с 1950 года, базовая конструкция и функции практически не изменились. Почти все распространенные сегодня процессоры можно очень точно описать как машины с хранимыми программами фон Неймана. Поскольку закон Мура больше не действует, возникли опасения по поводу ограничений технологии интегральных транзисторов. Чрезвычайная миниатюризация электронных ворот приводит к тому, что эффекты таких явлений, как электромиграция и подпороговая утечка, становятся гораздо более значительными. Эти новые проблемы являются одними из многих факторов, заставляющих исследователей исследовать новые методы вычислений, такие как квантовый компьютер , а также расширять использование параллелизма и других методов, которые расширяют полезность классической модели фон Неймана.

Операция

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

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

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

Принести

Первый шаг, выборка, включает извлечение инструкции (которая представлена ​​числом или последовательностью чисел) из памяти программы. Расположение (адрес) инструкции в программной памяти определяется счетчиком программ (ПК; в микропроцессорах Intel x86 он называется «указателем инструкции» ), который хранит число, которое идентифицирует адрес следующей инструкции, которая должна быть выбрана. После того, как инструкция выбрана, длина ПК увеличивается на длину инструкции, так что он будет содержать адрес следующей инструкции в последовательности. Часто команда, которая должна быть выбрана, должна быть получена из относительно медленной памяти, что приводит к остановке процессора в ожидании возврата команды. В современных процессорах эта проблема в основном решается с помощью кешей и конвейерных архитектур (см. Ниже).

Декодировать

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

Способ интерпретации инструкции определяется архитектурой набора инструкций ЦП (ISA). Часто одна группа битов (то есть «поле») в инструкции, называемая кодом операции, указывает, какая операция должна быть выполнена, в то время как остальные поля обычно предоставляют дополнительную информацию, необходимую для операции, такую ​​как операнды. Эти операнды могут быть указаны как постоянное значение (называемое непосредственным значением) или как местоположение значения, которое может быть регистром процессора или адресом памяти, как определено некоторым режимом адресации .

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

Выполнять

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

Например, если должна быть выполнена инструкция сложения, активируются регистры, содержащие операнды (числа, которые должны быть суммированы), как и части арифметико-логического устройства (ALU), которые выполняют сложение. Когда возникает тактовый импульс, операнды перетекают из исходных регистров в АЛУ, и на его выходе появляется сумма. При последующих тактовых импульсах другие компоненты включаются (и отключаются) для перемещения вывода (суммы операции) в хранилище (например, в регистр или память). Если результирующая сумма слишком велика (т. Е. Больше, чем размер выходного слова ALU), будет установлен флаг арифметического переполнения, влияющий на следующую операцию.

Структура и реализация

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

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

Фактическая математическая операция для каждой инструкции выполняется комбинационной логической схемой в процессоре ЦП, известной как арифметико-логический блок или АЛУ. Как правило, ЦП выполняет инструкцию, извлекая ее из памяти, используя свой ALU для выполнения операции, а затем сохраняя результат в памяти. Помимо инструкций для целочисленной математики и логических операций, существуют различные другие машинные инструкции, например, для загрузки данных из памяти и их сохранения, операций ветвления и математических операций над числами с плавающей запятой, выполняемых модулем с плавающей запятой ЦП (FPU ).

Устройство управления

Блок управления (CU) - это компонент ЦП, который управляет работой процессора. Он сообщает памяти компьютера, арифметическому и логическому устройству, а также устройствам ввода и вывода, как реагировать на инструкции, отправленные процессору.

Он управляет работой других устройств, обеспечивая синхронизирующие и управляющие сигналы. Большинство компьютерных ресурсов управляется CU. Он направляет поток данных между ЦП и другими устройствами. Джон фон Нейман включил блок управления как часть архитектуры фон Неймана . В современных компьютерных разработках блок управления обычно является внутренней частью ЦП, а его общая роль и работа не изменились с момента его появления.

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

Символьное представление ALU и его входных и выходных сигналов

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

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

Блок генерации адресов

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

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

Возможности AGU зависят от конкретного процессора и его архитектуры . Таким образом, некоторые AGU реализуют и предоставляют больше операций по вычислению адресов, в то время как некоторые также включают более сложные специализированные инструкции, которые могут работать с несколькими операндами одновременно. Кроме того, некоторые архитектуры ЦП включают в себя несколько AGU, поэтому одновременно может выполняться более одной операции вычисления адреса, что приводит к дальнейшему повышению производительности за счет использования суперскалярной природы усовершенствованных конструкций ЦП. Например, Intel включает несколько AGU в свои микроархитектуры Sandy Bridge и Haswell , которые увеличивают пропускную способность подсистемы памяти ЦП, позволяя выполнять несколько инструкций доступа к памяти параллельно.

Блок управления памятью (MMU)

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

Кеш

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

Все современные (быстрые) процессоры (за некоторыми специализированными исключениями) имеют несколько уровней кешей процессора. Первые процессоры, использовавшие кеш-память, имели кеш-память только одного уровня; в отличие от более поздних кешей уровня 1, он не был разделен на L1d (для данных) и L1i (для инструкций). Почти все современные процессоры с кешем имеют разделенный кеш L1. У них также есть кеш-память L2, а для более крупных процессоров - кеш-память L3. Кэш L2 обычно не разделяется и действует как общий репозиторий для уже разделенного кеша L1. Каждое ядро многоядерного процессора имеет выделенный кэш L2 и обычно не используется совместно между ядрами. Кэш L3 и кеши более высокого уровня являются общими для ядер и не разделяются. Кэш L4 в настоящее время встречается редко и обычно находится в динамической памяти с произвольным доступом (DRAM), а не в статической памяти с произвольным доступом (SRAM), на отдельном кристалле или кристалле. Исторически так было и с L1, в то время как более крупные чипы позволяли интегрировать его и, как правило, все уровни кеш-памяти, за возможным исключением последнего уровня. Каждый дополнительный уровень кеша имеет тенденцию быть больше и оптимизироваться по-разному.

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

Размер кэшей обычно определяется степенями двойки: 2, 8, 16 и т. Д. Размеры в КиБ или МиБ (для больших, отличных от L1), хотя IBM z13 имеет кэш инструкций L1 96 КиБ.

Тактовая частота

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

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

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

Один из методов работы с переключением ненужных компонентов называется тактовым стробированием , который включает отключение тактового сигнала для ненужных компонентов (эффективное их отключение). Однако это часто считается трудным для реализации и поэтому не находит широкого применения за пределами проектов с очень низким энергопотреблением. Заметный недавний дизайн процессора , который использует обширные часы стробирования является IBM PowerPCксенон используется в Xbox 360 ; Таким образом, требования к электропитанию Xbox 360 значительно снижаются.

Бесчасовые процессоры

Другой метод решения некоторых проблем с глобальным тактовым сигналом - полное удаление тактового сигнала. Хотя удаление глобального тактового сигнала значительно усложняет процесс проектирования во многих отношениях, асинхронные (или бесчасовые) конструкции обладают заметными преимуществами в энергопотреблении и рассеивании тепла по сравнению с аналогичными синхронными конструкциями. Хотя это несколько необычно, но целые асинхронные процессоры были построены без использования глобального тактового сигнала. Два известных примеров этого являются ARM совместимый АМУЛЕТ и MIPS R3000 совместимые MiniMIPS. {{

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

Модуль регулятора напряжения

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

Целочисленный диапазон

Каждый CPU представляет числовые значения определенным образом. Например, некоторые ранние цифровые компьютеры представляли числа как знакомые десятичные (основание 10) значения числовой системы , а другие использовали более необычные представления, такие как троичное (основание три). Почти все современные процессоры представляют числа в двоичной форме, где каждая цифра представлена ​​некоторой двузначной физической величиной, такой как «высокое» или «низкое» напряжение .

Шестибитное слово, содержащее двоично-закодированное представление десятичного значения 40. Большинство современных ЦП используют размер слова, равный степени двойки, например 8, 16, 32 или 64 бита.

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

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

Процессоры с большим размером слова требуют большего количества схем и, следовательно, физически больше, стоят больше и потребляют больше энергии (и, следовательно, выделяют больше тепла). В результате в современных приложениях обычно используются более мелкие 4- или 8-разрядные микроконтроллеры , хотя доступны процессоры с гораздо большими размерами слова (например, 16, 32, 64 и даже 128-разрядные). Однако, когда требуется более высокая производительность, преимущества большего размера слова (большие диапазоны данных и адресные пространства) могут перевешивать недостатки. ЦП может иметь внутренние пути к данным короче, чем размер слова, чтобы уменьшить размер и стоимость. Например, даже несмотря на то, что набор команд IBM System / 360 был 32-битным, у System / 360 Model 30 и Model 40 были 8-битные пути данных в арифметической логической единице, так что 32-битное сложение требовало четырех циклов, по одному на каждые 8 ​​бит операндов, и, хотя набор команд серии Motorola 68000 был 32-битным, Motorola 68000 и Motorola 68010 имели 16-битные пути данных в арифметико-логическом устройстве, так что 32-битное сложение потребовало двух циклов.

Чтобы получить некоторые из преимуществ, предоставляемых как более низкой, так и более высокой битовой длиной, многие наборы инструкций имеют разную разрядность для целочисленных данных и данных с плавающей запятой, что позволяет ЦП, реализующим этот набор инструкций, иметь разную разрядность для разных частей устройства. Например, набор команд IBM System / 360 был в основном 32-битным, но поддерживал 64-битные значения с плавающей запятой для обеспечения большей точности и диапазона чисел с плавающей запятой. Модель 65 System / 360 имела 8-битный сумматор для десятичной и двоичной арифметики с фиксированной запятой и 60-битный сумматор для арифметики с плавающей запятой. Во многих более поздних конструкциях ЦП используется аналогичная смешанная разрядность, особенно когда процессор предназначен для универсального использования, когда требуется разумный баланс возможностей целых чисел и чисел с плавающей запятой.

Параллелизм

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

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

Этот процесс приводит к неэффективности субскалярных процессоров. Поскольку одновременно выполняется только одна инструкция, весь ЦП должен дождаться завершения этой инструкции, прежде чем перейти к следующей инструкции. В результате субскалярный ЦП «зависает» от инструкций, выполнение которых требует более одного тактового цикла. Даже добавление второго исполнительного модуля (см. Ниже) не сильно улучшает производительность; Вместо того, чтобы зависать один путь, теперь зависают два пути и увеличивается количество неиспользуемых транзисторов. Эта конструкция, в которой ресурсы выполнения ЦП могут работать только с одной инструкцией за раз, может достичь только скалярной производительности (одна инструкция за такт, IPC = 1 ). Однако производительность почти всегда субскалярная (менее одной инструкции за такт, IPC <1 ).

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

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

Параллелизм на уровне инструкций

Базовый пятиступенчатый конвейер. В лучшем случае этот конвейер может поддерживать скорость выполнения одной инструкции за такт.

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

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

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

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

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

В случае, когда только часть ЦП является суперскалярной, та часть, которая не является суперскалярной, страдает от потери производительности из-за задержек при планировании. Intel P5 Pentium имел два суперскалярных ALU, каждый из которых мог принимать по одной инструкции за такт, но его FPU не мог. Таким образом, P5 был целочисленным суперскаляром, но не суперскаляром с плавающей запятой. Преемник архитектуры Intel P5, P6 , добавил суперскалярные возможности к своим функциям с плавающей запятой.

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

Параллелизм на уровне задач

Другая стратегия достижения производительности - параллельное выполнение нескольких потоков или процессов . Эта область исследований известна как параллельные вычисления . В таксономии Флинна эта стратегия известна как множественный поток инструкций, множественный поток данных (MIMD).

Одной из технологий, используемых для этой цели, была многопроцессорная обработка (MP). Первоначальный вариант этой технологии известен как симметричная многопроцессорная обработка (SMP), когда небольшое количество процессоров совместно используют согласованное представление о своей системе памяти. В этой схеме каждый ЦП имеет дополнительное оборудование для постоянного обновления памяти. Избегая устаревших представлений о памяти, процессоры могут взаимодействовать с одной и той же программой, а программы могут переноситься с одного процессора на другой. Чтобы увеличить количество взаимодействующих процессоров за пределы горстки, в 1990-х годах были введены такие схемы, как неоднородный доступ к памяти (NUMA) и протоколы согласованности на основе каталогов . Системы SMP ограничены небольшим количеством процессоров, в то время как системы NUMA были построены с тысячами процессоров. Первоначально многопроцессорность была построена с использованием нескольких дискретных процессоров и плат для реализации взаимосвязи между процессорами. Когда все процессоры и их взаимосвязь реализованы на одном кристалле, технология известна как многопроцессорная обработка на уровне кристалла (CMP), а один кристалл - как многоядерный процессор .

Позже было признано, что более мелкозернистый параллелизм существует с единственной программой. Одна программа может иметь несколько потоков (или функций), которые могут выполняться отдельно или параллельно. Некоторые из самых ранних примеров этой технологии реализовывали обработку ввода / вывода, такую ​​как прямой доступ к памяти, как отдельный поток от вычислительного потока. Более общий подход к этой технологии был представлен в 1970-х годах, когда системы были разработаны для параллельного выполнения нескольких вычислительных потоков. Эта технология известна как многопоточность (MT). Этот подход считается более рентабельным, чем многопроцессорность, поскольку только небольшое количество компонентов внутри ЦП реплицируется для поддержки MT, в отличие от всего ЦП в случае MP. В MT исполнительные блоки и система памяти, включая кеши, разделяются между несколькими потоками. Обратной стороной МП является то, что аппаратная поддержка многопоточности более заметна для программного обеспечения, чем поддержка МП, и поэтому программное обеспечение супервизора, такое как операционные системы, должно претерпевать более значительные изменения для поддержки МП. Один из реализованных типов МП известен как временная многопоточность , при которой один поток выполняется до тех пор, пока он не остановится в ожидании возврата данных из внешней памяти. В этой схеме ЦП затем быстро переключает контекст на другой поток, который готов к работе, переключение часто выполняется за один такт ЦП, например UltraSPARC T1 . Другой тип МП - это одновременная многопоточность , когда инструкции из нескольких потоков выполняются параллельно в течение одного тактового цикла ЦП.

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

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

Об этом изменении акцента свидетельствует распространение двухъядерных процессоров и процессоров с большим числом ядер и, в частности, новые разработки Intel, напоминающие менее суперскалярную архитектуру P6 . Поздние разработки в нескольких семействах процессоров демонстрируют CMP, включая x86-64 Opteron и Athlon 64 X2 , SPARC UltraSPARC T1 , IBM POWER4 и POWER5 , а также несколько процессоров консолей для видеоигр, таких как трехъядерный PowerPC для Xbox 360 , и 7-ядерный микропроцессор Cell на PlayStation 3 .

Параллелизм данных

Менее распространенная, но все более важная парадигма процессоров (и, в действительности, вычислений в целом) связана с параллелизмом данных. Все процессоры, обсуждаемые ранее, относятся к определенному типу скалярных устройств. Как следует из названия, векторные процессоры обрабатывают несколько фрагментов данных в контексте одной инструкции. В этом отличие от скалярных процессоров, которые обрабатывают один фрагмент данных для каждой инструкции. Используя таксономию Флинна , эти две схемы работы с данными обычно называют потоком одиночных инструкций, потоком множественных данных ( SIMD ) и потоком одиночных инструкций , одиночным потоком данных ( SISD ), соответственно. Большая полезность в создании процессоров, которые имеют дело с векторами данных, заключается в оптимизации задач, которые обычно требуют выполнения одной и той же операции (например, суммирования или скалярного произведения ) с большим набором данных. Некоторые классические примеры этих типов задач включают мультимедийные приложения (изображения, видео и звук), а также многие типы научных и инженерных задач. В то время как скалярный процессор должен завершить весь процесс выборки, декодирования и выполнения каждой инструкции и значения в наборе данных, векторный процессор может выполнить единственную операцию над сравнительно большим набором данных с помощью одной инструкции. Это возможно только тогда, когда приложению требуется много шагов, которые применяют одну операцию к большому набору данных.

Большинство ранних векторных процессоров, таких как Cray-1 , были связаны почти исключительно с научными исследованиями и приложениями криптографии . Однако по мере того, как мультимедиа в значительной степени перешла на цифровые носители, потребность в той или иной форме SIMD в процессорах общего назначения стала значительной. Вскоре после того, как включение модулей с плавающей запятой стало обычным явлением в процессорах общего назначения, спецификации и реализации исполнительных модулей SIMD также начали появляться для процессоров общего назначения. Некоторые из этих ранних спецификаций SIMD - например, HP Multimedia Acceleration eXtensions (MAX) и Intel MMX - были только целочисленными. Это оказалось серьезным препятствием для некоторых разработчиков программного обеспечения, поскольку многие приложения, использующие SIMD, в основном работают с числами с плавающей запятой . Постепенно разработчики уточняли и переделывали эти ранние конструкции в некоторые из общих современных спецификаций SIMD, которые обычно связаны с одной архитектурой набора команд (ISA). Некоторые известные современные примеры включают Intel Streaming SIMD Extensions (SSE) и связанный с PowerPC AltiVec (также известный как VMX).

Виртуальные процессоры

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

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

Представление

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

Производительность обработки компьютеров повышается за счет использования многоядерных процессоров , которые, по сути, представляют собой подключение двух или более отдельных процессоров ( в этом смысле называемых ядрами ) в одну интегральную схему. В идеале двухъядерный процессор был бы почти вдвое мощнее одноядерного. На практике прирост производительности намного меньше, всего около 50%, из-за несовершенных программных алгоритмов и реализации. Увеличение количества ядер в процессоре (т. Е. Двухъядерных, четырехъядерных и т. Д.) Увеличивает обрабатываемую рабочую нагрузку. Это означает, что процессор теперь может обрабатывать многочисленные асинхронные события, прерывания и т. Д., Которые могут сказываться на ЦП при перегрузке. Эти ядра можно рассматривать как разные этажи на перерабатывающем предприятии, где каждый этаж выполняет свою задачу. Иногда эти ядра будут обрабатывать те же задачи, что и соседние с ними ядра, если одного ядра недостаточно для обработки информации.

Из-за специфических возможностей современных ЦП, таких как одновременная многопоточность и безъядерный процесс , которые предполагают совместное использование фактических ресурсов ЦП с целью повышения коэффициента использования, мониторинг уровней производительности и использования оборудования постепенно становился более сложной задачей. В ответ некоторые ЦП реализуют дополнительную аппаратную логику, которая отслеживает фактическое использование различных частей ЦП и предоставляет различные счетчики, доступные для программного обеспечения; примером является технология Intel Performance Counter Monitor .

Смотрите также

Примечания

использованная литература

внешняя ссылка