【发布时间】:2016-01-13 19:12:15
【问题描述】:
我有两个大小为n1 X n2 的数组,我希望将它们并行相加。我有一个启用了Python 的openMP 构建,但是当我在执行之前在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
【问题讨论】:
-
你的标题是关于“矢量化”的,但文字是关于“线程化”的。这些是不同的问题。
-
是
numpy和/或其库(BLAS 等)使用openMP构建的吗? -
我不认为简单的数组添加是用 BLAS 完成的。点积或方程求解之类的操作是否获得了多线程?
-
是的,关于矢量化和线程化你是对的。我有两个版本——一个带有 AVX 特定编译,一个没有。 AVX 编译没有得到加速,也没有使用多线程,所以我说两者但没有具体说明区别。道歉。
-
是的,我使用的版本是使用 Intel MKL 编译的。
标签: python multithreading performance numpy