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

редактировать
Intel Core микроархитектура

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

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

Содержание
  • 1 Отношение к архитектуре набора команд
  • 2 Аспекты
  • 3 Концепции микроархитектуры
    • 3.1 Циклы команд
    • 3.2 Многоцикловая микроархитектура
    • 3.3 Увеличение скорости выполнения
    • 3.4 Выбор набора команд
    • 3.5 Конвейерная обработка команд
    • 3.6 Кэш
    • 3.7 Предсказание ветвления
    • 3.8 Суперскаляр
    • 3.9 Выполнение вне очереди
    • 3.10 Переименование регистров
    • 3.11 Многопроцессорность и многопоточность
  • 4 См. также
  • 5 Ссылки
  • 6 Дополнительная литература
Связь с архитектурой набора команд
Микроархитектура, организованная вокруг одной шины

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

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

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

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

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

Аспекты
Intel 80286 микроархитектура

конвейерная 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, вернулись к более простым (скалярным, упорядоченным) конструкциям, чтобы уместить больше процессоров на одном кристалле кремния.

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

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

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

См. Также
  • значок Портал электроники
Викискладе есть носители, относящиеся к Микроархитектурам.
Ссылки
Дополнительная литература
Последняя правка сделана 2021-05-30 09:59:59
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте