4

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

先感谢您

4

1 回答 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(COO 列索引)表示A)。 y是指向对应的稠密矩阵的指针B,是指向通式中z对应的稠密矩阵的指针。C

如果您想做密集时稀疏,您可能还对@talonmies 对此问题的评论感兴趣:

(Dense * Sparse).T == Sparse.T * Dense.T 是矩阵点积的基本关联性质

于 2013-07-06T13:16:00.253 回答