次のようにCUSPライブラリを使用して、CSC形式をMatlabからCSRに変換することになりました。
Amatlab から行列を取得した後、そのrow、colおよびベクトルを取得し、それぞれに作成されvaluesたそれぞれにコピーしました。thrust::host_vector
その後、次の と の 2 つのタイプを作成しましcusp::array1dた。IndicesValues
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 から取得したものです。colsValthrust::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;
その後、以下に示すようthrust::raw_pointer_castに、適切な次元の配列が既にmxCalloc編集されている場所を使用して、この CSR マトリックスの 3 つの個別のコンテンツ配列をホストにコピーしました。
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