Миф о мегагерцах стал рекламной тактикой из-за различий между процессором INTEL 8086 для ПК и процессором Apple Rockwell 6502. 8086 работал на частоте 4,77 МГц, а 6502 - на 1 МГц. Однако инструкции на 6502 требовали меньше циклов; на самом деле на столько меньше, что он работает быстрее, чем 8086. Почему некоторым инструкциям требуется меньше циклов? И почему нельзя объединить инструкции 6502, требующие меньшего количества циклов, с быстродействующим процессором 8086?
В статье Википедии об инструкциях за цикл (IPC) говорится
Факторы, определяющие IPC Заданный
уровень команд в секунду может быть достигнут с высокой IPC и низкой тактовой частотой ... или с низкой IPC и высокой тактовой частотой.
Почему вы не можете иметь как высокие инструкции за такт, так и высокую тактовую частоту?
Может быть, это связано с циклом часов? Википедия упоминает синхронизацию цепей? Не уверен, что это значит.
Или, может быть, это связано с тем, как работает конвейер? Я не уверен, почему инструкции в коротком конвейере отличаются от инструкций в длинном конвейере.
Любое понимание было бы здорово! Просто пытаюсь понять архитектуру мифа. Благодарность!
Ссылки:
Инструкция за цикл против увеличенного количества циклов
Ответы:
ТЛ; др
Более короткие конвейеры означают более высокие тактовые частоты, но могут снизить пропускную способность. Также смотрите ответы № 2 и 3 внизу (обещаю, что они короткие).
Более длинная версия:
Здесь есть несколько вещей, которые следует учитывать:
Очень упрощенный конвейер (то, что происходит в современных микросхемах Intel, более сложен) состоит из нескольких этапов:
Выбрать -> Декодировать -> Доступ к памяти -> Выполнить -> Обратная запись -> Обновление счетчика программы
В каждом -> есть временные затраты. Кроме того, каждый тик (тактовый цикл), все перемещается от одного этапа к следующему, поэтому ваша самая медленная стадия становится скоростью для ВСЕХ этапов (это действительно платит за то, чтобы они были максимально похожими по длине).
Допустим, у вас есть 5 инструкций, и вы хотите их выполнить (рис, взятый из википедии, здесь обновление для ПК не сделано). Это будет выглядеть так:
Даже если для выполнения каждой инструкции требуется 5 тактов, готовая инструкция выходит из конвейера каждый цикл. Если время, необходимое для каждой стадии, составляет 40 нс и 15 нс для промежуточных битов (используя мой шестиступенчатый конвейер выше), то для получения первой инструкции потребуется 40 * 6 + 5 * 15 = 315 нс.
Напротив, если бы я полностью исключил конвейер (но сохранил все остальное), потребовалось бы всего лишь 240 нс, чтобы вывести первую инструкцию. (Эта разница в скорости для выдачи «первой» инструкции называется задержкой. Как правило, она менее важна, чем пропускная способность, то есть количество инструкций в секунду).
Реальное отличие заключается в том, что в конвейерном примере я получаю новую инструкцию (после первой) каждые 60 нс. В нетранслируемом это занимает 240 каждый раз. Это показывает, что конвейеры хороши в улучшении пропускной способности.
Если сделать еще один шаг, то на этапе доступа к памяти мне понадобится дополнительный модуль (для вычисления адреса). Это означает, что если есть инструкция, которая не использует этап mem в этом цикле, то я могу сделать другое дополнение. Таким образом, я могу выполнить два этапа выполнения (один из которых находится на этапе доступа к памяти) на одном процессоре за один такт (планирование - это кошмар, но не будем идти туда. Кроме того, на этапе обновления ПК также потребуется дополнительный модуль в случай прыжка, поэтому я могу сделать три дополнительных состояния выполнения за один тик). Имея конвейер, он может быть спроектирован таким образом, чтобы две (или более) инструкции могли использовать разные этапы (или этапы перепрыгивания и т. Д.), Экономя ценное время.
Обратите внимание , что для того , чтобы сделать это, процессоры делают много «магии» ( из исполнения заказа , предсказания ветвлений и многое другое), но это позволяет несколько команд , чтобы выйти быстрее , чем без трубопровода (обратите внимание , что трубопроводы , которые являются слишком длинные очень сложны в управлении и требуют больших затрат, просто ожидая между этапами). Обратная сторона в том, что если вы сделаете конвейер слишком длинным, вы можете получить безумную тактовую частоту, но потерять большую часть первоначальных преимуществ (наличия логики одного типа, которая может существовать в нескольких местах и использоваться одновременно ).
Ответ № 2:
Процессоры SIMD (с одной инструкцией и несколькими данными) (как и большинство графических процессоров) выполняют много работы с большим количеством информации, но их выполнение занимает больше времени. Чтение всех значений занимает больше времени (означает более медленные часы, хотя это смещение из-за более широкой шины в некоторой степени), но вы можете выполнять намного больше инструкций за один раз (более эффективные инструкции за цикл).
Ответ № 3:
Потому что вы можете «обмануть» искусственно удлинить счетчик циклов, чтобы вы могли выполнять две инструкции в каждом цикле (просто вдвое уменьшите тактовую частоту). Также возможно делать что-то только каждые два такта, в отличие от одного (давая 2-кратную тактовую частоту, но не меняя инструкции в секунду).
источник
[EBX+ECX*4+100]
адресацию стиля).Я сильно упрощаю это, но важно помнить, что эти термины сравнивают яблоки с апельсинами. «Цикл» - это не единая единица измерения, которая одинакова для всех процессоров, как «секунда» - это единое измерение времени. Вместо этого цикл представляет собой определенную единицу работы, которая определяется несколько произвольно, но ограничена сложностью конструкции трубопровода и, конечно, физикой.
Во многих случаях выполнение большого количества работы за один цикл может позволить вам очистить весь конвейер. В случае успеха это означает, что ваш следующий цикл будет неоптимизирован, потому что вам придется снова заполнить конвейер, что может занять некоторое время.
Я мог бы разработать очень упрощенный процессор, который обрабатывал бы одну стадию одной инструкции RISC за цикл, и если бы это было основой моего процессора, я мог бы, вероятно, достичь очень, очень высоких циклов в секунду из-за уменьшенной сложности того, что составляет цикл».
Детали проникают во многие физические и электротехнические задачи, которые я не очень понимаю, но помните, что тактовая частота не достигается просто наивным добавлением входного напряжения к процессору и надеждой на лучшее. По крайней мере, тепловой профиль является еще одной необходимой проблемой.
источник
Вот очень простое (возможно, чрезмерно упрощенное) объяснение: скажем, у вас есть конкретная работа, скажем, добавьте два 32-битных числа. Вы можете принять два подхода. Вы можете разбить его на очень большое количество очень маленьких шагов, или вы можете разбить его на небольшое количество очень больших шагов.
Например, вы можете просто сказать «добавить два числа». Теперь у вас есть только один шаг. Но этот шаг состоит из нескольких частей и займет больше времени. Таким образом, у вас есть высокие инструкции за цикл - один в этом случае. Но ваша тактовая частота не может быть высокой, потому что у вас много дел в этом цикле.
В качестве альтернативы вы можете сказать: «Получите первое число в регистр. Затем выберите второе число. Затем добавьте младшие значащие биты. Затем добавьте второй младший значащий бит с переносом из предыдущего. Затем добавьте третий по меньшей мере ... Затем добавьте наиболее значимые биты. Если был перенос, установите флаг переполнения. Затем запишите результат в память. " Теперь у вас огромное количество шагов. Но каждый шаг может быть нелепо быстрым. Таким образом, у вас есть низкие инструкции за цикл (в этом случае 1/36). Но ваша тактовая частота может быть очень высокой, поскольку каждый цикл имеет очень маленький бит.
Чтобы иметь как высокие инструкции на такт, так и высокую тактовую частоту, вам придется разделить сложную инструкцию на очень небольшое количество очень простых шагов. Но этого нельзя сделать, потому что инструкция сложна.
Фактические конкретные компромиссы и числа циклов сильно различаются, потому что современные процессоры конвейерны и накладываются друг на друга. Но основная идея верна.
источник
Вы можете иметь как высокие инструкции за такт, так и высокую тактовую частоту. Вы ограничиваете время, когда задержка распространения цифрового канала превышает ширину импульса одиночного тактового цикла. Этого можно преодолеть путем увеличения напряжения на процессоре, но следует отметить, что это увеличит энергопотребление (и, следовательно, теплоотдачу).
Итак, если вы хотите увеличить тактовую частоту, вам нужно увеличить напряжение (увеличить скорость дрейфа электронов ), чтобы уменьшить задержку распространения. Если эта задержка превышает тактовый цикл, процессор, скорее всего, будет работать не так, как ожидалось, и работающее на нем программное обеспечение вылетит или выдаст исключение. Однако очевидно, что существует ограничение на напряжение, которое вы можете пропустить через процессор, и это продиктовано конструкцией самого процессора - главным образом, токонесущей способностью внутренних электрических каналов.
Конвейерная обработка допускает более высокие тактовые частоты в некоторых случаях, потому что каждая инструкция делится на несколько меньших «микроопераций». Эти микрооперации являются очень простыми операциями, использующими намного меньшие схемы, соединенные в цепочку (в физическом смысле, чем меньше расстояние, которое должны пройти электроны, тем короче задержка распространения через конкретную единицу).
Дополнительным преимуществом конвейерного процессора является то, что вы можете значительно увеличить количество команд, выполняемых за единицу времени, за счет более сложной конструкции.
Что касается того, почему некоторым инструкциям нужно больше или меньше циклов, это зависит от того, какую инструкцию вы выполняете. Например, в наборе команд x86 есть
MOVS
инструкция, которая может переместить всю строку в памяти из одного места в другое. Очевидно, что вы не можете мгновенно скопировать длинную строку, но вы можете копировать ее слово за словом, используя несколько тактов. Таким образом,MOVS
инструкция занимает переменное количество времени (в зависимости от количества копируемых символов).Влияние многоцикловых операций менее заметно на схему RISC (например, ARM), чем на схему CISC (то есть x86). Это связано с тем, что в конструкциях на основе RISC будут использоваться только наиболее часто используемые элементарные операции, и их будет намного проще выполнять конвейером таким образом, чтобы достичь пропускной способности одной инструкции за цикл.
источник
Сколько времени тратит ваш компьютер для выполнения определенной задачи, не зависит от тактовой частоты компьютера ... это зависит от того, как вычислительные единицы спроектированы и спроектированы.
Тактовая частота - это (более или менее) произвольное решение, принятое разработчиком ЦП, иногда по веским причинам (эффективность), иногда из-за плохих (реклама).
Предположим, что данный процессор имеет набор команд, выполнение которых занимает от 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.
источник
Нельзя иметь как высокие инструкции за такт, так и высокую тактовую частоту, потому что требования противоречивы.
Можно показать, что в первом приближении МПК зависит от сложности (А) конструкции, так как
IPC = кв. М (A)
в то время как максимальная частота (F), достижимая при проектировании, масштабируется как [1]
F = 1 / {b + c sqrt (A)}
с параметрами a, b и c.
Таким образом, увеличение сложности муарха увеличивает IPC за счет снижения рабочей частоты, тогда как уменьшение сложности увеличивает частоту за счет IPC. Это соответствует двум крайним случаям, упомянутым в статье в википедии, но в википедии не упоминаются имена: Brainiac и speed-demon.
[1] Некоторые авторы утверждают, что выражение для частоты вместо этого равно «1 / {b + c A}», но в обоих случаях увеличение сложности уменьшает максимально достижимую частоту.
источник