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 に答える