我需要计算以下矩阵数学:
D * A
其中D是密集的,A是稀疏的,以CSC格式
cuSPARSE允许乘以稀疏*密集,其中稀疏矩阵是CSR格式。
根据相关问题,我可以简单地通过转置A.来将CSC“转换”为CSR
我也可以计算(A ^ T * D ^ T)^ T,因为我可以处理转换的结果
在这种方法中,我也可以避免“转置”A,因为CSR ^ T是CSC。
唯一的问题是cuSPARSE不支持在此操作中转置D,因此我必须预先转置它,或将其转换为CSR,这是完全浪费,因为它非常密集。
有没有解决方法?
谢谢。
答案 0 :(得分:1)
我找到了解决方法
我在整个代码中将内存访问更改为D.
如果D是mxn矩阵,并且我曾经D[j * m + i]
访问它,现在我正在通过D[i * n + j]
访问它,这意味着我将其设为行 - 主要而不是列 - 主要。
cuSPARSE以列主格式预测矩阵,并且因为rows-major转置是column-major,我可以将D传递给cuSPARSE函数作为伪转置而无需进行转置。