Русский
Русский
English
Статистика
Реклама

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

Перевод Как процессор 8086 работает с питанием и сигналами тактовой частоты

03.09.2020 14:17:53 | Автор: admin
Одна из недооценённых характеристик ранних микропроцессоров сложность в распределении питания внутри интегральной схемы. У современного процессора может быть 15 слоёв металла с проводниками, но у чипов из 1970-х, например, у 8086, был всего один металлический слой, из-за чего разводка проводников представляла собой проблему. Сигналы тактовой частоты (синхросигналы) тоже нужно доводить до всех частей чипа, чтобы все они работали синхронно.

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


Фото кристалла 8086, где видно место подачи питания (вверху) и контакты земли (вверху и внизу). Цепи синхросигнала расположены внизу.

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

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

Распределение питания


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

Распределение энергии в чипе, подобном 8086, представляет собой некую топологическую головоломку. Из-за его низкого сопротивления металлический слой остаётся единственным практически полезным для разводки питания и земли. Питание и землю нужно подавать почти на все затворы чипа. А поскольку металлический слой у чипа один, питание и земля пересекаться не могут.

Питание и землю нужно подавать почти на все затворы чипа, поскольку стандартному затвору К-МОП требуется земля для его подтягивающей вниз сети и питание для подтягивающего вверх резистора. Однако есть и несколько исключений. 8086 использует динамические логические затворы, особенно в АЛУ для скорости. Эти затворы притягиваются вверх синхросигналом, поэтому прямая подача питания им не нужна. Также 8086 использует несколько XOR-затворов у проходных транзисторов, которые притягиваются вниз входящим сигналом, поэтому им не нужна земля.

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

На диаграмме ниже размечены металлические проводники в 8086. Питание, соединённое с контактом питания сверху, показано красным. Мощная ветка питания идёт вниз и вправо, а потом разделяется на множество ответвлений. Также питание проходит по границе всего чипа, обеспечивая энергией I/O контакты.

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


Питание (красное) и земля (синяя, зелёная) на металлическом слое чипа

Контактов земли два. Отмеченные синим дорожки соединяются с верхним контактом земли, а зелёные с нижним. У отмеченных синем дорожек земли видно толстое ответвление, идущее вниз через центр чипа, и разветвляющееся сложным образом по всем направлениям. Зелёные дорожки идут по низу, с левой и правой сторон чипа, поддерживая контакты I/O, а также соединяясь с ПЗУ микрокода справа внизу.

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


Соединение контактов адресов и данных с землёй становится всё тоньше (левая сторона чипа, повёрнутая на 90)

Металлический слой используется для передачи многих сигналов, а не только питания и земли. Из-за его низкого сопротивления это лучший слой для передачи сигналов. Однако широкое использование проводников питания и земли ограничивает возможности металлического слоя. Дабы избежать пересечений, большинство дорожек для передачи сигнала на металлическом слое идут параллельно дорожкам питания. Слой поликремния снизу используется для перпендикулярной передачи сигналов. Но что будет, если металлическому проводнику нужно пересечь дорожку питания или земли? Решение провести его снизу [crossunder]. Сигнал спускается на уровень поликремния, пересекает дорожку, и затем поднимается обратно наверх, как показано ниже.

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


Сигналы на металлическом слое пересекают дорожки питания снизу посредством поликремниевого слоя

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


Композитное фото, на котором показаны обходные дорожки земли, идущие через поликремний под сигнальными дорожками.

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


Затворы, сделанные посредством кремния с примесями, можно удлинить, чтобы они доставали до шин питания и земли. Для этой фотографии металлический слой был удалён.

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


Две версии 8086 в одном масштабе. Кристалл справа более поздний вариант, уменьшенный в размере.

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


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


Двухфазный формирователь синхронизирующих импульсов состоит из двух синхросигналов противоположной полярности

Хотя почти все компьютеры используют синхросигналы для синхронизации, машинная архитектура IAS (популярная в 1950-х) была асинхронной, и работала без синхросигналов. Вместо этого каждая цепь по окончанию работы посылала импульс следующей, запуская выполнение следующего шага. Многие ранние компьютеры 1950-х были основаны на этой архитектуре, включая CYCLONE, ILLIAC, JOHNNIAC, MANIAC, SEAC и IBM 701. Исследования возможностей асинхронных вычислений продолжаются, но синхронные системы определённо доминируют.

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

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

У 8086 строгие требования к входящему синхросигналу, который должен находиться на высоком уровне треть времени. Обычно генерацией синхросигнала в 8086 занимался чип 8284 и кварцевый кристалл. Чип делил входящий синхросигнал на 3, чтобы выдавать 33% рабочего цикла синхросигнал, требуемый 8086.

В современных процессорах разводка синхросигнала очень сложная, поскольку сигнал должен доходить до всех частей чипа одновременно. Современные процессоры используют иерархию путей синхросигнала, балансируют время прохождения по каждому из путей, и часто обеспечивают отдельную буферизацию для каждого пути. Для сравнения, разводка синхросигнала в 8086 сделана прямолинейно, поскольку его тактовая частота в 5-10 МГц на несколько порядков меньше, чем у современных процессоров. На таких относительно малых частотах длина пути не имеет особого значения, поэтому тактовые импульсы у 8086 могут идти по извилистым путям.

Поскольку 8086 использовал динамическую логику, у него была и минимально допустимая тактовая частота в 2 МГц. Если частота будет меньше, есть риск утечки заряда до момента его обновления, что может приводить к отказам. Минимальная тактовая частота была неудобна с точки зрения отладки, поскольку замедлить или остановить синхросигнал было невозможно.


Разводка путей синхросигналов в 8086. Зелёный первый синхросигнал, а красный второй, с противоположной фазой

На диаграмме выше показана разводка путей синхросигналов в 8086. Фаза 1 отмечена зелёным, а фаза 2 красным. Внизу чипа цепи формирователя синхронизирующих импульсов выглядят как большие пятна. Оттуда синхросигналы разветвляются по всему чипу. По большей части две фазы синхросигналов идут параллельно, в отличие от питания и земли с их противоположными ветвями.

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


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

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


Крупный транзистор в формирователе синхронизирующих импульсов по сравнению с соседним логическим транзистором

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


Цепь формирователя синхронизирующих импульсов на кристалле. Металлический слой удалён. Видны крупные транзисторы. Входящий контакт внешнего синхросигнала розовый квадрат слева.

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


Упрощённая принципиальная схема формирователя синхронизирующих импульсов в 8086

Дополнительные цепи не дают синхросигналам накладываться: когда один сигнал высокий, это посредством инвертированного входа заставляет второй сигнал быть низким. Чтобы понять, как это работает, начнём с момента, когда сигнал на контакте clk in высокий. Сигналы clk in и clock высокие, а ^clk in^ и ^clock^ низкие. Теперь, допустим, входящий сигнал на clk in становится низким, что заставляет сигнал на clk in понизиться, а на ^clk in^ повыситься. Однако выход ^clock^ не может повыситься, пока clock не понизится. После этого сигнал ^clk in^ пойдёт через нижние формирователи, подтягивая ^clock^ вверх после двух вентильных задержек. Смысл в том, что clock и ^clock^ не переключаются одновременно. После того, как один становится низким, происходит задержка перед тем, как второй становится высоким. В результате мы получаем не накладывающиеся синхросигналы.

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

Заключение


8086 использует интересную разводку питания, но современные процессоры работают на совершенно другом уровне. Если 8086 требовались 350 мА, то современному процессору может потребоваться более 100 А. 8086 использовал 3 из 40 своих ног для питания и земли. У современных процессоров Intel Core i5 128 контактов питания и 377 земли (из общего количества в 1151 контакт). Хотя многочисленные металлические слои в современных чипах решают проблемы 8086 с разводкой, у них появляются новые сложности вроде разделения чипа на участки по питанию, что позволяет отключать неиспользуемые участки.

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

Перевод Что общего в работе заводского конвейера и микропроцессора?

26.03.2021 12:06:50 | Автор: admin

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

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

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

Мы рассмотрим следующие понятия:

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

Увеличение тактовой частоты


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

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

Проще всего объяснить на примере склада и робота. Наш робот подбирает контейнеры с одной стороны склада и доставляет на противоположную.


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


Робот занят перемещением оранжевого контейнера до конца линии.

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

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

Преимущества маленьких микропроцессоров


Если мы не можем сделать робота быстрее, как выполнить работу за меньшее количество времени? В терминах микропроцессоров вопрос звучит так: если мы не можем ускорить электроны, как нам заставить их оказаться в нужном месте быстрее?

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


Перемещение контейнеров на меньшее расстояние происходит быстрее.

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

Параллельное выполнение


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

Векторная обработка


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


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

Для дополнительного изучения: RISC-V Vector Instructions vs ARM and x86 SIMD.

Несколько микропроцессорных ядер


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


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

Конвейеризация


Наконец, мы добрались до конвейеризации. Что если мы не можем сделать процессор меньше? В параллели со складом это значит, что мы не можем уменьшить расстояние до места, куда контейнер (данные) должен быть доставлен. Мы говорим о перемещении контейнера как об инструкции.

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

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


Перемещение контейнера разделено на три шага. Каждый робот переносит контейнер только на треть пути.

Такт 1


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


Два робота простаивают первое время, пока конвейер заполняется. Первый робот перемещает оранжевый контейнер на одну треть пути. Это первый такт.

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


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

Такт 2


Во втором такте второй робот начинает перемещать оранжевый контейнер, а первый робот подбирает желтый контейнер. Обратите внимание, что сотрудники склада добавили зеленый контейнер.


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

Когда второй такт завершен, оранжевый контейнер лежит перед третьим роботом. Второй робот может подобрать желтый контейнер. А третий робот подберет новый зеленый контейнер.


Второй такт завершен. Весь конвейер заполнен. В следующем такте все три робота будут работать параллельно.

Такт 3


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


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

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

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


Мы можем описать это двумя важными концепциями.

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

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

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

RISC и CISC


Эта причина, по которой ранние процессоры RISC, такие как MIPS и SPARC, используемые на рабочих станциях Unix в 1990-х годах, были быстрее, чем их аналоги на x86. CISC-процессоры не учитывали конвейеризацию при проектировании, в отличие от RISC. Инструкции RISC разделены на четыре логических шага. Это позволяет построить конвейер на четыре шага. Получается, RISC-инструкция требует четыре такта на исполнение, но каждый такт завершается выполнением одной инструкции.

Дополнительное чтение: What Does RISC and CISC Mean in 2020?

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

Дополнительное чтение: What the Heck is a Micro-Operation?

Дальнейшее развитие конвейеризации


Intel начала разделять свои инструкции на все меньшие части, что позволило компании резко увеличить тактовую частоту процессоров. Так, например, Pentium 4 имел зверскую частоту. Это сделало конвейеры Intel очень длинными.

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

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

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

Вот почему у Apple были слайды со сравнением RISC-чипов PowerPC, которые они использовали до 2006 года, с процессорами Intel Pentium. Процессор Pentium имел более высокую тактовую частоту, но и гораздо более длинный конвейер. Тогда люди считали тактовую частоту эквивалентом производительности. Как вы видим, эти термины связаны, но это не совсем одно и то же.

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

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

Но это, вероятно, будет темой следующей технической статьи.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru