2016-01-13 46 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