CuSparse csrmm 示例

4

我想知道Nvidia或其他可信来源是否提供了使用cusparse库中csrmm函数将稀疏矩阵与密集矩阵相乘的示例。

提前感谢您。

1个回答

4

参考文档csrmm函数是用于稀疏矩阵与密集矩阵相乘的功能:

C=α∗op(A)∗B+β∗C 

"其中A是一个m×n的稀疏矩阵...B和C是密集矩阵。"
"如果您想查看示例用法,请参阅文档附录B中提供的示例:链接:"
/* exercise Level 3 routines (csrmm) */
cudaStat1 = cudaMalloc((void**)&z, 2*(n+1)*sizeof(z[0]));   
if (cudaStat1 != cudaSuccess) {
    CLEANUP("Device malloc failed (z)");
    return 1;
}
cudaStat1 = cudaMemset((void *)z,0, 2*(n+1)*sizeof(z[0]));    
if (cudaStat1 != cudaSuccess) {
    CLEANUP("Memset on Device failed");
    return 1;
}
status= cusparseDcsrmm(handle, CUSPARSE_OPERATION_NON_TRANSPOSE, n, 2, n, 
                       nnz, &dfive, descr, cooVal, csrRowPtr, cooColIndex, 
                       y, n, &dzero, z, n+1);
if (status != CUSPARSE_STATUS_SUCCESS) {
    CLEANUP("Matrix-matrix multiplication failed");
    return 1;
}  

在附录B给出的完整示例中,稀疏矩阵Adescr(矩阵类型描述符)、cooVal(A的非零值)、csrRowPtr(A的CSR行指针)和cooColIndex(A的COO列索引)表示。y是指向与B对应的密集矩阵的指针,z是指向通用公式中C对应的密集矩阵的指针。
如果您想进行密集乘以稀疏乘积,您可能还会对@talonmies在这个问题中的评论感兴趣:

这是矩阵点积的基本结合律,即(Dense * Sparse)。T == Sparse.T * Dense.T


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接