Почему вы не можете иметь как высокие инструкции за такт, так и высокую тактовую частоту?

37

Миф о мегагерцах стал рекламной тактикой из-за различий между процессором INTEL 8086 для ПК и процессором Apple Rockwell 6502. 8086 работал на частоте 4,77 МГц, а 6502 - на 1 МГц. Однако инструкции на 6502 требовали меньше циклов; на самом деле на столько меньше, что он работает быстрее, чем 8086. Почему некоторым инструкциям требуется меньше циклов? И почему нельзя объединить инструкции 6502, требующие меньшего количества циклов, с быстродействующим процессором 8086?

В статье Википедии об инструкциях за цикл (IPC) говорится

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

Почему вы не можете иметь как высокие инструкции за такт, так и высокую тактовую частоту?

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

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

Любое понимание было бы здорово! Просто пытаюсь понять архитектуру мифа. Благодарность!

Ссылки:

Инструкция за цикл против увеличенного количества циклов

http://en.wikipedia.org/wiki/Instructions_per_cycle

http://en.wikipedia.org/wiki/Clock_cycle

dobus
источник
1
> Почему некоторые инструкции требуют меньше циклов? RISC / CISC (ну вроде ). И почему нельзя объединить инструкции 6502, требующие меньшего количества циклов, с быстродействующим процессором 8086? Они могут и есть. Проблема в том, что, как только вы уже создали базу, трудно все бросить и запустить следующую модель с нуля.
Synetech
@Synetech, компания Intel своего рода, сделала это, представив набор инструкций CISC программистам, а затем преобразовав их в инструкции RISCier на чипе
soandos
Хорошо, когда я сказал, что эти два были объединены, я имел в виду совершенно разных производителей чипов. У меня нет списка под рукой, но были другие (не Intel / AMD), которые сделали такие вещи. (Большинство людей забывают, что существует множество производителей микросхем, потому что Intel и AMD сейчас доминируют на рынке настольных компьютеров.)
Synetech

Ответы:

21

ТЛ; др

Более короткие конвейеры означают более высокие тактовые частоты, но могут снизить пропускную способность. Также смотрите ответы № 2 и 3 внизу (обещаю, что они короткие).

Более длинная версия:

Здесь есть несколько вещей, которые следует учитывать:

  1. Не все инструкции занимают одно и то же время
  2. Не все инструкции зависят от того, что было сделано немедленно (или даже десять или двадцать) инструкции назад

Очень упрощенный конвейер (то, что происходит в современных микросхемах Intel, более сложен) состоит из нескольких этапов:

Выбрать -> Декодировать -> Доступ к памяти -> Выполнить -> Обратная запись -> Обновление счетчика программы

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

Допустим, у вас есть 5 инструкций, и вы хотите их выполнить (рис, взятый из википедии, здесь обновление для ПК не сделано). Это будет выглядеть так:

введите описание изображения здесь

Даже если для выполнения каждой инструкции требуется 5 тактов, готовая инструкция выходит из конвейера каждый цикл. Если время, необходимое для каждой стадии, составляет 40 нс и 15 нс для промежуточных битов (используя мой шестиступенчатый конвейер выше), то для получения первой инструкции потребуется 40 * 6 + 5 * 15 = 315 нс.

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

Реальное отличие заключается в том, что в конвейерном примере я получаю новую инструкцию (после первой) каждые 60 нс. В нетранслируемом это занимает 240 каждый раз. Это показывает, что конвейеры хороши в улучшении пропускной способности.

Если сделать еще один шаг, то на этапе доступа к памяти мне понадобится дополнительный модуль (для вычисления адреса). Это означает, что если есть инструкция, которая не использует этап mem в этом цикле, то я могу сделать другое дополнение. Таким образом, я могу выполнить два этапа выполнения (один из которых находится на этапе доступа к памяти) на одном процессоре за один такт (планирование - это кошмар, но не будем идти туда. Кроме того, на этапе обновления ПК также потребуется дополнительный модуль в случай прыжка, поэтому я могу сделать три дополнительных состояния выполнения за один тик). Имея конвейер, он может быть спроектирован таким образом, чтобы две (или более) инструкции могли использовать разные этапы (или этапы перепрыгивания и т. Д.), Экономя ценное время.

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

Ответ № 2:

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

Ответ № 3:

Потому что вы можете «обмануть» искусственно удлинить счетчик циклов, чтобы вы могли выполнять две инструкции в каждом цикле (просто вдвое уменьшите тактовую частоту). Также возможно делать что-то только каждые два такта, в отличие от одного (давая 2-кратную тактовую частоту, но не меняя инструкции в секунду).

soandos
источник
3
Короткие трубопроводы означают более медленные часы! У Pentium 4 были высокие тактовые частоты из-за длинных конвейеров, вот WP: «NetBurst отличался от P6 (Pentium III, II и т. Д.) Тем, что имел очень глубокий конвейер команд для достижения очень высоких тактовых частот». Дело в том, что вы делаете мало за этап, чтобы достичь высоких скоростей. Однако это оказалось нереализуемым, и Intel потеряла из-за этого огромный импульс для AMD. Они вернулись к архитектуре Pentium 3 и придумали «Core».
stolsvik
@stolsvik, можешь объяснить это? Это не имеет смысла для меня (если меньше промежуточных стадий, то при прочих равных такты будут короче, что даст большую тактовую частоту)
soandos
4
Один этап конвейера выполняется за тактовый цикл ; Весь конвейер продвигается на один шаг за такт - выбирая новые инструкции внизу, «испуская» законченные инструкции вверху. Поэтому идея с Pentium4 заключалась в том, чтобы делать очень маленькие шаги, которые выполнялись быстро, давали высокие тактовые частоты, но, следовательно, требовали длинного конвейера. Подсказка с конвейером (все процессоры используют один) заключается в том, что у вас есть несколько выполняющихся инструкций в любое время. Длинный конвейер означает, что выполняется много инструкций - и если прогноз ветвления не сработает, вам придется очистить весь конвейер.
stolsvik
Для вашего ответа № 2 ЦП получает доступ к данным только через кеш (доступ к памяти обычно прозрачен с точки зрения инструкции). Замедление тактовой частоты не повлияет на то, сколько времени потребуется для получения данных из ОЗУ (если их нет в кеше). Кроме того, ширина шины влияет только на скорость операций SIMD относительно размера ваших операндов (т.е. я могу загрузить 8 8-битных операндов одновременно на 64-битной шине, но мне все равно придется вручную загружать 8 64-битных значений если у меня есть 64-битные операнды).
Прорыв
2
Также для ответа № 1, когда вы говорите «если есть инструкция, которая не использует этап mem в этом цикле, тогда я могу сделать другое дополнение», это неверно. Внеочередное исполнение применяется на уровне инструкций, а не на уровне микроопераций. Если инструкция действительно требует двух выполнений в конвейере, это вызовет пузырь в конвейере . Наконец, архитектура x86 имеет отдельный ALU для вычисления адресов памяти на лету во время чтения / записи памяти (допускает [EBX+ECX*4+100]адресацию стиля).
Прорыв
8

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

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

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

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

allquixotic
источник
Это на самом деле не отвечает на его вопрос (который не имеет ничего общего с тем, почему нельзя просто ускорить процесс). Он спрашивает, как больше циклов! = Больше работы все время
soandos
Этот ответ, однако, решает проблему, которую я не видел в других ответах, то есть он говорит о включении определенных наборов команд, которые выполняют операции с меньшим количеством тактов, и о возможности измерения тактов на основе самых медленных наборов команд, которые могут не быть таким эффективным. (Я могу быть очень неправ, хотя ... Я нахожу архитектуру восхитительной, но я не буду считать себя экспертом в любом случае)
Стивен Р.
5

Вот очень простое (возможно, чрезмерно упрощенное) объяснение: скажем, у вас есть конкретная работа, скажем, добавьте два 32-битных числа. Вы можете принять два подхода. Вы можете разбить его на очень большое количество очень маленьких шагов, или вы можете разбить его на небольшое количество очень больших шагов.

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

В качестве альтернативы вы можете сказать: «Получите первое число в регистр. Затем выберите второе число. Затем добавьте младшие значащие биты. Затем добавьте второй младший значащий бит с переносом из предыдущего. Затем добавьте третий по меньшей мере ... Затем добавьте наиболее значимые биты. Если был перенос, установите флаг переполнения. Затем запишите результат в память. " Теперь у вас огромное количество шагов. Но каждый шаг может быть нелепо быстрым. Таким образом, у вас есть низкие инструкции за цикл (в этом случае 1/36). Но ваша тактовая частота может быть очень высокой, поскольку каждый цикл имеет очень маленький бит.

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

Фактические конкретные компромиссы и числа циклов сильно различаются, потому что современные процессоры конвейерны и накладываются друг на друга. Но основная идея верна.

Дэвид Шварц
источник
2

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

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


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

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

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

Влияние многоцикловых операций менее заметно на схему RISC (например, ARM), чем на схему CISC (то есть x86). Это связано с тем, что в конструкциях на основе RISC будут использоваться только наиболее часто используемые элементарные операции, и их будет намного проще выполнять конвейером таким образом, чтобы достичь пропускной способности одной инструкции за цикл.

Прорвать
источник
1

Сколько времени тратит ваш компьютер для выполнения определенной задачи, не зависит от тактовой частоты компьютера ... это зависит от того, как вычислительные единицы спроектированы и спроектированы.

Тактовая частота - это (более или менее) произвольное решение, принятое разработчиком ЦП, иногда по веским причинам (эффективность), иногда из-за плохих (реклама).

Предположим, что данный процессор имеет набор команд, выполнение которых занимает от 1 до 100 наносекунд (нс). Вы можете установить тактовую частоту так, чтобы 1 «тик» составлял 100 нс (10 МГц), то есть каждая инструкция заканчивалась ровно за 1 тик. Однако, если время выполнения инструкции распределено равномерно, это означает, что ваши вычислительные единицы будут простаивать в 50% случаев (средняя скорость выполнения будет равна 50 нс, а остальные 50 нс тика будут простаивать). С другой стороны, если вы установите тик равным 10 нс, инструкции будут находиться в диапазоне от 1 до 10 тиков, но устройство никогда не будет простаивать более 9 нс до начала следующей инструкции, а среднее время простоя будет 5 нс.

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

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

TL; DR

Процессор может выполнить X работу в секунду. Если вы используете тактовую частоту H и I IPC, мы имеем I = X / H. Изменение H не меняет X, но оно обратно влияет на I.

Бенджамин Чамберс
источник
1
Тактовая частота далека от произвольного решения. Его необходимо тщательно выбирать в зависимости от напряжения питания процессора, а также длины трасс IC (чтобы избежать чрезмерных задержек распространения).
Прорыв
Я думаю, что вы упустили тот факт, что процессор представляет собой синхронную цифровую схему . Инструкции не занимают X наносекунд (при условии, что ваш тактовый цикл меньше задержки распространения), все происходит с нарастающим или падающим фронтом тактового сигнала - или с обоими. Инструкции занимают X циклов, а не X единиц времени. Да, вы можете изменить продолжительность цикла, но различие заключается в том, что происходит, когда. И, наконец, объем работы, которую процессор может выполнить за секунду, зависит от тактовой частоты, так что ваша формула здесь на самом деле не проверяется.
cp2141
Процессор - это синхронное объединение нескольких асинхронных блоков. Тиковые такты используются для правильного выравнивания, но они не определяют, сколько времени занимает выполнение ... Например, целочисленное добавление займет определенное количество времени в зависимости от того, как далеко ток должен пройти через процессор и как быстро транзисторы будет переключать состояния. Результатом является READ на следующем такте, но фактические вычисления выполняются асинхронно на протяжении всего такта.
Бенджамин Чамберс
0

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

Можно показать, что в первом приближении МПК зависит от сложности (А) конструкции, так как

IPC = кв. М (A)

в то время как максимальная частота (F), достижимая при проектировании, масштабируется как [1]

F = 1 / {b + c sqrt (A)}

с параметрами a, b и c.

Таким образом, увеличение сложности муарха увеличивает IPC за счет снижения рабочей частоты, тогда как уменьшение сложности увеличивает частоту за счет IPC. Это соответствует двум крайним случаям, упомянутым в статье в википедии, но в википедии не упоминаются имена: Brainiac и speed-demon.

  • Дизайн Brainiac: высокая IPC и низкая частота
  • Speed-demon desing: высокая частота и низкий IPC.

[1] Некоторые авторы утверждают, что выражение для частоты вместо этого равно «1 / {b + c A}», но в обоих случаях увеличение сложности уменьшает максимально достижимую частоту.

juanrga
источник