我只是想知道Nvidia或使用csrmm
库中的cusparse
函数的任何其他可信来源是否提供任何示例,以便将稀疏矩阵与密集矩阵相乘。 / p>
提前谢谢
答案 0 :(得分:3)
参考the documentation,csrmm
函数意图,用于稀疏矩阵乘以密集矩阵:
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给出的完整工作示例的摘录中,稀疏矩阵A
由descr
(矩阵类型描述符),cooVal
表示(非零值) A),csrRowPtr
(A的CSR行指针)和cooColIndex
(A的COO列索引)。 y
是指向与B
对应的密集矩阵的指针,z
是指向通用公式中与C
对应的密集矩阵的指针。
如果你想做密集的稀疏时间,你可能也会对this question的@talonmies评论感兴趣:
它是矩阵点积的基本关联属性(Dense * Sparse).T == Sparse.T * Dense.T