gpt4 book ai didi

python - 使用 cython 进行慢速多处理

转载 作者:行者123 更新时间:2023-12-01 05:16:03 26 4
gpt4 key购买 nike

我目前正在用 python 开发基于最小最大树的人工智能。为了从人工智能中挤出额外的性能,我一直在使用 cython 来优化瓶颈,并尝试对树构建进行多处理。

我遇到的问题是,当使用 cython 进行多处理时,ai 实际上会变慢。我知道多处理会产生开销,有时会导致速度变慢。然而,当使用 cython 时,它只会变慢。当使用等效的 python 代码时,多处理可提供 2-3 倍的性能提升。

我已经运行了多次测试来排除任何明显的问题。例如,我在启用和不启用 alpha-beta 修剪的情况下都运行了测试(在某些情况下,如果没有多重处理,这可能会表现得更好),但这没有什么区别。我已经将 cython 对象设置为可pickle,并且多处理的 cython ai 构建了一个适当的树。我正在使用的多处理实现(仅将根子级传递给 pool.map 函数)确实提高了性能,但仅限于使用纯 python 代码时。

我错过了 cython 的一些怪癖吗?使用 cython 代码(或一般的 c 扩展)进行多处理会产生一些额外的开销吗?还是这是cython本身的问题?

编辑:以下是一些时间示例:

Given a depth of 7 and no Alpha-Beta pruning: (all times in seconds)

Cython, No Multiprocessing:
12.457

Cython, Multiprocessing:
15.440

No Cython, No Multiprocessing:
26.010

No Cython, Multiprocessing:
17.609

经过多次测试,我找到了开销的原因。 @Veedrac 是正确的,因为 c 扩展有额外的开销,而 python 的缓慢掩盖了没有 cython 的开销。具体来说,当从多个处理器返回分支并将它们添加到根节点时会产生开销。这解释了为什么开销不是恒定的,并且实际上随着树深度的增加而增加。

我其实早就怀疑过这一点,并且之前也进行过测试。然而,我之前用来测试此开销的代码似乎存在缺陷。我现在已经修复了多重处理,只返回必要的信息,并且开销已经消除。具有多处理功能的 Cython 现在运行速度非常快。

最佳答案

如果您在 C 和 Python 类型之间切换过多,Cython 可能会产生翻译成本,这可能会有所贡献。还有一个事实是,Python 的加速比会更高,这隐藏了开销。

一个建议是使用 nogil 函数并查看线程是否具有较低的开销。

关于python - 使用 cython 进行慢速多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com