Мне просто любопытно, почему планировщик постоянно перемещает приложение между процессорами, а не держит его на одном. Кажется немного глупым иметь 4 ядра на 25%, а не одно на 100%.
Это связано с теплом или как-то более эффективно? Другие ОС делают это по-другому?
Инсайты или ссылки на подробные материалы были бы хорошими. (Не могу найти много себя.)
Обновить:
Под «разложенным» я не подразумеваю, что он выполняется на нескольких процессорах одновременно, но перемещается от одного к другому несколько раз в секунду, создавая эффект, что он выглядит разложенным.
windows
performance
cpu
Маке
источник
источник
Ответы:
Я думаю,
wierob
что описал суть довольно хорошо.Вот старая статья, в которой обсуждаются
processor affinity
настройки четырехъядерного QX6800 .(ссылка указывает на вторую страницу этой статьи).
Если вы не навязываете сродство процесса с ядром, вы теряете производительность ?
сама конструкция процессора также учитывает такие вещи.
имеет 8 МБ
L3
кэш-памяти, разделяемой между 4 ядрами .Следует отметить, что, хотя вы, возможно, решили запустить только один однопоточный процесс в системе, в самой ОС будет запущено несколько других задач, которые также необходимо запланировать. Планировщик балансирует всю эту активность в доступном пуле процессоров (или ядрах).
В дальнейшем, благодаря архитектуре Nehalem и NUMA ,
процессоры с несколькими сокетами также смогут лучше решать проблему доступа.
Вот краткое изображение со страницы ArsTechnica на NUMA .
Если Nehalem и
i7
вас заинтересует, у меня есть еще несколько ссылок на этот ответ .источник
Планировщик просто выполняет следующий поток, который готов к выполнению на «свободном» ядре / процессоре.
Вы можете назначить процесс определенному процессору через диспетчер задач Windows.
Наличие 4 ядер на 25% означает, что 4 потока выполняются одновременно. Принимая во внимание, что одно ядро в x% означает, что выполняется только один поток. Таким образом, первое является более эффективным в некоторых случаях.
Но во время его выполнения кэш ЦП заполняется данными, к которым обращается поток. Таким образом, если поток исполняется на другом процессоре, он будет испытывать больше ошибок в кэше, что является дорогостоящим, поскольку данные не находятся в кэше этого процессора.
Что делает ваша нить? Если поток «спит» в течение очень короткого времени, ядро, на котором он выполнялся, может быть занято другой угрозой, и, таким образом, ваш поток выполняется на следующем доступном ядре. Что произойдет, если вы укажете только одно ядро, которое будет использоваться вашим процессом (например, диспетчер задач)?
источник
Это не. Один поток может работать только на одном процессоре. Однако некоторые процессы имеют несколько потоков, которые могут быть распределены.
Рассуждение, хотите верьте, хотите нет, никогда не задумывался над тем, как оно выглядит. Система пытается распределить потоки, потому что у нее нет возможности узнать, когда это произойдет.
источник
ОС переносит поток между ядрами процессора (быстро, несколько раз в секунду). Более эффективно запускать его на одном и том же ядре все время. Это может быть реализовано с помощью пункта контекстного меню «Установить сходство» в диспетчере задач.
Обратите внимание, что обычно (типичное домашнее использование) разница находится в диапазоне нескольких процентов.
«4 ядра с 25% -ным использованием» означает, что, поскольку Диспетчер задач показывает среднее использование, каждое ядро полностью использовалось за четверть времени и оставалось свободным в остальное время.
Описание для Windows, но оно аналогично и для других операционных систем.
источник
Если кто-то все еще читает это, я тоже это заметил и выполнил немало тестов, чтобы убедиться, что это не случайность. Оказывается, это не так! Я считаю, что распространение одного потока на все ядра более эффективно по нескольким причинам:
Кроме того, из-за двух вышеупомянутых наблюдений я пришел к выводу, что Turbo Boost и IDA неэффективны. Они могут быть полезны в старых операционных системах, но Linux и Windows 7 довольно эффективно распределяют все по всем ядрам. Итак, Core 2 Quad Q9100 @ 2,26 ГГц будет почти (всегда есть исключения :-) всегда будет быстрее, чем Core 2 Duo X9100 @ 3,06 ГГц, и я редко видел, чтобы он использовал IDA (в основном предшественник Turbo Boost, увеличивает частоту на одном или двух ядрах только для однопоточных приложений).
источник