21

Я узнал немного больше о том, как работают процессоры, но я не смог найти прямой ответ об инструкциях за цикл.

Например, у меня сложилось впечатление, что четырехъядерный процессор может выполнять четыре инструкции за цикл, поэтому четырехъядерный процессор, работающий на частоте 2 ГГц, будет выполнять 8 миллиардов операций в секунду. Это тот случай?

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

6 ответов6

31

Мне нравится думать об этом с помощью аналогии со стиркой. Инструкции ЦП похожи на кучу белья. Вы должны использовать как стиральную машину, так и сушилку для каждой загрузки. Допустим, что каждому требуется 30 минут для бега. Это цикл часов. Старые процессоры запускали стиральную машину, затем запускали сушилку, занимая 60 минут (2 цикла), чтобы завершить каждую загрузку белья, каждый раз.

Конвейерная обработка: конвейер - это когда вы используете оба одновременно - вы моете загрузку, затем, пока она сушится, вы стираете следующую загрузку. Первая загрузка занимает 2 цикла, но вторая загрузка завершается после еще 1 цикла. Таким образом, большинству нагрузок требуется только 1 цикл, кроме первой загрузки.

Суперскаляр: отнесите все белье в прачечную. Получить 2 шайбы и загрузить их обе. Когда они закончат, найдите 2 сушилки и используйте их оба. Теперь вы можете стирать и сушить 2 загрузки за 60 минут. Это 2 нагрузки в 2 циклах. Каждая загрузка по-прежнему занимает 2 цикла, но вы можете сделать больше из них сейчас. Среднее время теперь составляет 1 нагрузку за цикл.

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

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

Это здорово, мы можем стирать в восемь раз больше, чем раньше, за то же время без необходимости создавать более быстрые машины. (Удвойте тактовую частоту: стиральные машины, для работы которых требуется всего 15 минут.)

Теперь давайте поговорим о том, как все идет не так:

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

Cache Miss: Грузовик, который доставляет грязное белье, застрял в пробке. Теперь у вас есть 2 стиральные машины и 2 сушилки, но вы не выполняете работу, потому что вам приходится ждать.

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

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

21

Ключевые слова, которые вы, вероятно, должны искать:CISC, RISC и суперскалярная архитектура.

CISC

В архитектуре CISC (x86, 68000, VAX) одна инструкция является мощной, но для ее обработки требуется несколько циклов . В более старых архитектурах количество циклов было фиксированным, в настоящее время количество циклов на инструкцию обычно зависит от различных факторов (попадание / пропуск кэша, прогноз ветвления и т.д.). Есть таблицы для поиска таких вещей. Часто есть также способ реально измерить, сколько циклов занимает определенная инструкция при определенных обстоятельствах (см. Счетчики производительности).

Если вас интересуют подробности об Intel, очень полезно прочитать Справочное руководство по оптимизации для Intel 64 и IA-32 .

RISC

Архитектура RISC (ARM, PowerPC, SPARC) означает, что обычно одна очень простая инструкция занимает всего несколько (часто только один) цикл.

Superscalar

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

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

2

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

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

2

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

Извините, это слишком сложно для прямого ответа. Джон Стоукс хорошо объясняет эту статью.

1

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

0

Cycles - это скорее концепция ядра. Каждое ядро делает там свои циклы параллельно.

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