Инструкции Википедии на второй странице гласят, что i7 3630QM обеспечивает ~ 110 000 MIPS на частоте 3,2 ГГц; это будет (110 / 3,2 инструкции) / 4 ядра = ~ 8,6 инструкции на цикл на ядро ?! Как одно ядро может доставить более одной инструкции за цикл?
Насколько я понимаю, конвейер должен быть в состоянии доставить только один результат за такт.
Это мои мысли:
- Внутренняя частота на самом деле выше, чем 3,2 ГГц
- Некоторые части процессора асинхронны, и такой скромный человек, как я, не может этого понять.
- Есть несколько одновременных конвейеров на ядро
- Конвейер может выдавать больше, чем результат за такт, инструкция может пропускать этапы конвейера, и есть несколько предварительных выборок, чтобы поддерживать
- Я что-то упустил
microprocessor
cpu
computer-architecture
безработный
источник
источник
Ответы:
Во- первых, в качестве комментария Килан в и ответ Turbo Джея отмечаете, измерение было 113,093 Dhrystone MIPS не родной MIPS.
Микроархитектура Ivy Bridge i7 3630QM может фиксировать только 4 слитых микропроцессора за цикл, хотя может начинать выполнение по 6 микопоп за цикл. (Количество слитых мопов в следе кода примерно равно количеству инструкций; некоторые сложные инструкции декодируются в несколько неоплавленных мопов, а некоторые пары инструкций могут быть слиты в один моп, например, выполнить немедленное сравнение с последующим условным прыжком.)
Два ваших предположения о том, как несколько команд могут быть выполнены за один цикл, вполне верны и использовались в реальных процессорах. Ваше первое предположение о том, что используются более быстрые внутренние часы, использовалось в оригинальных ALU «огненного шара» Pentium 4. Эти ALU работали с удвоенной частотой остальной части ядра, которая была уже относительно высокой.
(Это было достигнуто с помощью разнесенного ALU, в котором нижняя половина сложения была сделана за один цикл, позволяя зависимой операции использовать нижнюю половину результата в следующем цикле. Для таких операций, как сложение, xor или сдвиг влево которой требуется только нижняя половина операндов для получения полной нижней половины результата, такое ошеломление, также известное как конвейерная обработка ширины, допускает задержку результата одного цикла, а также пропускную способность одного цикла.)
HyperSPARC использовал несколько связанную технику, каскадные ALU. HyperSPARC передал результаты двух ALU в третий ALU. Это позволило выполнить две независимые и третью зависимые операции за один цикл.
Ваше предположение о том, что «на одно ядро приходится несколько параллельных конвейеров», является другим методом, который был использован. Этот тип конструкции называется суперскалярным и является наиболее распространенным средством увеличения числа операций, выполняемых за один цикл.
Есть также несколько других шансов и окончаний выполнения команд, которые, возможно, стоит отметить. Некоторые операции могут быть более эффективно выполнены вне обычных исполнительных блоков. Техника исключения перемещений использует использование переименования регистров в процессорах вне порядка для выполнения операций перемещения во время переименования регистров; перемещение просто копирует физический номер регистра из одной позиции в таблице переименования (называемой таблицей псевдонимов регистра) в другую. Это не только эффективно увеличивает ширину выполнения, но также устраняет зависимость. Этот метод использовался на ранних этапах работы с x87 на базе стека, но теперь широко используется в высокопроизводительных процессорах Intel x86. (Использование деструктивных инструкций с двумя операндами в x86 делает устранение перемещений более полезным, чем это было бы в типичном RISC.)
Техника, аналогичная исключению перемещения, заключается в обработке инструкций обнуления регистра во время переименования. Предоставляя имя регистра, которое предоставляет нулевое значение, команда очистки регистра (например, xor или вычитание с обоими операндами, являющимися одним и тем же регистром) может просто вставить это имя в таблицу переименования (RAT).
Другая техника, используемая некоторыми процессорами x86, снижает стоимость операций push и pop. Обычно инструкция, использующая указатель стека, должна была бы ждать полного цикла предыдущего нажатия или всплывающего окна, чтобы обновить значение указателя стека. Признавая, что push и pop только добавляют или вычитают небольшое значение к указателю стека, можно параллельно вычислять результаты нескольких сложений / подстановок. Основной задержкой для добавления является перенос переноса, но при небольших значениях более значимые биты базового значения - в данном случае указатель стека - будут иметь не более одного переноса. Это позволяет применять оптимизацию, аналогичную оптимизации сумматора переноса, к множественным сложениям небольших значений. Кроме того, поскольку указатель стека обычно обновляется только константами,
Также возможно объединить инструкции в одну более сложную операцию. Хотя обратный процесс разделения инструкций на несколько более простых операций является старой техникой, объединение инструкций (которое Intel называет макрооперацией слияния) может позволить реализации поддерживать операции более сложные, чем те, которые представлены в наборе команд.
С теоретической стороны были предложены другие методы. Небольшие константы, отличные от нуля, могут поддерживаться в RAT, и некоторые простые операции, которые используют или надежно генерируют такие малые значения, могут быть обработаны на ранней стадии. («Inkining Physical Register Inlining», Mikko H. Lipasti et al., 2004, предложил использовать RAT в качестве средства уменьшения количества регистров, но эту идею можно расширить, чтобы поддерживать загрузку небольших немедленных операций и простых операций с небольшими числами.)
Для кэшей трассировки (которые хранят последовательности инструкций при определенных допущениях потока управления) могут существовать возможности объединения операций, разделенных ветвями, и удаления операций, которые дают неиспользуемые результаты в трассировке. Кэширование оптимизаций в кэше трассировки также может побуждать к выполнению оптимизаций, таких как объединение инструкций, которые могут оказаться бесполезными, если их приходится выполнять каждый раз при получении потока инструкций.
Предсказание значений может использоваться для увеличения числа операций, которые могут выполняться параллельно, путем удаления зависимостей. Предсказатель значений на основе шага аналогичен оптимизации всплывающего / push-кода специализированного стекового механизма, упомянутого ранее. Он может вычислять несколько сложений в основном параллельно, удаляя сериализацию. Общая идея прогнозирования значения заключается в том, что с прогнозируемым значением зависимые операции могут выполняться без задержки. (Направление ветвления и целевое предсказание - фактически просто очень ограниченная форма предсказания значения, позволяющая извлекать следующие инструкции, которые зависят от «значения» ветвления - взятого или нет - и следующий адрес инструкции, другое значение.)
источник
Некоторая темная магия происходит внутри современных процессоров, но ваши мысли определенно идут в правильном направлении.
Ключом к пониманию эффективности современных процессоров является понимание того, что они суперскалярны . Из Википедии (выделено мое):
Эти современные процессоры имеют несколько исполнительных блоков на ядро, как вы уже догадались. Интересно рассмотреть гиперпоточность , некоторые части конвейера дублируются, а некоторые нет.
Необычное исполнение также интересно читать, но не дает прямого ответа на ваш вопрос. Тем не менее, это уменьшает количество «потерянных» циклов ЦП.
На эффективность также влияют многие другие факторы, которые могут вызвать остановку процессора, в том числе (но не обязательно):
Современные компиляторы пытаются помочь со многими из вышеперечисленных пунктов, процессор затем берет на себя. Для хорошего примера см этот вопрос в другом месте на Stackexchange, в котором подчеркивается важное различие между двумя инструкциями , которые могут делать то же самое (в некоторых случаях). Однако один может быть «быстрее», чем другой на некоторых процессорах из-за используемого исполнительного модуля.
Для удобочитаемого объяснения современного конвейера ЦП см . Путешествие по конвейеру ЦП . Несколько более техническое объяснение см. В статье Микроархитектуры Агнера Фога .
источник
Как вы думаете, что произошло: все инженеры Intel, AMD и IBM прочитали, что конвейер может выдавать только один результат за цикл, и они сказали: «Ну что ж, вот и все, эти процессоры не могут работать быстрее». Или они прочитали это и сказали: «Не может дать более одного результата за цикл? Мы посмотрим на это!».
Например, для хорошего знакомства с архитектурой Haswell вы можете перейти по этой ссылке http://www.realworldtech.com/haswell-cpu/ или просто зайти на сайт Intel, и там вы найдете немного документации.
Каждое ядро процессора Haswell имеет огромное количество исполнительных блоков, которые могут выполнять операции независимо друг от друга, поэтому несколько операций могут выполняться параллельно. Затем процессор Haswell имеет несколько исполнительных блоков, которые обрабатывают векторные операции размером до 256 бит. Векторная операция может, например, выполнять четыре операции с плавающей запятой двойной точности или восемь операций с плавающей запятой одинарной точности в одной векторной операции. И, наконец, процессор Haswell поддерживает «плавное умножение-сложение», что означает, что вычисление времен b плюс c - это всего лишь одна операция.
Теоретический максимум, поскольку Haswell имеет два блока, способных к объединенному умножению-сложению, - это две объединенные операции умножения-сложения за цикл, каждая из которых выполняет восемь умножений с одинарной точностью плюс сложения или 32 операции с плавающей запятой одинарной точности.
Процессор 3630 не входит в последний прайс-лист Intel, но есть такие модели, как 3740QM с четырьмя ядрами. Таким образом, вместо 32 вы можете получить 128 операций с плавающей запятой за такт. Это теоретический максимум. Достижение половины этого в реальной жизни является сложной задачей, но не является невозможным для подходящих задач. Доступны и другие процессоры с 15 ядрами (по ценам, которые не заплатят даже самые фанатичные фанатики игр).
Итак, у вас есть комбинация из нескольких множителей:
8,6 операций за цикл не так уж сложно достичь. Даже 8,6 операций на цикл на ядро не так уж сложно.
источник
ADD
инструкций, основанные на том, следует ли оставить переполнение без изменений или его следует установить, когда происходит переполнение (и оставить установленным, если это не так).Тест Drystone взят с 1984 года, и соответствующая номинальная машина 1 MIPS VAX не очень эффективна в современных условиях. Даже Cortex M3 обеспечивает 1,25 DMPIS / МГц.
Процессоры Intel Core с архитектурой действительно могут выполнять несколько команд параллельно в одном ядре, потому что присутствует несколько вычислительных блоков.
источник
Я очень многому научился у Джона "Ганнибала" из Ars Technica Stokes, отличных и обширных статей на тему микропроцессорной архитектуры. Статьи немного устарели (кажется, что они датированы примерно 2004 годом), но все еще очень актуальны.
Некоторые ссылки на следующую часть статьи не работают, однако, кажется, вы можете исправить их самостоятельно, тщательно сравнив URL первой части и неработающий URL следующей страницы (например, добавив что-
m-
то в URL).(да, это прославленный ответ только для ссылок, извините; статьи слишком хороши, чтобы не упоминать их)
источник