Что такое «Инструкции за цикл»?

15170
Matt Simmons

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

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

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

20
Нет, это не так. Современные процессоры x86 могут поддерживать три инструкции на ядро ​​за цикл в идеальных условиях, в то время как некоторые инструкции могут требовать десятков циклов. David Schwartz 12 лет назад 0

6 ответов на вопрос

30
Kevin Panko

Мне нравится думать об этом с помощью аналогии со стиркой. Инструкции ЦП похожи на кучу белья. Вы должны использовать как стиральную машину, так и сушилку для каждой загрузки. Допустим, что каждому требуется 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 загрузки за цикл, поэтому фактический объем выполненной работы может варьироваться.

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

Хорошая аналогия. Я собираюсь украсть это. dmckee 14 лет назад 0
А гиперпоточность подобна тому, как несколько человек стирают в одном прачечном. Ronald Pottol 14 лет назад 5
Предсказание филиала: вы начинаете стирать одежду, которая, по вашему мнению, понадобится на следующей неделе Akash 12 лет назад 1
Hyperthreading: вы начинаете принимать белье других людей и рекламируете количество стиральных машин, которые у вас есть (1). Вскоре вы понимаете, что в вашей стиральной машине есть место не только для пары штанов, которые вы стираете, но не для другой пары штанов, а для чего-то меньшего. Значит, ты тоже носишь носки. Теперь вы рекламируете 2 стиральные машины и надеетесь, что люди будут выкладывать белье достаточно разнообразным, чтобы вы всегда «заполняли дыры» мелкими предметами. Как раз когда этот парень, который когда-либо приходит с 10 грязными джинсами и 1 парой носков, роняет свои вещи, это происходит медленно, как никогда. Florenz Kley 12 лет назад 2
@Akash Вы стираете одежду, на которой еще нет пятен, на всякий случай? Kevin Panko 12 лет назад 0
@KevinPanko Предположим, что они грязные, а другая одежда тоже грязная, которую вы, вероятно, не будете использовать на следующей неделе. Akash 12 лет назад 0
Означает ли это, что машинный цикл отличается от тактового? один машинный цикл состоит из множества тактов? KawaiKx 10 лет назад 0
Нет, они здесь одно и то же. Kevin Panko 10 лет назад 0
21
Ludwig Weinzierl

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

CISC

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

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

RISC

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

Superscalar

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

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

Для меня аналогия с «сборочной линией» предполагает простую конвейеризацию, а не суперскалярную архитектуру. Суперскаляр включает в себя репликацию частей аппаратного обеспечения процессора (например, этап конвейера, который является узким местом) для повышения пропускной способности. sblair 14 лет назад 8
Я добавляю для краткости: RISC = сокращенный набор инструкций; CISC = сложный набор команд. Хорошее объяснение, Людвиг за то, что он указал соотношение попаданий и промахов в кэш и (в конечном итоге) указал на TLB. Объяснить архитектуру микропроцессора нелегко, особенно втиснуть все в один (довольно компактный) пост! :) osij2is 14 лет назад 2
Из того, что я слышал, процессоры в эти дни проводят много времени в ожидании работы, чтобы появиться из основной памяти. По крайней мере, это был ответ, который я получил, когда спросил, почему в процессоре больше нет исполнительных ядер. surfasb 12 лет назад 1
2
hyperslug

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

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

2
dmckee

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

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

1
Synetech

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

0
Joakim Elofsson

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

Похожие вопросы