Почему единственный поток распространен через ЦП?

Мне просто любопытно, почему планировщик постоянно перемещает приложение между центральными процессорами, вместо того, чтобы сохранить его на одном. Выглядит немного глупым иметь 4 ядра в 25%, а не один в 100%.

Это имеет отношение к теплу, или действительно ли это более эффективно так или иначе? Другая ОС делает это по-другому?

Понимание или ссылки на всесторонний материал были бы хороши. (Не удалось найти много самостоятельно.)

Обновление:

"Распространенным" я не подразумеваю, что это выполняется на нескольких CPU сразу, но перемещается от одного до другого несколько раз в секунду, делая эффект, что это выглядит распространенным.

24
задан 20.08.2009, 16:31

3 ответа

Я думаю wierob описал точку довольно хорошо.
Вот более старое обсуждение статьи processor affinity настройки с четырехъядерным QX6800.
(ссылка указывает на вторую страницу той статьи).

Если Вы не вызываете привязку процесса к ядру, Вы освобождаете на производительности?

  • В то время как планировщик Windows должен решить такую привязку, чтобы не перегружаться с кэшами,
    сам дизайн процессора также рассматривает такие вещи.
  • Четырехъядерный Intel QX6800 (так как я отсылаю его ранее в этом ответе),
    имеет 8 МБ L3 кэш совместно используется через его 4 ядра.

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


Продвижение, с архитектурой Nehalem и NUMA,
процессоры через несколько сокетов также смогут лучше обратиться к доступу, перегружаются.
Вот быстрое изображение от страницы ArsTechnica на NUMA.

enter image description here

Если Nehalem и i7 заинтересуйте Вас, у меня есть еще некоторые ссылки в этом ответе.

8
ответ дан 07.12.2019, 09:45

Планировщик просто выполняет следующий поток, который готов к выполнению на "свободном" ядре/ЦП.

Можно присвоить процесс определенному ЦП через диспетчер задач Windows.

Наличие 4 ядер в 25%-х средствах, что 4 потока выполняются одновременно. Принимая во внимание, что, одно ядро на уровне x % означает, что только один поток выполняется. Таким образом, первый более эффективен в некоторых случаях.

Но во время его выполнения кэш ЦП заполнен данными, к которым получает доступ поток. Таким образом, если поток будет выполняться на другом ЦП, то он испытает больше неудачных обращений в кэш, которые являются дорогостоящими, так как данные не находятся в кэше этого ЦП.

Что делает Ваш поток? Если поток "спит" в течение очень короткого времени ядро, это выполнялось на том, прежде чем мог бы быть занят другой угрозой, и таким образом Ваш поток выполняется на следующем доступном ядре. Что происходит, если Вы указываете только одно ядро, которое будет использоваться Вашим процессом (например, ia диспетчер задач)?

6
ответ дан 07.12.2019, 09:45

Это не. Один поток может только работать на одном процессоре. Однако некоторые процессы имеют несколько потоков, которые могут быть распространены.

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

0
ответ дан 07.12.2019, 09:45

Теги

Похожие вопросы