【问题标题】:#numpy Is there a way to get numpy.sum() to use multiple cores?#numpy 有没有办法让 numpy.sum() 使用多核?
【发布时间】:2023-02-22 22:27:12
【问题描述】:

我在 Raspberry Pi 4B(四核 ARM)上使用 numpy.sum() 进行实时图像处理。数据是 8 位无符号整数(uint8 类型)的二维数组,典型大小为 2048 x 2048。重要的操作之一是对行和列求和:

vertical   = np.sum(data, axis=0) 
horizontal = np.sum(data, axis=1)

我注意到这些操作只会使一个 CPU 核心饱和,而其他三个核心则处于空闲状态。这与多线程 numpy 操作形成对比,例如 a = np.dot(data,data),它会使所有四个 CPU 内核饱和。

我通过启动四个单独的执行线程来加速我的代码。四个线程做如下操作:

thread 1:  vertical1   = np.sum(data[   0:1024,    :    ], axis=0)
thread 2:  vertical2   = np.sum(data[1024:2048,    :    ], axis=0)
thread 3:  horizontal1 = np.sum(data[    :    ,   0:1024], axis=1)
thread 4:  horizontal2 = np.sum(data[    :    ,1024:2048], axis=1)

线程完成后,我将两个垂直数组和两个水平数组相加,以获得我想要的结果。

有没有办法配置或构建 numpy,以便我描述的多核并行化类型可以由 np.sum() 自动完成?这显然发生在一些线性代数例程中,事实上,我可以通过使用 np.dot() 将包含所有 1 的向量点到我的帧矩阵中来获得小的加速。然而,虽然这确实使用了多核,但它比我上面描述的简单的“四线程”方法要慢得多。

【问题讨论】:

  • 是什么让你认为 np.dot 运行于“所有四个 CPU 内核”

标签: python numpy


【解决方案1】:

看看这个问题:https://stackoverflow.com/a/75030053/17045315

据我了解,python 仅使用 CPU 的一个核心(?)。

是的,普通 Python 只使用一个内核。

numpy 是否使用更多的核心来加速计算?

如果你想并行化你的计算,看看 Numba。目标是在对代码进行少量更改的情况下并行化 Numpy 计算。

https://numba.pydata.org/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2021-05-10
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多