python - 如何以跨系统方式将进程仅绑定(bind)到物理内核?

标签 python python-3.x cross-platform z3 hyperthreading

我正在使用 a project where each time you double the number of threads ,您会增加 40% 到 60% 的开销。由于超线程最多可将性能提高 30%,这意味着程序在超线程系统上的运行速度低于单线程模式。

第一步似乎很简单。

  • 通过len(os.sched_getaffinity(0))获取系统线程数

  • 通过z3参数限制线程数。

  • 使用 os.sched_setaffinity(0,mask) 将线程绑定(bind)到物理内核。

  • platform.machine() 中为不包含 Intel 或 amd 的系统启用 smt 解决方案。

然而,这样做会出现几个问题。

  • 如何知道系统是否启用了超线程?

  • 在使用os.sched_setaffinity(0,mask)之前,如何知道哪些cpu核心数是物理的还是逻辑的?

问题是程序目前通过 python3 支持大量平台:所有 Unixes,以及 Windows 和 Osx 和 Openvms,同时不要忘记 PyPy。

任何修复问题的补丁都不应生成新进程,也不应添加未包含的依赖项,也不应放弃对上述某些平台的支持。

有什么干净的方法可以解决这个问题?

最佳答案

loky library包含一个相当便携的解决方案。它确实生成了一个进程,然后缓存了结果——所以你不会多次生成一个进程。鉴于这是支持流行库(如 sklearn)的解决方案,我猜它几乎和它一样好。

关于python - 如何以跨系统方式将进程仅绑定(bind)到物理内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61483639/

相关文章:

python - 使用 dbus 仅在 Python 中发送消息

python字典错误AttributeError : 'list' object has no attribute 'keys'

python-3.x - keras 自定义度量函数如何将 2 个模型输出提供给单个度量评估函数

wpf - 为什么要在 XAML Window.Loaded 调用的方法中运行代码?

c# - 使用 Qt 获取系统空闲时间

python - 使用存储在字典中的字符串调用类

python - 如何使用PIL Image在Django网页中输出图像

python-3.x - keras LSTM模型输入和输出维度不匹配

python - 预测: Time-series prediction of future events using SVR module

c++ - 是否有用于 C++ 的操作系统 API 包装器库?