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

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

Сообщение Anonymous »

В моей программе на языке C у меня есть централизованный рабочий пул, содержащий указатели функций на выполняемые задачи. Я создаю несколько потоков (вплоть до общего количества подключенных процессоров), и каждый из них выполняет задачи из пула. Я прикрепляю потоки к определенным процессорам, думая, что один поток не должен прерывать другой поток на том же процессоре, чтобы выиграть время процессора, когда все потоки выполняют одну и ту же работу (ну, на самом деле в любой момент времени все потоки выполняют разные задачи, но мои задачи выполняются быстро).
Но теперь я думаю, что если поток закреплен за конкретным процессором, а другие потоки (не из моей программы) обрабатываются на одном и том же процессоре, то мой поток может не получить должного времени процессора. Если я не закреплю поток, то ядро ​​автоматически переместит его на свободный ЦП.
Но тогда, если программы специально не привязывают свои потоки к этому ЦП, зачем ядру вообще планировать эти потоки на ЦП, к которому привязан поток? В конце концов, в моей системе я бы создал столько потоков, сколько было подключенных процессоров, так что это не имеет большого значения.
И потом я думаю, что это работает не так. Если во время выполнения моего потока прерываний не происходит, периодический тик планировщика все равно заставит процессор вернуться в ядро. После этого какое имеет значение, какой из моих рабочих потоков он запустит следующим? Оно уже прервано. ИИ говорит, что это важно, потому что кеши могут быть горячими для ранее запущенного потока, но на самом деле? Я думаю, что простого переключения в режим ядра и выполнения ядром всех своих задач достаточно, чтобы перезаписать кеши ЦП. И тогда разве ядро ​​не выберет тот поток, кэши которого будут горячими? Он все равно может выбрать другой поток, если у него не так много процессорного времени.
Привязка ЦП также дает небольшое преимущество, позволяя мне выбирать, на каком типе ЦП запускать мои потоки. Для повышения эффективности я мог бы запустить его на процессорах с низким энергопотреблением и наоборот, если мне нужна производительность. Я уже делаю это в своей программе, потому что, если я закрепляю потоки, мне тоже нужно об этом позаботиться. Но потом я чувствую, что позволяю ядру делать это, тоже работает, но для этого мне не нужно закреплять потоки.
Я всего лишь студент, и это полная переработка программы, которую я создаю. Это оказывает незначительное влияние. Мои задачи выполняются очень быстро. Но я делаю это ради обучения. Мне нравится глубоко размышлять об оптимизации.

Подробнее: https://stackoverflow.com/questions/799 ... starvation
Ответить

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

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

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

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

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