34

Миф о мегагерцах стал рекламной тактикой из-за различий между процессором 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

6 ответов6

19

ТЛ; др

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

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

Здесь нужно учесть несколько вещей:

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

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

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

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

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

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

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

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

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

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

Ответ № 2:

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

Ответ № 3:

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

8

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

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

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

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

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 нс. Это означает, что ваше среднее время простоя уменьшилось с 50% (в среднем 50 нс из каждых 100) до 9% (поскольку среднее время выполнения теперь составляет 55 нс (среднее время выполнения 50 нс + среднее время простоя 5 нс)).

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

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

TL; DR

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

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}», но в обоих случаях увеличение сложности уменьшает максимально достижимую частоту.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .