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

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

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

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

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

Всю необходимую информацию, за исключением ATmega328, я нашел здесьздесь.

решение1

Это обусловлено совокупностью особенностей современных процессоров.

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

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

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

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

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

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

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

решение2

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

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

решение3

Если говорить немного более фундаментально, чем ответ Мокубаи:

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

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

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

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

решение4

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

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

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

Связанный контент