0

CUDA を使用した疎行列計算用の MEX ファイルを開発しています。CUSP ライブラリを使用しています。cusp::csr_matrix を Matlab に戻す方法がわかりません。たとえば、私は

cusp::csr_matrix<mwIndex,double,cusp::host_memory> At(m,n,N);

それで、それは CSR 形式の At マトリックスであり、私が計算したとしましょう。今、私はそれをMatlabに戻さなければなりません。このようなもの:

plhs[0] = At;

しかし、もちろん、そのようには機能しません。まず At が GPU 上にあるためです。インデックスには At.values とメソッドを使用する必要があると思います。また、それらをホスト データに割り当てる方法は?

誰かがそれをすべて行う方法を提案できますか? :)

4

1 に答える 1

0

Matlab はスパース行列も CSR 形式で格納するため、複雑ではありません。を使用して疎行列を割り当て、mxArray *mxCreateSparse(mwSize m, mwSize n, mwSize nzmax, mxComplexity ComplexFlag);次に pr、ir、jc 配列を設定するだけです ( mxGetPrmxGetIr、を使用mxGetJc)。Pr は cusp の値配列に対応し、ir は column_indices に、jc は row_offsets に対応します。行列がデバイス メモリにある場合は、 with を使用cudaMemcpyして コピーしcudaMemcpyDeviceToHostます。スパース行列を使用した例を次に示します (Octave 用ですが、Matlab でも機能するはずです)

于 2013-04-08T15:03:59.093 に答える