如何从CUSP::csr_matrix在MEX返回稀疏矩阵到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。索引的值和方法。但是,如何将它们分配给主机数据呢?

谁能建议怎么做这一切?:)

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

最新更新