В моей программе на языке C у меня есть централизованный рабочий пул, содержащий указатели функций на выполняемые задачи. Я создаю несколько потоков (вплоть до общего количества подключенных процессоров), и каждый из них выполняет задачи из пула. Я прикрепляю потоки к определенным процессорам, думая, что один поток не должен прерывать другой поток на том же процессоре, чтобы выиграть время процессора, когда все потоки выполняют одну и ту же работу (ну, на самом деле в любой момент времени все потоки выполняют разные задачи, но мои задачи выполняются быстро).
Но теперь я думаю, что если поток закреплен за конкретным процессором, а другие потоки (не из моей программы) обрабатываются на одном и том же процессоре, то мой поток может не получить должного времени процессора. Если я не закреплю поток, то ядро автоматически переместит его на свободный ЦП.
Но тогда, если программы специально не привязывают свои потоки к этому ЦП, зачем ядру вообще планировать эти потоки на ЦП, к которому привязан поток? В конце концов, в моей системе я бы создал столько потоков, сколько было подключенных процессоров, так что это не имеет большого значения.
И потом я думаю, что это работает не так. Если во время выполнения моего потока прерываний не происходит, периодический тик планировщика все равно заставит процессор вернуться в ядро. После этого какое имеет значение, какой из моих рабочих потоков он запустит следующим? Оно уже прервано. ИИ говорит, что это важно, потому что кеши могут быть горячими для ранее запущенного потока, но на самом деле? Я думаю, что простого переключения в режим ядра и выполнения ядром всех своих задач достаточно, чтобы перезаписать кеши ЦП. И тогда разве ядро не выберет тот поток, кэши которого будут горячими? Он все равно может выбрать другой поток, если у него не так много процессорного времени.
Привязка ЦП также дает небольшое преимущество, позволяя мне выбирать, на каком типе ЦП запускать мои потоки. Для повышения эффективности я мог бы запустить его на процессорах с низким энергопотреблением и наоборот, если мне нужна производительность. Я уже делаю это в своей программе, потому что, если я закрепляю потоки, мне тоже нужно об этом позаботиться. Но потом я чувствую, что позволяю ядру делать это, тоже работает, но для этого мне не нужно закреплять потоки.
Я всего лишь студент, и это полная переработка программы, которую я создаю. Это оказывает незначительное влияние. Мои задачи выполняются очень быстро. Но я делаю это ради обучения. Мне нравится глубоко размышлять об оптимизации.
Подробнее: https://stackoverflow.com/questions/799 ... starvation
Оптимизация многопоточности. Закрепление потока может привести к его остановке. ⇐ Linux
1774082167
Anonymous
В моей программе на языке C у меня есть централизованный рабочий пул, содержащий указатели функций на выполняемые задачи. Я создаю несколько потоков (вплоть до общего количества подключенных процессоров), и каждый из них выполняет задачи из пула. Я прикрепляю потоки к определенным процессорам, думая, что один поток не должен прерывать другой поток на том же процессоре, чтобы выиграть время процессора, когда все потоки выполняют одну и ту же работу (ну, на самом деле в любой момент времени все потоки выполняют разные задачи, но мои задачи выполняются быстро).
Но теперь я думаю, что если поток закреплен за конкретным процессором, а другие потоки (не из моей программы) обрабатываются на одном и том же процессоре, то мой поток может не получить должного времени процессора. Если я не закреплю поток, то ядро автоматически переместит его на свободный ЦП.
Но тогда, если программы специально не привязывают свои потоки к этому ЦП, зачем ядру вообще планировать эти потоки на ЦП, к которому привязан поток? В конце концов, в моей системе я бы создал столько потоков, сколько было подключенных процессоров, так что это не имеет большого значения.
И потом я думаю, что это работает не так. Если во время выполнения моего потока прерываний не происходит, периодический тик планировщика все равно заставит процессор вернуться в ядро. После этого какое имеет значение, какой из моих рабочих потоков он запустит следующим? Оно уже прервано. ИИ говорит, что это важно, потому что кеши могут быть горячими для ранее запущенного потока, но на самом деле? Я думаю, что простого переключения в режим ядра и выполнения ядром всех своих задач достаточно, чтобы перезаписать кеши ЦП. И тогда разве ядро не выберет тот поток, кэши которого будут горячими? Он все равно может выбрать другой поток, если у него не так много процессорного времени.
Привязка ЦП также дает небольшое преимущество, позволяя мне выбирать, на каком типе ЦП запускать мои потоки. Для повышения эффективности я мог бы запустить его на процессорах с низким энергопотреблением и наоборот, если мне нужна производительность. Я уже делаю это в своей программе, потому что, если я закрепляю потоки, мне тоже нужно об этом позаботиться. Но потом я чувствую, что позволяю ядру делать это, тоже работает, но для этого мне не нужно закреплять потоки.
Я всего лишь студент, и это полная переработка программы, которую я создаю. Это оказывает незначительное влияние. Мои задачи выполняются очень быстро. Но я делаю это ради обучения. Мне нравится глубоко размышлять об оптимизации.
Подробнее: [url]https://stackoverflow.com/questions/79911786/multithreading-optimization-thread-pinning-could-cause-thread-starvation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия