我想知道Nvidia或其他可信来源是否提供了使用cusparse库中csrmm函数将稀疏矩阵与密集矩阵相乘的示例。
提前感谢您。
参考文档,csrmm
函数是用于稀疏矩阵与密集矩阵相乘的功能:
C=α∗op(A)∗B+β∗C
/* 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;
}
A
由descr
(矩阵类型描述符)、cooVal
(A的非零值)、csrRowPtr
(A的CSR行指针)和cooColIndex
(A的COO列索引)表示。y
是指向与B
对应的密集矩阵的指针,z
是指向通用公式中C
对应的密集矩阵的指针。这是矩阵点积的基本结合律,即(Dense * Sparse)。T == Sparse.T * Dense.T