我正在尝试使用CUBLAS来计算未知大小的两个大矩阵。我需要一个完全优化的代码(如果可能),所以我选择不重写矩阵加法代码(简单),而是使用CUBLAS,尤其是cublasSgemm函数,它允许A和C相加(如果B是单位矩阵):* C = alpha * op(A)* op(B)+ beta * c *CUBLAS - 矩阵加法..怎么样?
问题是:C和C++以行主格式存储矩阵,cublasSgemm的目的是为了Fortran兼容性,主要格式。你可以指定A和B是否先被转置,但是你不能指示转置C.所以我无法完成我的矩阵加法。
我不能转置我自己的C矩阵,因为矩阵最大尺寸为20000x20000。
关于如何解决请任何想法?
如果你只是添加了matricies,那实际上并不重要,对吧?你给它alpha,Aij,beta和Cij。它意味着你给它alpha,Aji,beta和Cji,并给你它认为是Cji = beta Cji + alpha Aji。但就你而言,这是正确的Cij。我担心的是,当你开始讨论重要的事情时 - 比如矩阵产品。在那里,有可能没有解决它。 – 2011-03-25 21:38:26
但更重要的是,你不希望使用GEMM做矩阵_addition_ - 你正在做一个完全没有意义的矩阵乘法(需要花费大约20,000^3次操作并且很多次通过内存)一次性通过20,000^2次操作!将基质视为20,000^2长的载体并使用松软。 – 2011-03-25 21:43:32
非常感谢你的松软解决方案,它非常棒!所以用cublas实现(性能)矩阵乘法是完全不可能的,对吧?我应该自己编码? – 2011-03-25 22:27:24