mathe
发表于 2010-11-2 16:35:12
并不是慢在了乘法指令上了,而是慢在复杂度上了。n^3同n^2.81比较,当n=1000时,能够相差3-4倍,如果使用n^2.367,那就快多了,几十倍有了。
litaoye 发表于 2010-11-2 15:39 http://bbs.emath.ac.cn/images/common/back.gif
对于1000阶左右的矩阵,cache命中率还是很重要的,对于简单的乘法算法,通常只要对矩阵乘法运算做一下blocking就可以提高很多倍的速度。
forcal
发表于 2010-11-2 17:54:34
14# forcal
:) Forcal兄过奖了,现在还不能说超过matlab(因为还没真正成形),要真正超过它,还要提高Cache命中率,这也是我能想到的一个主要问题,在真正解决了这个问题之后,我会发给你的。:)
我想matlab(矩阵实 ...
G-Spider 发表于 2010-10-31 21:11 http://bbs.emath.ac.cn/images/common/back.gif
感谢+期待!呵呵。
参考这个论坛,是关于Matlab GPU 高性能计算的:http://www.matlabsky.com/forum-83-1.html
效率应该与liangbch 的测试结果一致吧?
G-Spider
发表于 2010-11-2 19:09:29
22# forcal
21# mathe
1024阶左右的矩阵,单精度,一行或一列也要4kb,10000阶接近40KB,一级Cache都放不下,当初用matlab试验PageRank的加速算法,有个试验数据的矩阵阶是9百多,运行了一下,果断放弃,虚拟内存不够....改用了个小一些的4百多的,对于大阶的矩阵,cache命中率非常重要,GPU运算进行了细致的分块,并没有用高级的算法,如果不把数据规划好,恐怕大多时间浪费在数据传输上了。
liangbch的GPU测试又点燃了我CUDA激情,呵呵,一年前初识CUDA,可惜没有平台(我的那破机是GF 7,郁闷),64位机的版本又不太成熟,也就了解了些基础知识,而今3.2版出来了,下了个64位的版本,比之前丰富多个,至少src有了(虽然工具仍然没有32位的多),运行了一下matrixMul,还算成功。
矩阵乘法,继续....今天考个鬼科学社会主义,还开卷,不停的“写”了两个小时,右手快废了。。。:*-^