【发布时间】:2012-06-30 13:09:27
【问题描述】:
我想用 2 个非方阵 (2000,100), (100,100) 做矩阵乘法,我尝试使用 Nvidia 示例中的块子矩阵,但结果错误,我在这里找到了解决方法。 Non Square Matrix Multiplication in CUDA 它使用零填充,所以我将块大小更改为 16,但这是一个错误的工作组大小, 我用pyopencl,不能用Blas等。
【问题讨论】:
-
你没有问任何问题,只是用非常非常宽泛的术语说出了你想要实现的目标。那么,究竟是什么,你有问题或不理解? “结果是错误的”信息不足以让任何人为您提供帮助。
-
这里,我使用的所有数据都是int32和>0,我用两种方式实现,一种使用numpy dot函数,一种使用submatrix方法和pyopencl。对于方阵,两种方式给出相同答案,但对于非方阵,第一个给出正确答案,而第二个,只有矩阵的第一行是正确的,而某些元素
-
我在我发布的链接中看到了一些解决方案。 Nvidia示例中的子矩阵乘法仅适用于平方,然后有一个零填充方法,我认为这是一个好主意,但是如果我将blocksize设置为16,它不能除以结果矩阵的维度,所以它会给出错误消息: 错误的工作组规模。那么如何进行零填充呢?还是有其他方法?谢谢!
-
尝试阅读this answer。
-
我用较小的矩阵尝试了你提到的方式,这次我得到了正确的结果,但是如果我想将上面提到的矩阵相乘,它有一个分割错误,显然是全局大小(( 2000,100)) 超过了最大工作项大小((1024,1024,1024)),所以我现在该怎么办,我真的很困惑。
标签: opencl matrix-multiplication pyopencl