使用numba@jit加速使用queu的多处理循环

2024-09-29 19:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习麻木的方法,还不知道如何使用或是否需要使用多处理.queue合并来自不同进程的所有循环数据。 我是想使用多处理模块将大循环分解成多个较小的循环以在单独的进程中运行,还是Numba会自动这样做?在

下面的代码在多处理模块中运行,它在多个进程中打开,这些进程被划分为系统核心计数。因此,有许多代码实例在整个计算的不同部分运行并循环计算,然后将结果0或1发送回父函数。 我的猜测是Numba独立完成这项工作的方式不同,我不想使用queue或多处理模块?在

@jit(nopython=True)
def prime_multiprocess(n, c, q):
    a, b, c = n[0], n[1], c
    for i in range(a, b):
        if c % i == 0:
            return q.put(0)
    return q.put(1)

This error may have been caused by the following argument(s):
- argument 2: cannot determine Numba type of <class 'multiprocessing.queues.Queue'>

我欣赏任何解释或链接,解释使用numba与并行循环,以加速事情。在


Tags: 模块数据实例方法代码returnqueueput
1条回答
网友
1楼 · 发布于 2024-09-29 19:23:05

我做了一些测试,似乎一个嵌套函数解决了这个问题: 我把它改写成:

def prime_multiprocess(n, c, q):
    a, b, c = n[0], n[1], c

    @jit(nopython=True)
    def speed_comp():
        for i in range(a, b):
            if c % i == 0:
                return 0
        return 1
    q.put(speed_comp())

它更快!在

编辑: 我被限制在可以使用的整数的大小上,这似乎有一个缺点。”感叹“为什么总是有一种权衡:(” 我想知道是否有可能解决这个问题,如果它会减缓它。答案可能在这里:Numba support for big integers?

Numba的工作方式是将整数转换为机器级别的整数,这些整数的范围仅限于系统级别,例如64位。这是使它运行更快的原因,因为在计算之上没有开销。不幸的是,如果不降低开销,就无法计算更大的整数。在

相关问题 更多 >

    热门问题