Python中数组的多线程求和

时间:2016-01-13 19:12:16

标签: python multithreading performance numpy

我有两个大小为n1 X n2的数组,我希望它们可以并行添加。我有一个openMP已启用的Python版本,但是当我在执行之前在export OMP_NUM_THREADS=4 shell中设置bash时,我看不到我的代码是多线程的。是否可以以多种方式执行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

1 个答案:

答案 0 :(得分:1)

您的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