2016-01-13 52 views
1

我有两个大小为n1 X n2的数组,我希望它们并行添加在一起。我有一个openMP已启用版本Python,但是当我在执行前在我的bash shell中设置export OMP_NUM_THREADS=4时,我看不到我的代码是多线程的。是否可以用Mulithreaded的方式执行arr = arr + tarrPython中数组的多线程求和

#!/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 
+3

你的题目是关于“矢量”,但文字是关于“线程”。这些是不同的问题。 – hpaulj

+1

用'openMP'构建的'numpy'和/或它的库(BLAS等)? – hpaulj

+1

我不认为简单的数组添加是用BLAS完成的。像dot产品或等式解决这样的操作是否获得多线程? – kazemakase

回答

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