Представьте себе ЦП (или ядро), которое является суперскалярным (несколько исполнительных блоков), а также имеет поддержку гиперпоточности (SMT).
Почему количество программных потоков, которые ЦП может действительно выполнять параллельно, обычно задается какколичество логических ядер (т. е. так называемых аппаратных потоков), которыми оно обладает, а не общее количество исполнительных блоков, которые у него есть?
Если я правильно понимаю, SMT на самом деле не разрешает истинное параллельное выполнение, а вместо этого просто делаетпереключение контекста намного быстрее / эффективнее за счет дублирования определенных частей ЦП (тех, которые хранят архитектурное состояние, но не основные ресурсы выполнения).С другой стороны, суперскалярная архитектура допускает истинное одновременное выполнение нескольких инструкций за такт, потому что ЦП имеет несколько исполнительных блоков, то есть несколько параллельных конвейеров, каждый из которых может обрабатывать отдельный поток в истинно параллельном режиме.
Так, например, если ЦП имеет 2 ядра, а каждое ядро имеет 2 исполнительных блока, разве его аппаратный параллелизм (количество потоков, которые он может выполнять параллельно) не должен быть равен 4?Почему его аппаратный параллелизм вместо этого определяется количеством логических ядер, когда SMT фактически не обеспечивает истинное параллельное выполнение?