Сколько способов-суперскаляров имеют современные процессоры Intel?

Я только что узнал о суперскалярных процессорах (https://en.wikipedia.org/wiki/Superscalar_processor ).

Я также узнал, что по мере того, как суперскалярный процессор увеличивается по ширине / количеству способов, все усложняется, а сложность увеличивается так быстро, что лучше добавить больше ядер вместо большей ширины. Мой инструктор сказал, что больше не стоит добавлять дополнительные способы где-то между 4-сторонним и 8-ходовым суперскаляром.

Это заставило меня задуматься: где Intel перестала добавлять способы и начала добавлять ядра? Сколько способов предусмотрено в каждом ядре моего Intel Core i7 8-го поколения?

Применима ли вообще к этим процессорам концепция способов?


person Cedar    schedule 16.10.2019    source источник


Ответы (1)


См. руководство по микроархитектуре Agner Fog для подобных деталей конвейера. https://www.realworldtech.com/haswell-cpu/, а также глубокий анализ погрузиться в Haswell с блок-схемами. (И ссылки на некоторые статьи Дэвида Кантера по другим архивам, таким как SnB и Core2, а также AMD Bulldozer и K8.) Также другие ссылки в https://stackoverflow.com/tags/x86/info

Да, современные ядра x86 имеют суперскалярное исполнение вне очереди. Основы не изменились со времен PPro: декодирование машинного кода x86 в микрооперации (uops), которые могут быть запланированы с помощью ROB + RS.


(Терминология: Intel использует «проблема», чтобы означать «копировать в неупорядоченный сервер», а «отправка» означает «отправить из планировщика в исполнительный модуль», выделяя ресурсы и обновляя RAT. В остальной части компьютерной архитектуры люди используют противоположную терминологию.)

Intel, поскольку Core 2 имеет ширину суперскаляра 4 мопса на этапе выдачи / переименования / выделения, самое узкое узкое место. (До этого, PPro для Pentium-M, оно было 3-шириной). Core 2 редко мог выдержать это на практике со слишком многими другими узкими местами. Skylake часто может быть очень близок к высокопроизводительному коду.

Чтобы получить больше работы в каждом uop с объединенным доменом, существует микрослияние мупа ALU с загрузкой его источника памяти. И макро-слияние, например, cmp / test + jcc, поэтому инструкции сравнения и ветвления вместе декодируются как один uop. (См. Руководство по микроархитектуре Agner Fog). Сюда входит ваш процессор Kaby или Coffee Lake. Максимальная устойчивая пропускная способность неиспользуемого домена составляет 7 мопов за такт, достижимо на практике на Skylake. Планировщик может посылать мопы на каждый порт в пакетном режиме.

Ice Lake (Санни-Коув uarch) увеличивает количество выпусков до 5.

AMD Zen имеет ширину 6 мопов, но всего 5 инструкций, поэтому он может достигать только 6 мопов / такт при выполнении хотя бы некоторых инструкций с 2 ​​мопами. например 256-битные инструкции AVX SIMD, которые он декодирует до 2x 128-битных половин (или того хуже для тасования при пересечении полосы движения).


Skylake расширил унаследованные декодеры до 5 мопов / такт, а выборку из кэша uop до 6 мопов / такт, по сравнению с 4 / такт в SnB через Broadwell. Это скрывает пузыри внешнего интерфейса большую часть времени и поддерживает стадию выдачи / переименования с 4 мопами за такт больше времени в коде с высокой пропускной способностью. (Между этапами есть буферы / очереди, например, IDQ на 64 мупа, который питает этап выдачи / переименования.)

Это включает в себя ваш процессор Kaby или Coffee Lake: микроархитектурно ядра IA в KBL идентичны SKL, а Coffee Lake - очень незначительная настройка (исправление буфера цикла, который SKL пришлось отключить при обновлении микрокода из-за частичного слияния регистров uop опечатка, также известная как ошибка процессора). У KBL и CFL графические процессоры лучше, чем у SKL, но ядра x86 в основном одинаковы.


Да, для большей части кода есть убывающая отдача, превышающая ширину 3 или 4, но SMT позволяет широкому ядру находить ILP сразу в двух (или 4 или 8) потоках выполнения. Это позволяет не тратить зря более широкие ядра, но стоимость ядра увеличивается более чем линейно с шириной, поэтому вы делаете это только в том случае, если иногда один поток может использовать большую часть этой ширины. В противном случае вы бы просто построили более мелкие ядра. (По крайней мере, если у вас есть масштабируемое межсоединение для большего количества ядер ...) Мой ответ на Почему бы не сделать одно большое ядро ​​ЦП? об электронике. SE предлагает более подробную информацию о компромиссах и ограниченном объеме ILP, доступном для реальных рабочих нагрузок.

person Peter Cordes    schedule 16.10.2019
comment
Хороший ответ. Я думаю, что было бы легче извлечь ответ в заголовке, если бы вы упомянули, что узкое место переименования 4/5/6 является самым узким узким местом там, где вы его упоминаете - поскольку это своего рода ответ заголовка, я думаю 4 широкий, потому что переименование имеет ширину 4 и является самым узким узким местом, бла, бла короткие всплески и т. д. - person BeeOnRope; 17.10.2019