Оптимизация многопоточности. Закрепление потока может привести к его остановке.Linux

Ответить
Anonymous
 Оптимизация многопоточности. Закрепление потока может привести к его остановке.

Сообщение Anonymous »

В моей программе на языке C у меня есть централизованный рабочий пул, содержащий указатели функций на выполняемые задачи. Я создаю несколько потоков (вплоть до общего количества подключенных процессоров), и каждый из них выполняет задачи из пула. Я прикрепляю потоки к определенным процессорам, думая, что один поток не должен прерывать другой поток на том же процессоре, чтобы выиграть время процессора, когда все потоки выполняют одну и ту же работу (ну, на самом деле в любой момент времени все потоки выполняют разные задачи, но мои задачи выполняются быстро).
Но теперь я думаю, что если поток закреплен за конкретным процессором, а другие потоки (не из моей программы) обрабатываются на одном и том же процессоре, то мой поток может не получить должного времени процессора. Если я не закреплю поток, то ядро ​​автоматически переместит его на свободный ЦП.
Но тогда, если программы специально не привязывают свои потоки к этому ЦП, зачем ядру вообще планировать эти потоки на ЦП, к которому привязан поток? В конце концов, в моей системе я бы создал столько потоков, сколько было подключенных процессоров, так что это не имеет большого значения.
И потом я думаю, что это работает не так. Если во время выполнения моего потока прерываний не происходит, периодический тик планировщика все равно заставит ЦП вернуться в ядро. После этого какое имеет значение, какой из моих рабочих потоков он запустит следующим? Оно уже прервано. ИИ говорит, что это важно, потому что кеши могут быть горячими для ранее запущенного потока, но на самом деле? Я думаю, что простого переключения в режим ядра и выполнения ядром всех своих задач достаточно, чтобы перезаписать кеши ЦП. И тогда разве ядро ​​не выберет тот поток, кэши которого будут горячими? It might still choose the other thread if it hasn't gotten that much CPU time.
CPU pinning also gives a little advantage of letting me choose which type of CPU to run my threads on. Для повышения эффективности я мог бы запустить его на процессорах с низким энергопотреблением и наоборот, если мне нужна производительность. Я уже делаю это в своей программе, потому что, если я закрепляю потоки, мне тоже нужно об этом позаботиться. Но потом я чувствую, что позволяю ядру делать это, тоже работает, но для этого мне не нужно закреплять потоки.
Я всего лишь студент, и это полная переработка программы, которую я создаю. Это оказывает незначительное влияние. Мои задачи выполняются очень быстро. Но я делаю это ради обучения. Мне нравится глубоко размышлять об оптимизации.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»