2012-06-30 51 views
0

我想要做矩阵乘法与2个非方阵,(2000,100),(100,100),我尝试用块子矩阵作为Nvidia的例子,但结果是错误的,我在这里找到了解决方法。 Non Square Matrix Multiplication in CUDA 它使用的零填充,所以我改变块的大小为16,但它是一个错误的工作组大小, 我用pyopencl而不能使用布拉斯等。非方形矩阵乘法OpenCL中

+2

你还没有问一个问题,只有在你想达到什么非常非常广泛的术语说。那么,究竟是什么,你是有问题还是不明白? “结果是错误的”并不是任何人都能够帮助你的足够信息。 – talonmies

+0

在这里,所有我使用的数据是INT32和> 0,我有两种方式,一是使用numpy的点功能,一个使用小矩阵方法和pyopencl.For方阵实现,这两个方式给出相同的答案,但对于非方阵,第一个给出正确的答案,第二个,只有第一排矩阵是正确的,而一些元素<0甚至整个矩阵的一半的一半有元素= 0。 – user1492775

+0

我在发布的链接中看到了一些解决方案。 Nvidia示例中的子矩阵乘法只适用于平方,然后有一个零填充方法,我认为这是一个好主意,但是如果我将块大小设置为16,则不能按结果矩阵的维数进行划分,因此会给出错误消息:错误的工作组大小。那么如何做零填充?或者有其他方法?谢谢! – user1492775

回答

0

一个我看到的题目迄今为止最好的演讲是在2011年AFDS

PDF presentation.

Video (stream)

Video (download)

他们的矩阵是巨大的--Linpack大小 - 和非方形。您可以从1024向下扩展其主要GPU内核的块大小更小的东西(32,64,128?),以更好地解决你的问题,甚至可能适合你的硬件LDS。演示者使用CPU来处理GPU未触及的不规则尺寸区域。