J'ai un vecteur de vecteurs:Cuda poussée :: device_vector obtenir le pointeur de la gamme spécifique
thrust::device_vector weights_;
qui est une quantité continue de la mémoire, où chaque w articles, représentent un vecteur.
Dans l'une de mes fonctions, je passe comme paramètres le début et la fin de cette gamme, comme ceci:
__host__ ann::d_vector ann::prop_layer (
unsigned int weights_begin,
unsigned int weights_end,
ann::d_vector & input
) const
puis, je vais copier dans un nouveau vecteur qui vont, puis obtenir un pointeur brut que je peux utiliser dans un noyau:
thrust::device_vector<float> weights (weights_.begin() + weights_begin,
weights_.begin() + weights_end);
float * weight_ptr = thrust::raw_pointer_cast(weights.data());
some_kernel<<<numBlocks,numThreads>>>(weight_ptr, weight.size());
- puis-je obtenir un pointeur de cette plage, sans avoir d'abord la copie à un nouveau vecteur? Cela semble être un gaspillage de copy-realloc pour moi.
- Dans le cas où je ne peux pas obtenir un pointeur de cette plage, puis-je au moins assigner un vecteur à cette plage, sans copier les valeurs réelles?
C'est aussi simple que ça? Merci ! –
* erreur: aucune fonction de conversion appropriée de "thrust :: device_ptr" à "float *" existe * Ai-je besoin de * thrust :: raw_pointer_cast * d'abord? –
Oui, comme vous l'avez montré, désolé. –