次のようにCUSPライブラリを使用して、CSC形式をMatlabからCSRに変換することになりました。
A
matlab から行列を取得した後、そのrow
、col
およびベクトルを取得し、それぞれに作成されvalues
たそれぞれにコピーしました。thrust::host_vector
その後、次の と の 2 つのタイプを作成しまし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;
その後、以下に示すよう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