我最终使用CUSP库将Matlab中的CSC格式从Matlab转换为CSR,如下所示。
从matlab获取矩阵A之后,我得到了row , col和values矢量,然后将它们复制到分别为它们创建的thrust::host_vector中。
之后,我创建了两个Indices和Values类型的cusp::array1d ,如下所示。
typedef typename cusp::array1dIndices;
typedef typename cusp::array1dValues;
Indices row_indices(rows.begin(),rows.end());
Indices col_indices(cols.begin(),cols.end());
Values Vals(Val.begin(),Val.end());
其中rows , cols和Val是我从Matlab获得的thrust::host_vector 。
之后,我创建了一个cusp::coo_matrix_view ,如下所示。
typedef cusp::coo_matrix_viewHostView;
HostView Ah(m,n,NNZa,row_indices,col_indices,Vals);
其中m , n和NNZa是我从稀疏矩阵的mex函数获得的参数。
我将此视图矩阵复制到设备存储器中的cusp::csr_matrix ,并按如下所示设置了适当的尺寸。
cusp::csr_matrixCSR(m,n,NNZa);
CSR = Ah;
之后,我仅使用thrust::raw_pointer_cast将此CSR矩阵的三个单独的内容数组复制回主机,其中具有适当尺寸的数组已按如下所示进行mxCalloc分配。
cudaMemcpy(Acol,thrust::raw_pointer_cast(&CSR.column_indices[0]),sizeof(int)*(NNZa),cudaMemcpyDeviceToHost);
cudaMemcpy(Aptr,thrust::raw_pointer_cast(&CSR.row_offsets[0]),sizeof(int)*(n+1),cudaMemcpyDeviceToHost);
cudaMemcpy(Aval,thrust::raw_pointer_cast(&CSR.values[0]),sizeof(float)*(NNZa),cudaMemcpyDeviceToHost);
希望这对在Matlab使用CUSP人有用