【发布时间】:2021-11-12 23:32:35
【问题描述】:
我正在使用 emcee 文档中所述的多处理模块并行化 emcee。但是,htop 显示该程序一直使用有限数量的内核 (26-27)。我正在运行我的代码的计算机有 80 个可用内核,我想利用所有这些内核来加速代码。
有人可以帮我解决这个问题吗?我在文档中没有找到任何解决方案。
【问题讨论】:
-
大多数操作系统都定义了物理和逻辑处理器组。尤其是 Windows,每组的逻辑处理器不超过 64 个,"By default, an application is constrained to a single group"。我认为 Linux 也可能有类似的限制。您可以仔细检查
multiprocessing.cpu_count报告的内容。默认情况下,shell 通常还存在进程、内存和文件句柄限制(类似于ulimit)。最后确保您的 IO 不仅受磁盘速度的限制... -
@Aaron 谢谢。我检查了
multiprocessing.cpu_count,它给了我 80。我也不受限制。当我在其他程序中使用多处理模块时,我通过 htop 看到所有 80 个内核都在使用。但是对于'emcee',这个限制仍然存在,这真的减慢了我的代码...... -
在这种情况下,可能是库或库使用的算法的限制。
-
@Aaron 非常感谢您的洞察力。我刚刚发现 emcee 使用的核心数量等于步行者数量的一半,这就是为什么不是所有核心都被使用的原因。
标签: python multiprocessing pool emcee