Нумерация ЦП на hypertheading система включена

Я пытаюсь выяснить, как ОС (Windows, linux) присваивает номера логическим процессорам в среде с поддержкой Hyper threading. ?

оба OSs сначала последовательно присваивают номера физическим процессорам, а затем начинают нумерацию логических процессоров или следует какое-то другое правило.. ? например , в физической системе процессора 2 с hyper threading ОС присваивает номер 0,2 первому физическому процессору, а затем 1,3 второму физическому процессору .. ?

любые ссылки будут действительно ценить.

спасибо заранее.

С Уважением, -Джей.

Edit: отвечая на вопрос Алана : мне нужно знать это, потому что в моей работе мне нужно связать различные потоки с конкретными процессорами, чтобы избежать контекстных переключателей, и я хочу убедиться, что определенные задачи( потоки ) связаны с отдельные физических процессоров. Спасибо

2 ответов


из того, что я знаю, это зависит от того, как процессор выставляет свои ядра. Когда HT включен, нет никаких открытых физических процессоров, а скорее два логических процессора на физический процессор, поэтому нет никакой разницы, если вы запускаете поток на любом логическом процессоре. Единственное, что имеет значение, - это то, какие пары логических процессоров принадлежат каждому физическому процессору.

с одноядерными процессорами (например, Pentium 4 с HT), это довольно прямолинейно, так как у вас есть только одна пара - так что это (0, 1). С quad процессоры ядра (как Нехалем), пары логических ядер (0,4), (1,5), (2,6) и (3,7). Шаблон наличия всех первых половин каждой пары, а затем всех вторых половин шкалы shuold с будущими процессорами, которые имеют еще больше ядер.

реальный вопрос в том, почему вам нужно знать расположение пары? Пусть планировщик ОС выбирает правильные ядра для правильных потоков - он делает довольно приличную работу.


Вы можете посмотреть в /sys/devices/system/cpu/ найти информацию о процессорах. Расположение ядер и их пары hyperthreaded можно найти в /sys/devices/system/cpu/cpuN/topology/thread_siblings_list.