0

我正在开发我的 MEX 文件,用于使用 CUDA 进行稀疏矩阵计算。我正在使用 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 数组(使用mxGetPr, mxGetIr, mxGetJc)分配稀疏矩阵。Pr 对应于 cusp 中的 values 数组,ir 对应于 column_indices,jc 对应于 row_offsets。如果矩阵在设备内存中,请使用cudaMemcpywith 复制它cudaMemcpyDeviceToHost是一些使用稀疏矩阵的示例(它适用于 Octave,但也适用于 Matlab)。

于 2013-04-08T15:03:59.093 回答