<p>我有下面的代码来确认一个手写的方法来计算两个方阵的kronecker积。第一部分确实验证了我的重复和平铺方法<code>a</code>和{<cd2>}分别产生相同的输出。在</p>
<pre><code>import pyopencl as cl
import numpy
from time import time
N = 3
num_iter = 1
a = numpy.random.rand(N,N)
b = numpy.random.rand(N,N)
c = numpy.kron(a, b)
abig = numpy.repeat(numpy.repeat(a,N,axis=1),N,axis=0)
bbig = numpy.tile(b,(N,N))
cbig = abig*bbig
print(numpy.allclose(c,cbig))
</code></pre>
<p>然后我尝试使用PyOpenCL将这个乘法移植到GPU。我首先在GPU内存上分别分配<code>biga</code>和{<cd4>}作为<code>d_a</code>和{<cd6>}。我还将<code>h_C</code>分配为主机上的空数组,<code>d_C</code>作为设备上相同大小的数组。在</p>
^{pr2}$
<p>以下是GPUTest.cl.测试公司名称:</p>
^{3}$
<p>然而,我的输出并不接近。我相信我的错误在于如何处理线程id。从另一个关于矩阵点积的例子中,我认为id基本上是元素在块中的位置,因为这是元素方面的,所以我只需要从A和B中提取相同位置的元素,将它们相乘在一起。是否需要将这些id合并到一个索引中,以更好地解决实际分配内存的方式?在</p>
<p>但有没有一种方法可以利用平铺或内存共享方法?这只是一个简单的计算方法的尝试,我希望得到一个不需要重复/平铺版本的<code>a</code>和{<cd2>}的算法。取<code>a</code>的单个元素,将<code>b</code>的整体性乘以它,然后将结果存储在<code>c</code>的分片中。在</p>