2

Есть ли какие-либо доказательства того, что вручную выбирая, какой процессор запускать поток, вы можете улучшить производительность системы?Преимущество установки потоков для работы на конкретном ядре?

Например, вы выделили поток, который больше всего работает на одно ядро ​​и все другие «вспомогательные» потоки на секунду.

ответ

1

Я не вижу, что есть случай для этого.

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

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

Если вы исправили код процесса для работы только с одним указанным процессором, это, скорее всего, помешало бы его производительности, поскольку это не позволяло ОС балансировать загрузку процессора.

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

0

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

Сохранение потока, выполняющегося на одном и том же ядре, увеличивает вероятность того, что кэш L1 имеет данные, относящиеся к тому, что делает поток. Разумеется, какое влияние оказывает это влияние, зависит и от других факторов, таких как размер кеша и количество других потоков, которые запланированы «одновременно» на ядре.

+0

Если вы на самом деле не используете нить на ядро ​​(что кажется маловероятным), то эффект переключения ядер будет очень похож на эффект переключения контекста на том же ядре. –

+0

Ну, нет, контекстные переключатели не обязательно будут иметь одинаковый эффект. Да, если кэш полностью (или значительно) пополняется новыми данными к моменту возобновления «исходного» потока, тогда коммутатор контекста и основной коммутатор будут иметь аналогичный эффект. Однако это не обязательно так. Кроме того, ваше предположение о том, что один поток на одно ядро ​​маловероятен, неверен. Для большинства потоков в системе довольно часто, когда только один (или несколько) фактически что-то делает. Таким образом, в 99% случаев вы можете запустить только один поток на ядро. –

 Смежные вопросы

  • Нет связанных вопросов^_^