树莓派4B实时图像处理:如何让np.sum()自动实现多核并行?
关于NumPy在树莓派4B上实现np.sum()多核并行的问题
我在树莓派4B(四核ARM)上进行实时图像处理,处理的数据是2048×2048大小的uint8型8位无符号整数二维数组,其中关键操作是按行和列对数组求和,代码如下:
vertical = np.sum(data, axis=0) horizontal = np.sum(data, axis=1)
我发现这些求和操作仅会占满一个CPU核心,其余三个核心处于闲置状态;但像a = np.dot(data, data)这类多线程NumPy操作则会占满四个核心。
为了加速,我手动启动四个独立线程拆分任务执行,各线程的操作如下:
# 线程1 vertical1 = np.sum(data[ 0:1024, : ], axis=0) # 线程2 vertical2 = np.sum(data[1024:2048, : ], axis=0) # 线程3 horizontal1 = np.sum(data[ : , 0:1024], axis=1) # 线程4 horizontal2 = np.sum(data[ : ,1024:2048], axis=1)
线程执行完成后,我将两个垂直求和数组、两个水平求和数组分别相加,得到最终结果。
我想知道:是否可以通过配置或编译NumPy,让np.sum()自动实现上述的多核并行?毕竟部分线性代数例程显然已支持该特性。我曾尝试用np.dot()与全1向量点乘来实现求和,虽然能利用多核,但速度远慢于我手动拆分的四线程方案。
针对“Python仅支持单线程”的观点,这里引用Python文档内容说明:
……若使用NumPy进行数组操作,Python会释放全局解释器锁(GIL),这意味着采用NumPy风格编写代码时,大量计算可通过少量数组操作完成,从而借助多线程实现提速。
内容的提问来源于stack exchange,提问作者B A
相关产品推荐
相关产品推荐

