首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以跨系统的方式将进程绑定到物理核心?

如何以跨系统的方式将进程绑定到物理核心?
EN

Stack Overflow用户
提问于 2020-04-28 15:12:01
回答 1查看 178关注 0票数 3

我使用的是一个项目,每次您将线程数量增加一倍。,您增加了40%到60%的开销。当超线程将性能提高到最大30%时,这意味着程序在超线程系统上的运行速度比单线程模式慢。

第一步似乎很简单。

  • 通过len(os.sched_getaffinity(0))获取系统上的线程数
  • 通过z3参数限制线程数。
  • 使用os.sched_setaffinity(0,mask)将线程绑定到物理内核。
  • 将smt解决方案保留为platform.machine()中不包含英特尔或amd的系统启用。

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

  • 如何知道系统是否启用了超线程?
  • 在使用os.sched_setaffinity(0,mask)之前,如何知道哪个cpu核心号码是物理的还是逻辑的?

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2020-12-26 13:03:32

图书馆包含一个相当可移植的解决方案。它确实产生了一个过程,然后缓存了结果--所以这并不意味着你不止一次地产生一个过程。考虑到这是支持像sklearn这样的流行库的解决方案,我想它几乎是一样好的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61483639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档