J'ai essayé de copier les indices de ligne, les index de colonne et les valeurs d'une matrice COO dans des vecteurs de poussée distincts, mais je trouve que je suis incapable de fais-le.Comment copier les lignes_indices d'une matrice COO à un vecteur de poussée dans CUSP
est Ci-dessous le code
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 est un pointeur de vecteur de poussée qui a été alloué la mémoire dans un code précédent et ne sont pas pertinentes.
Le code compile, mais échoue au moment de l'exécution avec l'erreur:
terminate called after throwing an instance of 'thrust::system::system_error' what(): invalid argument Aborted (core dumped)
Quelqu'un pourrait-il me dire ce que je fais mal?
Merci Akshay
Votre méthode d'affectation 'd_rows',' d_cols' et ' d_vals' est très mauvais. – talonmies