Использование многоядерных процессоров и процессоров

У меня процессор Intel i3 (двухъядерный с гиперпоточностью)
Я обычно отслеживаю использование процессора с помощью гаджета боковой панели, показывающего использование каждого ядра в отдельной строке от (0 - 3).
но недавно я заметил, что ядро ​​номер 0 вообще не используется.
после некоторого поиска я наткнулся на тему, объясняющую числа и идею, что ядра 0, 2 - настоящие ядра, а 1, 3 - ядра с гиперпоточностью , но в соответствии с этим это означает, что настоящее ядро ​​моего процессора никогда не используется, и даже другое мое ядро ​​бесполезно.
и, читая больше, я наткнулся на это multi-core-cpu-single-thread-behavior-not-достижения-100, в котором говорится, что переключение происходит, но все же это не ответил на вопрос выше, где находится реальное ядро ​​0 и почему используется только 1 ядро.

Как вы можете видеть, это нормальное использование ЦП, что случилось с ядром 0,2,3, почему они не используются другими программами и почему только 1 ядро ​​активно, даже когда запущено много программ.

(ВСЕ процессы используют все ядра, проверяются через родство)


person VirusEcks    schedule 10.01.2011    source источник
comment
Различие между реальными и гиперпоточными ядрами не имеет смысла. Гиперпоточные ядра могут чередовать выполнение двух потоков. Но ни один из них ни в каком смысле не более «реален», чем другой.   -  person Konrad Rudolph    schedule 10.01.2011
comment
Хотя я понимаю, что для программирования необходимо понимание того, как работает процессор, мне это кажется более подходящим для SuperUser.   -  person Suma    schedule 10.01.2011


Ответы (2)


При гиперпоточности оба логических процессора на одном ядре эквивалентны. Это не один из настоящих, а второй гиперпотоковый. Оба используют одно и то же физическое ядро. Совершенно неважно, какой из них используется. Лучше сначала запланировать потоки на разных физических ядрах, и только после того, как все физические ядра будут использованы, используйте вторые логические процессоры на тех же ядрах, что кажется именно тем, что вы описываете.

person Suma    schedule 10.01.2011
comment
Можно ли указать, что приложение или группа потоков должны использовать только одно ядро, но могут запускать столько потоков на этом ядре, сколько поддерживает? Такие вещи, как Interlocked.CompareExchange, дешевы для программ, работающих на одном ядре, и дороги, когда работают на нескольких ядрах. Некоторые приложения могут больше выиграть от повышения эффективности одноядерных операций, чем от увеличения параллелизма (особенно, если другие приложения или группы потоков могут использовать другие ядра). - person supercat; 05.05.2011

Возможно, потому, что просто не требуется больше вычислительных мощностей, и потому что планирование на уровне SIBLING считается более дорогостоящим. То есть процессы - давайте для простоты рассмотрим трудоемкие - сначала будут назначены разным ядрам, прежде чем «перегрузить» ядро ​​(группу из N потоков) другой программой. Другими словами, 6-ядерная 4-поточная машина обычно заполняет 24 потока в порядке 0, 4, 8, 12, 16, 20, 1, 5, 9, 13, 17, 21, 2, 6, 10. , 14, 18, 22, 3, 7, 11, 15, 19, 23. (Небольшие отклонения, конечно, возможны из-за «спонтанной» миграции процесса.)

И это не правда, что используется только один поток: ваши собственные графические изображения показывают, что Core 3 и 3) и Core 4 [sic] (это потоки 3 и 4) используются, 1% и 2%. Большинство процессов, которые вы видите в списке процессов, даже не запускаются, они просто спят.

person user562374    schedule 10.01.2011