我执行的算法,在本质上,是这样的一个系列矩阵,矩阵乘法的:做多矩阵的矩阵乘法在一个操作
Res = M1.M2.M3. ... .Mn
我矩阵是非常小100x100的花车,但序列非常长,数十亿的顺序。
我尝试使用CUBLAS进行矩阵乘法,但是这很慢,但我注意到了一些有趣的事情。
将100x100乘以100x100矩阵很慢,但将1.000.000x100乘以100x100相对较快,这让我想到了。如果我不是从左到右进行扫描,而是平行扫描10.000。这应该是非常快的,如果我在完成这个任务后将我的矩阵乘以,我会得到相同的结果 - 更快。
Res1 = M1.M2.M3. ... .Mn/1000-1 Res1 = M1+n/1000.M2+n/1000.M3+n/1000. ... .M2(n/1000)-1 ... Res1 = M1+999*n/1000.M2+999*n/1000.M3+999*n/1000. ... .M1000*(n/1000)-1 Res = Res1*Res2* ... *Res999
它的价值没有什么M_1 ...... M_n是一套约100个不同的矩阵,所以空间的消耗是不是真的有问题,所有我需要的就是要做到多乘一次操作。
现在,这是我的问题。我已经完成了一个矩阵矩阵(sgemm)的实现,该实现的灵感来自一个nvidia在他们的文档中演示,但它的速度是Cublas的4倍左右。有谁知道CUBLAS是如何工作的?如果代码在某处可用?
基督教是否以任何有用的方式特别?如果它们同时可以分解,这会变得简单得多。 – 2012-02-10 13:08:35
@JonathanDursi:矩阵的唯一特殊特征是对于每个矩阵,所有的值总和为1.矩阵是二次的,但是从描述中应该清楚。 – 2012-02-10 13:19:50