首页 文章

CUBLAS - 矩阵加法......怎么样?

提问于
浏览
3

我正在尝试使用CUBLAS来总结两个未知大小的大矩阵 . 我需要一个完全优化的代码(如果可能的话)所以我选择不重写矩阵加法代码(简单)但是使用CUBLAS,特别是允许对A和C求和的cublasSgemm函数(如果B是单位矩阵):* C = alpha * op(A)* op(B)beta * c *

问题是:C和C以行主格式存储矩阵,而cublasSgemm旨在(以便兼容)以列主格式工作 . 你可以指定A和B是否首先被转置,但你不能指示转置C.所以我无法完成我的矩阵添加..

我不能自己转置C矩阵,因为矩阵最大尺寸为20000x20000 .

有关如何解决的任何想法吗?

2 回答

  • 6

    如果你只是添加矩阵,它实际上并不重要 . 你给它alpha,Aij,beta和Cij . 它认为你给它alpha,Aji,beta和Cji,并给你它认为是Cji = beta Cji alpha Aji . 但就你而言,那是正确的Cij . 我担心的是当你开始做有关事的事情 - 比如矩阵产品 . 在那里,可能没有解决它 .

    但更重要的是,你不需要做一个完全没有意义的矩阵乘法(需要大约20,0003次操作和多次通过内存)才能进行操作,这只需要大约20,000次操作和一次通过!将matricies视为20,000 ^ 2长矢量并使用saxpy .

    矩阵乘法是内存带宽密集型的,因此在自己编码和调优版本之间存在巨大的(10倍或100倍)性能差异 . 理想情况下,在这种情况下,您只需使用线性代数标识即可进行管理 . C-vs-Fortran排序意味着当你传入A,CUBLAS "sees" AT(转置)时 . 哪个好,我们可以解决它 . 如果你想要的是C = A.B,以相反的顺序传入基础,B.A . 然后库看到(BT.AT),并计算CT =(A.B)T;然后当它传回CT时,你得到(按照你的订单)C . 测试并查看 .

  • 5

    cublasgeam已被添加到CUBLAS5.0中 . 它计算2个可选转置矩阵的加权和

相关问题