COOマトリックスの行インデックス、列インデックス、および値を別々の推力ベクトルにコピーしようとしていますが、コピーできないことがわかりました。
以下はコードです
cusp::coo_matrix <unsigned int, float, cusp::device_memory> *sim_mat;
sim_mat = new cusp::coo_matrix <unsigned int, float, cusp::device_memory>;
/* Code to fill up sim_mat: runs fine
...
*/
{
thrust::device_ptr <unsigned int> d_rows = &((sim_mat->row_indices));
thrust::device_ptr <unsigned int> d_cols = &((sim_mat->column_indices)[0]);
thrust::device_ptr <float> d_vals = &((sim_mat->values)[0]);
unsigned int size_nn = (sim_mat->row_indices).size();
thrust::device_vector <unsigned int> d_Rows;
thrust::device_vector <float> d_Vals;
thrust::device_vector <unsigned int> reduced_Rows;
// Code fails below this point
thrust::copy_n (d_rows, size_nn, d_Rows.begin());
thrust::copy_n (d_vals, size_nn, d_Vals.begin());
cout << size_nn << std::endl;
if (!(sim_mat->is_sorted_by_row()))
thrust::sort_by_key(d_Rows.begin(), d_Rows.end(), d_Vals.begin());
thrust::reduce_by_key(d_Rows.begin(), d_Rows.end(), d_Vals.begin(), reduced_Rows.begin(), sim_row->begin());
}
sim_rowは、以前のコードでメモリが割り当てられた推力ベクトルポインタであり、ここでは関係ありません。
コードはコンパイルされますが、実行時に次のエラーで失敗します。
'thrust :: system :: system_error'のインスタンスをスローした後に呼び出された終了what():無効な引数中止(コアダンプ)
誰かが私が間違っていることを教えてもらえますか?
ありがとうAkshay