繁体   English   中英

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

[英]How to return sparse matrix from CUSP::csr_matrix in MEX to Matlab?

我正在开发用于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和方法。 但是,又如何将它们分配给主机数据?

有人可以建议怎么做吗? :)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM