Микроархитектура - Microarchitecture

Схема микроархитектуры Intel Core 2

В компьютерной технике , микроархитектуре , называемые также компьютерная организация и иногда сокращенно μarch или uarch , это то , как данный набор команд архитектура (ISA) реализована в конкретном процессоре . Данная ISA может быть реализована с различными микроархитектурами; реализации могут отличаться из-за различных целей данного дизайна или из-за изменений в технологии.

Компьютерная архитектура - это сочетание микроархитектуры и архитектуры набора команд.

Отношение к архитектуре набора команд

Микроархитектура, организованная вокруг единого автобуса

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

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

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

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

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

Аспекты

Микроархитектура Intel 80286

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

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

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

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

Микроархитектурные концепции

Циклы обучения

Для запуска программ все одно- или многочиповые процессоры:

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

Цикл команд повторяется непрерывно, пока не будет отключено питание.

Многоцикловая микроархитектура

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

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

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

Повышение скорости выполнения

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

Выбор набора инструкций

Наборы инструкций с годами изменились, от изначально очень простых до иногда очень сложных (в различных отношениях). В последние годы в моде архитектуры «загрузка – сохранение» , типы VLIW и EPIC . Архитектуры, которые имеют дело с параллелизмом данных, включают SIMD и векторы . Некоторые метки, используемые для обозначения классов архитектур ЦП, не особенно описательны, особенно метка CISC; многие ранние разработки, ретроактивно обозначаемые как « CISC », на самом деле значительно проще современных процессоров RISC (в нескольких отношениях).

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

Конвейерная обработка инструкций

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

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

RISC делает конвейеры меньше и намного проще в построении, четко разделяя каждый этап процесса инструкций и заставляя их занимать одинаковое количество времени - один цикл. Процессор в целом работает как конвейерная линия , причем инструкции поступают с одной стороны, а результаты - с другой. Из-за меньшей сложности классического конвейера RISC конвейерное ядро и кэш инструкций могут быть размещены на кристалле того же размера, который в противном случае поместился бы только на ядро ​​в конструкции CISC. Это была настоящая причина того, что RISC был быстрее. Ранние разработки, такие как SPARC и MIPS, часто работали в 10 раз быстрее, чем решения Intel и Motorola CISC при той же тактовой частоте и цене.

Трубопроводы никоим образом не ограничиваются проектами RISC. К 1986 году топовая реализация VAX ( VAX 8800 ) представляла собой сильно конвейерную конструкцию, немного предшествующую первым коммерческим проектам MIPS и SPARC. Большинство современных ЦП (даже встроенных ЦП) теперь имеют конвейерную обработку, а микрокодированные ЦП без конвейерной обработки видны только во встроенных процессорах с наиболее ограниченной площадью. Большие машины CISC, от VAX 8800 до современных Pentium 4 и Athlon, реализуются как с микрокодом, так и с конвейерами. Усовершенствования конвейерной обработки и кэширования - это два основных достижения в области микроархитектуры, которые позволили производительности процессора идти в ногу со схемной технологией, на которой они основаны.

Кэш

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

В RISC-проектах кэш-память начала добавляться в середине-конце 1980-х, часто всего 4 КБ. Это число со временем росло, и типичные процессоры теперь имеют не менее 512 КБ, в то время как более мощные процессоры поставляются с 1, 2 или даже 4, 6, 8 или 12 МБ, организованными на нескольких уровнях иерархии памяти . Вообще говоря, больший объем кеша означает большую производительность из-за меньшего простоя.

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

Прогноз ветвления

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

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

Суперскаляр

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

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

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

Внеочередное исполнение

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

Регистрация переименования

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

Многопроцессорность и многопоточность

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

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

Одним из способов достижения этого параллелизма является использование многопроцессорных систем, компьютерных систем с несколькими процессорами. Когда-то зарезервированные для высокопроизводительных мэйнфреймов и суперкомпьютеров , маломасштабные (2–8) многопроцессорные серверы стали обычным явлением для рынка малого бизнеса. Для крупных корпораций распространены крупномасштабные (16–256) мультипроцессоры. Даже персональные компьютеры с несколькими процессорами появились с 1990-х годов.

С дальнейшим уменьшением размера транзисторов, доступным с развитием полупроводниковой технологии, появились многоядерные процессоры , в которых несколько процессоров реализованы на одном кремниевом кристалле. Первоначально использовался в микросхемах, нацеленных на рынки встраиваемых систем, где более простые и небольшие процессоры позволили бы разместить несколько экземпляров на одном кристалле. К 2005 году полупроводниковые технологии позволили производить в больших объемах двойные высокопроизводительные процессоры CMP для настольных ПК . Некоторые проекты, такие как Sun Microsystems " UltraSPARC T1 вернулись к более простому (скаляр, в заказ) конструкции для того , чтобы соответствовать более процессоров на одном кристалле кремния.

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

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

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

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

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

дальнейшее чтение