См. руководство по микроархитектуре 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