CuSparse csrmm示例

时间:2013-07-06 08:43:46

标签: cuda

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

提前谢谢

1 个答案:

答案 0 :(得分:3)

参考the documentationcsrmm函数意图,用于稀疏矩阵乘以密集矩阵:

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

“其中A是m×n稀疏矩阵...... B和C是密集矩阵......”

如果您想查看示例用法,请在appendix B of the documentation中提供示例:

/* 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对应的密集矩阵的指针。

如果你想做密集的稀疏时间,你可能也会对this question的@talonmies评论感兴趣:

  

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