疎行列と密行列を乗算するために、Nvidia またはライブラリのcsrmm
関数を使用する他の信頼できるソースによって提供される例があるかどうかを知りたかっただけです。cusparse
前もって感謝します
疎行列と密行列を乗算するために、Nvidia またはライブラリのcsrmm
関数を使用する他の信頼できるソースによって提供される例があるかどうかを知りたかっただけです。cusparse
前もって感謝します
ドキュメントを参照すると、この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 で与えられた完全な作業例からのこの抜粋では、スパース行列A
はdescr
(行列型記述子)、cooVal
(A の非ゼロ値)、csrRowPtr
(A の CSR 行ポインタ)、およびcooColIndex
(COO 列インデックス) で表されます。 Aの)。 y
は に対応する密行列へのポインタB
であり、 は一般式の にz
対応する密行列へのポインタです。C
密な時間を疎にしたい場合は、この質問に対する@talonmiesのコメントにも興味があるかもしれません:
(Dense * Sparse).T == Sparse.T * Dense.T というマトリックス内積の基本的な結合プロパティです。