我在用着每次将线程数加倍的项目 https://github.com/ConsenSys/mythril/pull/1372/files,您会增加 40% 到 60% 的开销。由于超线程将性能最多提高了 30%,这意味着程序在超线程系统上的运行速度比单线程模式要慢。
第一步似乎很简单。
通过获取系统的线程数len(os.sched_getaffinity(0))
通过z3参数限制线程数量。
使用以下命令将线程绑定到物理核心os.sched_setaffinity(0,mask)
.
为内部不包含 Intel 或 AMD 的系统启用 smt 解决方案platform.machine()
.
然而这样做会产生一些问题。
问题是该程序目前通过 python3 支持多种平台:所有 Unix、Windows、Osx 和 Openvm,同时也不要忘记 PyPy。
任何修复该问题的补丁都不应生成新进程,也不应添加未包含的依赖项,也不应放弃对上述某些平台的支持。
有什么干净的方法可以解决这个问题?
The loky library https://github.com/joblib/loky/blob/f15594a44420abfa9b398be7ff3c9180c2858bf4/loky/backend/context.py#L203包含一个相当可移植的解决方案。它确实生成一个进程,然后缓存结果——所以它不像您多次生成一个进程。鉴于这是支持流行库的解决方案,例如sklearn
,我猜它几乎已经尽善尽美了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)