擅长:python、mysql、java
<p>一个好的方法是让主数组位于线程之外。然后给每个线程一个指针,指向线程应该计算的主数组的一部分。在</p>
<p>以下示例是矩阵乘法的实现(类似于二维数组的<code>dot</code>),其中:</p>
<pre><code>c = a*b
</code></pre>
<p>这里的并行性是在<code>a</code>的行上实现的。检查如何将指针传递给<code>multiply</code>函数,以便允许不同的线程共享相同的数组。在</p>
^{pr2}$
<p>要检查是否可以使用此脚本:</p>
<pre><code>import time
import numpy as np
import _stack
a = np.random.random((10000,500))
b = np.random.random((500,2000))
t = time.clock()
c = np.dot(a, b)
print('finished dot: {} s'.format(time.clock()-t))
t = time.clock()
c2 = _stack.mydot(a, b)
print('finished mydot: {} s'.format(time.clock()-t))
print 'Passed test:', np.allclose(c, c2)
</code></pre>
<p>在我的电脑上显示:</p>
<pre><code>finished dot: 0.601547366526 s
finished mydot: 2.834147917 s
Passed test: True
</code></pre>
<p>如果<code>a</code>的行数小于然后的列数或{<cd5>}中的列数,<code>mydot</code>会更糟,需要更好地检查哪个维度可以实现并行。在</p>