Как привязать процесс только к физическим ядрам кросс-системным способом? - PullRequest
3 голосов
/ 28 апреля 2020

Я использую проект, в котором каждый раз, когда вы удваиваете количество потоков , вы увеличиваете накладные расходы от 40% до 60%. Поскольку гиперпоточность увеличивает производительность до 30%, это означает, что программа работает медленнее, чем в однопоточном режиме в системах с многопоточностью.

Первые шаги кажутся простыми.

  • Получить число потоков в системе с помощью len(os.sched_getaffinity(0))

  • Ограничить количество потоков с помощью параметров z3.

  • Связать потоки к физическим ядрам с использованием os.sched_setaffinity(0,mask).

  • Оставьте включенными решения smt для систем, не содержащих Intel или amd внутри platform.machine().

Однако несколько для этого возникают проблемы.

  • Как узнать, включена ли в системе гиперпоточность?

  • Перед использованием os.sched_setaffinity(0,mask), как узнать, какой Номера ядер процессора являются физическими или логическими?

Проблема в том, что в настоящее время программа поддерживает большое количество платформ через python3: все Unix, а также Windows и Osx и Openvms не забывая при этом PyPy.

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

Что может быть чистым способом исправить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...