Какие ядра соответствуют каждому «процессору» ниже?
Предполагая, что у нас есть Core 1, 2, 3 и 4, CPU4 и CPU5 представляют ядро 3.
Представляют ли (скажем) ЦП 6 и ЦП 7 ниже одно ядро; HT и реальное ядро?
Между этими двумя понятиями нет различия: они оба имеют физические аппаратные интерфейсы с процессором, логический интерфейс реализован аппаратно ( более подробную информацию см. В техническом описании процессора Intel Core, том 1 ). По сути, каждое ядро имеет два отдельных исполнительных блока, но оно разделяет некоторые общие ресурсы между ними. Вот почему в некоторых случаях гиперпоточность может фактически снизить производительность.
Если, например, CPU 6 представляет реальное ядро, а CPU 7 - ядро HT, получит ли поток, назначенный только на CPU7, только оставшиеся ресурсы реального ядра? (при условии, что ядро выполняет другие задачи)
Смотри выше. Поток, назначенный ТОЛЬКО CPU6 или ТОЛЬКО CPU7, будет работать с той же скоростью (при условии, что поток выполняет ту же самую работу, а другие ядра в процессоре находятся в режиме ожидания). Windows знает о HT-процессорах, и планировщик процессов учитывает это.
Управляется ли гиперпоточность целиком внутри процессора так, что потоки внутренне обрабатываются? Если так, то это в области ЦП или основной области? Пример: если ЦП 6 и 7 представляют одно ядро, не имеет значения, для какого процесса назначен процесс, поскольку ЦП назначит ресурсы соответствующим образом для работающего потока?
И то и другое. Сам фактическое оборудование не не планировать то , что ядра для запуска программ на, это работа операционной системы. Однако сам ЦП отвечает за распределение ресурсов между фактическими исполнительными блоками, и Intel диктует, как вы можете написать код, чтобы сделать его максимально эффективным.
Я замечаю, что длительные однопоточные процессы довольно сильно смещены вокруг ядер, по крайней мере, по словам диспетчера задач. Означает ли это, что присвоение процесса одному ядру немного улучшит производительность (избегая переключений контекста и аннулирования кэша и т. Д.)? Если так, могу ли я знать, что я не назначаю «просто виртуальное ядро»?
Это нормальное поведение, и нет, назначение его одному ядру не улучшит производительность. При этом, если по какой-то причине вы хотите, чтобы один процесс выполнялся только на одном физическом ядре, назначьте его любому логическому процессору.
Причина, по которой процесс «отскакивает», связана с планировщиком процесса. Это нормальное поведение, и вы, скорее всего, будете испытывать снижение производительности, ограничивая число ядер, на которых может выполняться процесс (независимо от того, сколько потоков у него есть), поскольку планировщик процессов теперь должен работать усерднее, чтобы все работало с наложенными вами ограничениями. Да, этот штраф может быть незначительным в большинстве случаев, но суть в том, что если у вас нет причин для этого, не делайте этого !