Гипер потоки, SIPI и регистры

Мне интересно узнать больше об архитектуре x86 и о том, как она реализует многопроцессорность.

Скажем, используя cpuid с помощью инструкции вы можете узнать, сколько логических ядер у вашего процессора, и, используя некоторое SIPI (межпроцессное прерывание при запуске), вы даете команду ядру A начать выборку и выполнение кода с некоторого адреса, и это в основном то, как вы начинаете многопроцессорную обработку (до тех пор, пока Выполнение кода, конечно же, предназначено для такой архитектуры!)

Мои вопросы следующие:

  1. SIPI запускает логическое ядро? если нет, то как логические ядра запускаются для выполнения кода
  2. Имеет ли логическое ядро ​​свой собственный набор регистров или это просто двойные указатели инструкций, и у процессора есть какой-то умный физический способ переключать контексты между ядрами и выполнять с обоих IP-адресов (учитывая, что количество логических ядер на физическое число равно двум)
  3. Допустим, каждое ядро ​​нуждается в собственной маскировке памяти, поэтому получим свой собственный MMU, логические ядра должны иметь свой собственный MMU, верно? если нет, то управляет ли операционная система памятью на ядро, учитывая количество логических ядер на физическом?

Я пытался найти документацию об этом раньше, но все же застрял на тысячах страниц документации Intel, и мне просто интересно, если кто-то обладает этими знаниями и может пролить свет на мои вопросы и объяснить, что на самом деле со мной происходит

1 ответ

С точки зрения программиста (который включает в себя прошивку и операционную систему), логическое ядро ​​с гипер-резьбой так же хорошо, как и истинное, физическое1.

X86 намного, намного сложнее, чем здесь можно найти разумный ответ. Но по сути, гиперпоточное ядро ​​дублирует минимальное количество состояния, необходимое для того, чтобы создать впечатление, что присутствует еще одно полное ядро ​​(в основном регистры). Это действительные единицы исполнения (декодер команд, ALU и т. Д.). которые распределяются между локальными ядрами. Ядро отслеживает, над каким логическим ядром эффективно работает каждый модуль.

Логические ЦП также будут иметь свой собственный регистр CR3, основу иерархии таблицы страниц. Тем не менее, AFAIK TLB, кэш L1 и все другие компоненты MMU (который явно не является отдельным объектом на x86) совместно используются логическими ядрами. Ошибка страницы все равно будет передана в соответствующий логический ЦП.

Чтобы получить больше информации, чем вы когда-либо хотели, вам следует обратиться к книге Хеннесси и Паттерсона "Компьютерная архитектура - количественный подход".


1 - Это не совсем так. Рассмотрим ОС, пытающуюся выполнить две задачи на 4-ядерном процессоре с гиперпоточностью. Было бы глупо планировать эти две задачи на логических ядрах одного и того же физического ядра, оставляя три других физических ядра спать, зная, что они на самом деле не будут выполняться одновременно.

Другие вопросы по тегам