Многоядерная система. Как ядра "отсортированы"

461
asdrubael

Если у меня есть система, скажем, с двумя процессорами Quadcore и включенной HyperThreading, как мне узнать, как сортируются физические и виртуальные ядра? Например, если я заставлю процесс запускаться на «CPU 0», как узнать, какое это ядро ​​на самом деле? Я помню сложный рисунок об этом, но не нашел ничего полезного.

Обновление: после обсуждения этого с программистом, я убежден, что нет смысла связывать программу / поток с конкретным ядром. В большинстве случаев лучше позволить операционной системе решать, какие ядра использовать. Однако было бы интересно, как работает перечисление.

5
Из любопытства, зачем вам знать, какое это * физическое * ядро? Bobby 14 лет назад 8
Пока маркировка является последовательной, кажется, что это не имеет значения. mindless.panda 14 лет назад 0
Это может иметь значение, если вы пытаетесь вручную управлять сродством по какой-то причине. Многопоточный процесс с интенсивным использованием ЦП, который разделяет данные между потоками, работающими на двух или более ядрах одного ЦП, будет работать быстрее, чем один, использующий одинаковое количество процессорных блоков, распределенных по разным физическим ЦП, и может происходить быстрее, чем тот, который активно использует _more_ ядра. но распределяются по нескольким процессорам из-за совместного использования / управления кэшем, пропускной способности ЦП <-> ОЗУ и связанных с этим проблем. Попытка оптимизировать вещи таким способом вряд ли будет лучшим использованием вашего времени. David Spillett 14 лет назад 2
Идея состоит в том, чтобы иметь программу / поток A, который использует все доступные ядра, ожидаемые от одной и другой программы / потока B, которые могут работать на «последнем» ядре самостоятельно. Если маркировка соответствует, не имеет значения, как это делается, но мне любопытно, как это работает и отличается ли это, например, между Windows / Linux или различными компьютерами. asdrubael 14 лет назад 0
Похоже, вы ищете способ реализовать LPAR вне AIX? warren 14 лет назад 0

1 ответ на вопрос

2
knweiss

Посмотрите на проект hwloc . Он предоставляет C API для ответа на подобные вопросы, а также инструмент, lstopoкоторый генерирует карты топологии процессора / памяти. Смотрите URL для примеров.

Спасибо, это именно то, что я искал. Опять же: это только для "научных" целей. asdrubael 14 лет назад 0