Как процессор может выполнять больше IPS, чем его частота? [Дубликат]


14

Это было то, что я не могу обернуть голову вокруг. Почти каждый современный процессор способен выполнять больше команд в секунду, чем его частота.

Я могу понять, почему процессоры более низкого класса могут выполнять меньше IPS, чем его частота. Например, ATmega328 выполняет около 16 MIPS на 16 МГц (или, по крайней мере, это то, что мне сказали), а Z80 выполняет 0,5 MIPS на 4 МГц. Но тогда Pentium 4 Extreme может выполнять более 9 GIPS только на 3,2 ГГц. Это примерно три инструкции за такт!

Как это сделать, и почему это не реализовано в меньших процессорах, таких как микроконтроллеры AVR ?

Я нашел всю свою информацию, кроме ATmega328, отсюда .


3
Взгляните на Википедию для таких модных слов, как конвейеризация, суперскалярная архитектура, неупорядоченное выполнение, многоядерная многопоточность, многоядерность, векторное расширение (SSE, ..., AVX), кэширование и так далее. В целом значение ИПЦ может быть ниже 1,0.
Паеббельс

7
Вы имели в виду 9 GIPS для Pentium 4, а не MIPS, не так ли?
Калимо

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

Я всегда задавался вопросом, разве я не должен голосовать что-то, если оно уже настолько высоко, как я думаю, должно быть? Или всегда приветствую, если я думаю, что усилия и качество сообщения заслуживают награды?
Питер Кордес

@PeterCordes Есть разные философии голосования. Некоторые утверждают, что «полезный» является единственным критерием, другие считают относительные достоинства (для ответов). Я склонен учитывать абсолютное количество голосов («хорошие», «хорошие», «отличные» почтовые значки подразумевают, что их следует учитывать), а также относительное количество голосов (что помогает ответить на рейтинг). Удивительно, но у Meta.SE, похоже, не так много на эту тему, а « Как мне голосовать? » Даже нет ответа!
Пол А. Клэйтон

Ответы:


23

Это связано с сочетанием особенностей современных процессоров.

Первое, что способствует высокой IPS, - это тот факт, что современные процессоры имеют несколько исполнительных блоков, которые могут работать независимо. На изображении ниже (заимствовано из Википедии: Intel Core Microarchitecture ) внизу видно, что есть восемь исполнительных блоков (показаны желтым цветом), которые могут выполнять инструкции одновременно. Не все из этих блоков могут обеспечивать одинаковые типы команд, но по крайней мере 5 из них могут выполнять операцию ALU, и есть три блока с поддержкой SSE.

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

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

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

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

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

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


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

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

4

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

Лучше, чем пытаться объяснить это самому, вот хорошая отправная точка .


3

Чтобы получить немного более фундаментальный, чем ответ Мокубая:

Суперскалярные процессоры анализируют поток команд на предмет данных (и других) зависимостей между инструкциями. Инструкции, которые не зависят друг от друга, могут выполняться параллельно.

Типичные настольные процессоры x86 извлекают 16 или 32B команд за такт. Intel разрабатывает, так как Core2 может выдавать до 4 инструкций за цикл. (Или 5, если есть сравнение и ответвление, которое может слиться с макрокомандой).

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

Также см. Http://www.realworldtech.com/sandy-bridge/ и аналогичные статьи для других архитектур ЦП для подробного объяснения того, что находится под капотом.


-2

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

Но другой источник этого может заключаться в том, что каждая «инструкция» на самом деле представляет собой определенный объем данных, обрабатываемых как инструкция, вводимая процессором. Если его источник считает только то, что процессор считает инструкциями, следующее ничего не добавляет. Но если его источник считает все то, что человек назвал бы «инструкцией», тогда: добавьте, что не каждая инструкция физически длинна, как любая другая инструкция (одна может быть 12 байтов, другая может быть 56 байтов и т. Д.). Таким образом, если он загружает 64 байта материала в каждом цикле как «инструкцию» (или столько полных инструкций, сколько может, прежде чем набрать 64 байта), и у каждого есть шесть инструкций в этих 64 байтах, то шесть инструкций (как вы и я могли бы их считать ) будет закончен в этом цикле.

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


Это немного близко к тому, как на самом деле работают процессоры, но выборка нескольких машинных инсинов за цикл - лишь часть того, как работает суперскалярный процессор. (а средняя длина insns больше равна 4 байта для x86.) Глубокие конвейеры означают, что извлекаемые инструкции теперь могут не завершиться в течение 15 циклов (или намного дольше, если задерживаются из-за пропадания кэша, но независимые инструкции могут продолжайте выполнять.) Ваше объяснение не описывает конвейерный дизайн вообще. Также неясно, в чем, на ваш взгляд, разница между 8-битным 8086 add al, blи 80386 add eax, ebx.
Питер Кордес

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.