2013-04-07 61 views
0

我正在開發用於CUDA稀疏矩陣計算的MEX文件。我正在使用CUSP庫。我不知道如何將cusp :: csr_matrix返回給Matlab。例如,我有如何將稀疏矩陣從MEX中的CUSP :: csr_matrix返回給Matlab?

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

因此,它是在企業社會責任的格式,其中,可以說,我已經計算矩陣。現在,我必須將它返回到Matlab。事情是這樣的:

plhs[0] = At; 

但是,當然,這是行不通的那樣,首先是因爲在上GPU。我想我應該使用At.values和索引方法。但是,如何將它們分配給主機數據?

有人可以建議如何做到這一點嗎? :)

回答

0

Matlab也以CSR格式存儲稀疏矩陣,所以它並不複雜。您所要做的就是使用mxArray *mxCreateSparse(mwSize m, mwSize n, mwSize nzmax, mxComplexity ComplexFlag);分配稀疏矩陣,然後設置pr,ir,jc陣列(使用mxGetPr,mxGetIr,mxGetJc)。 Pr對應於cusp中的值數組,ir對應column_indices,jc對應於row_offsets。如果矩陣在設備存儲器中,請使用cudaMemcpy將其複製爲cudaMemcpyDeviceToHostHere是一些使用稀疏矩陣的例子(它適用於八度,但也適用於Matlab)。

+0

謝謝。另外,我發現,在使用CUSP的情況下,可以使用Thrust。例如,設備向量Xg可以像這樣返回到Matlab數組T:mxArray * T = mxCreateDoubleMatrix(n,1,mxREAL); double * x = mxGetPr(T); thrust :: copy(xg.begin(),xg.end(),x); – 2013-04-09 17:39:05