level 7
哈哈哈哈🐼
楼主
我算是和矩阵乘法杠上了。
起因是很久之前发现使用1080TI计算float矩阵乘法误差会比CPU大,刚开始以为是老黄在浮点运算上动了手脚降低精度,后来查阅CUDA文档确认默认按IEEE-754来的,即四则运算FMA都是round to nearest, 简单的向量加减甚至内积计算结果都与CPU的一毛一样,一个位都不变。(这部分是matlab实现的,matlab内部调用cuda)
问题来了,按GPU的结构矩阵乘法的分块只会比CPU更多,我使用的是0-1间均匀分布的随机矩阵,更多的分块理论上误差应该会更小些。
我所知道的只剩一种可能,CU-blas使用了strassen类的算法。我拿出自己之前写的strassen代码,4096x4096的double矩阵,strassen递归到分块为64时与MKL/OPENBLAS得到的结果相差大约为Openblas与mkl之间差别的10倍(frobenius范数)。
理论上显卡的结构对strassen这类算法也是有利的,所以老黄的cu-blas里是否使用了strassen算法?
2019年02月22日 08点02分
1
起因是很久之前发现使用1080TI计算float矩阵乘法误差会比CPU大,刚开始以为是老黄在浮点运算上动了手脚降低精度,后来查阅CUDA文档确认默认按IEEE-754来的,即四则运算FMA都是round to nearest, 简单的向量加减甚至内积计算结果都与CPU的一毛一样,一个位都不变。(这部分是matlab实现的,matlab内部调用cuda)
问题来了,按GPU的结构矩阵乘法的分块只会比CPU更多,我使用的是0-1间均匀分布的随机矩阵,更多的分块理论上误差应该会更小些。
我所知道的只剩一种可能,CU-blas使用了strassen类的算法。我拿出自己之前写的strassen代码,4096x4096的double矩阵,strassen递归到分块为64时与MKL/OPENBLAS得到的结果相差大约为Openblas与mkl之间差别的10倍(frobenius范数)。
理论上显卡的结构对strassen这类算法也是有利的,所以老黄的cu-blas里是否使用了strassen算法?