Я пытался скопировать индексы строк, индексы столбцов и значения матрицы 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());
}
Ithe sim_row — это указатель вектора тяги, который был выделен в памяти в каком-то предыдущем коде и здесь не актуален.
Код компилируется, но во время выполнения происходит сбой с ошибкой:
завершение вызывается после создания экземпляра 'thrust::system::system_error' what(): недопустимый аргумент Прервано (сброшено ядро)
Может ли кто-нибудь сказать мне, что я делаю неправильно?
Спасибо, Акшай.
d_rows
,d_cols
иd_vals
очень неверен. - person talonmies   schedule 27.02.2013