我使用的是一个项目,每次您将线程数量增加一倍。,您增加了40%到60%的开销。当超线程将性能提高到最大30%时,这意味着程序在超线程系统上的运行速度比单线程模式慢。
第一步似乎很简单。
len(os.sched_getaffinity(0))获取系统上的线程数os.sched_setaffinity(0,mask)将线程绑定到物理内核。platform.machine()中不包含英特尔或amd的系统启用。然而,这样做会出现几个问题。
os.sched_setaffinity(0,mask)之前,如何知道哪个cpu核心号码是物理的还是逻辑的?问题是,该程序目前通过python3支持大量平台:所有Unixes,以及Windows、Osx和Openvms,同时又不忘记PyPy。
任何修复问题的修补程序都不应该生成新的进程,也不应该添加不包含的依赖项,也不应该对上面的一些平台放弃支持。
有什么干净的方法可以解决这个问题?
发布于 2020-12-26 13:03:32
图书馆包含一个相当可移植的解决方案。它确实产生了一个过程,然后缓存了结果--所以这并不意味着你不止一次地产生一个过程。考虑到这是支持像sklearn这样的流行库的解决方案,我想它几乎是一样好的。
https://stackoverflow.com/questions/61483639
复制相似问题