我最终使用 CUSP 库将 CSC 格式从 Matlab 转换为 CSR,如下所示。
A
从 matlab获取矩阵后,我得到了它的row
,col
和values
向量,我将它们分别复制到thrust::host_vector
为它们每个创建的中。
之后,我创建了两个cusp::array1d
类型Indices
,Values
如下所示。
typedef typename cusp::array1d<int,cusp::host_memory>Indices;
typedef typename cusp::array1d<float,cusp::host_memory>Values;
Indices row_indices(rows.begin(),rows.end());
Indices col_indices(cols.begin(),cols.end());
Values Vals(Val.begin(),Val.end());
在哪里rows
,是我从 Matlab 得到的cols
。Val
thrust::host_vector
之后,我创建了一个cusp::coo_matrix_view
如下所示的。
typedef cusp::coo_matrix_view<Indices,Indices,Values>HostView;
HostView Ah(m,n,NNZa,row_indices,col_indices,Vals);
其中m
和是我从稀疏矩阵函数中n
得到的参数。NNZa
mex
我将此视图矩阵复制到cusp::csr_matrix
设备内存中,并设置了正确的尺寸,如下所示。
cusp::csr_matrix<int,float,cusp::device_memory>CSR(m,n,NNZa);
CSR = Ah;
之后,我只是将这个 CSR 矩阵的三个单独的内容数组复制回主机,使用thrust::raw_pointer_cast
where 已经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);
希望这对使用的任何人都有CUSP
用Matlab