如何从MEX中的CUSP :: csr_matrix返回稀疏矩阵到Matlab?

时间:2013-04-07 00:24:24

标签: matlab return sparse-matrix mex cusp-library

我正在使用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和方法来索引。但是,还有,如何将它们分配给主机数据?

有人可以建议如何做到这一切吗? :)

1 个答案:

答案 0 :(得分:0)

Matlab也以CSR格式存储稀疏矩阵,因此并不复杂。您所要做的就是使用mxArray *mxCreateSparse(mwSize m, mwSize n, mwSize nzmax, mxComplexity ComplexFlag);分配稀疏矩阵,然后设置pr,ir,jc数组(使用mxGetPrmxGetIrmxGetJc)。 Pr对应于cusp中的值数组,ir对应于column_indices,jc对应于row_offsets。如果矩阵位于设备内存中,请使用cudaMemcpy使用cudaMemcpyDeviceToHost进行复制。 Here是使用稀疏矩阵的一些例子(它用于Octave,但也适用于Matlab)。