1

疎行列 D があり、次のように D_transpose と D を乗算して L を取得します。

L = D'*D;

スパース行列を処理するために sparseBLAS を使用していますが、ドキュメントには 2 つのスパース行列を乗算するものは何もないと書かれています。

私は完全に立ち往生しており、どうすればよいかわかりません。

D の次元は通常、約 500,000 x 250,000 です。それほど多くのメモリを割り当てることはまったくできないため、疎行列を使用して行う必要があります。

私はこれを MATLAB を使用して行いましたが、インターフェイスの下で sparseBLAS も使用している場合、MATLAB がどのようにそれを行うのか理解できません。そうでない場合、それは何を使用しますか? 私もそれを使うことができました。

読んでくれてありがとう!

編集:解決しました。ベクトルで乗算するには、L 行列が必要でした。したがって、最初に L を計算する代わりに、単純に D'*(D*x) を実行したため、2 つの疎行列の乗算が不要になりました。現在、sparseBLAS でサポートされている疎行列と密ベクトルの乗算のみを行っています。

4

2 に答える 2

1

それは実際に投稿されたドキュメントに記載されています。

11ページ

5.2 スパース BLAS 行列の使用

スパース BLAS マトリックス ハンドルが完全に構築されると (プロパティ blas_valid_handle をチェックすることでテストできるもの)、マトリックス ハンドルを使用して操作を実行できます。現時点では、表 3.2 および 3.3 に示す 4 つの操作がサポートされています。 スパース BLAS マトリックスで操作を実行することに加えて、そのハンドルを介してそのプロパティを照会することができます。表 5.5 に、get properties ルーチンを呼び出して取得できるプロパティを示します。

表 3.3 ページ 4

USMM 疎行列 - 行列乗算

なのでサポートはあるようです。関数の署名が見つかりませんBLAS_usmm。たぶん、ヘッダーをチェックインできます。

編集: NISTから sparseBLas を取得した場合は、署名とパラメーターblas_sparse_proto.hの関数のファイルを確認できます。BLAS_*usmm

 /* Level 3 Computational Routines */

int BLAS_susmm( enum blas_order_type order, enum blas_trans_type transa,
    int nrhs, float alpha, blas_sparse_matrix A, const float *b, int ldb,
        float *c, int ldc );
int BLAS_dusmm( enum blas_order_type order, enum blas_trans_type transa,
        int nrhs, double alpha, blas_sparse_matrix A, const double *b,
        int ldb, double *c, int ldc );
int BLAS_cusmm( enum blas_order_type order, enum blas_trans_type transa,
         int nrhs, const void *alpha, blas_sparse_matrix A, const void *b, 
     int ldb, void *c, int ldc );
int BLAS_zusmm( enum blas_order_type order, enum blas_trans_type transa,
         int nrhs, const void *alpha, blas_sparse_matrix A, const void *b, 
     int ldb, void *c, int ldc );
于 2013-09-05T13:55:39.173 に答える