2

次の行列演算を計算する必要があります:
D * A
ここで、D は密、A は疎で、CSC 形式です。
cuSPARSE では、疎行列が CSR 形式である場合に、疎 * 密の乗算が可能です。

関連する質問に続いて、A を転置するだけで CSC を CSR に「変換」できます。
また、転置された結果を処理できるため、(A^T * D^T)^T を計算することもできます。
CSR^T は CSC であるため、この方法では A の「転置」も回避できます。

唯一の問題は、この操作で cuSPARSE が D の転置をサポートしていないことです。そのため、事前に転置するか、CSR に変換する必要があります。これは、非常に密度が高いため、まったくの無駄です。

回避策はありますか?
ありがとう。

4

1 に答える 1

1

回避策を見つけました。
コード全体でメモリ アクセスを D に変更しました。
D が mxn 行列の場合、以前は でアクセスしていましたがD[j * m + i]、今では でアクセスしていD[i * n + j]ます。つまり、列優先ではなく行優先にしました。
cuSPARSE は列優先の形式の行列を想定しています。また、行優先の転置は列優先であるため、転置を行わなくても D を偽の転置として cuSPARSE 関数に渡すことができます。

于 2013-07-14T05:44:26.120 に答える