Гиперпоточность и суперскалярное исполнение - PullRequest
1 голос
/ 11 апреля 2019

Представьте себе ЦП (или ядро), которое является суперскалярным (несколько исполнительных блоков), а также имеет поддержку гиперпоточности (SMT).

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

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

1 Ответ

1 голос
/ 12 апреля 2019

Вы не можете просто перебрасывать команды в исполнительные блоки.
Если вам нужны два двухсторонних SMT, вам нужно сохранить два архитектурных состояния и получить два потока команд.

Если компания имеет100 разработчиков, но только два менеджера проектов, он может разрабатывать только два проекта параллельно (но он может одновременно разрабатывать больше, если он заставляет проект переключать PMs каждый день или около того).

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

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

Но если все терпит неудачу и ЕС не используется, то эта возможная единица работы просто теряется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...