繁体   English   中英

Python中数组的多线程求和

[英]Multithreaded summation of arrays in Python

我有两个大小为n1 X n2数组,我希望将它们并行添加在一起。 我有一个启用了openMPPython构建,但是在执行前在bash shell中设置export OMP_NUM_THREADS=4 ,我看不到代码是多线程的。 是否可以以多线程方式执行arr = arr + tarr

#!/usr/bin/env python

import numpy as np

n1 = 20000
n2 = 20000

arr = np.random.random_sample((n1,n2))

for i in range(10):
    tarr = np.random.random_sample((n1,n2))
    arr = arr+tarr

您的BLAS链接仅与线性代数运算(矩阵乘积,求解线性系统等)有关。 numpy本身并不对数组进行基本的元素级算术运算多线程(例如加法,非矩阵乘法,求幂等)。

对于多线程计算,最简单的选择之一是使用numexpr

In [1]: import numpy as np

In [2]: import numexpr as ne

In [3]: n1, n2 = 5000, 5000

In [4]: x = np.random.randn(n1, n2)

In [5]: %%timeit y = np.random.randn(n1, n2)
   ...: x + y
   ...: 
1 loops, best of 3: 245 ms per loop

In [6]: %%timeit y = np.random.randn(n1, n2)
   ...: ne.evaluate('x + y')
   ...: 
10 loops, best of 3: 83.6 ms per loop

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM