9 votes

Existe-t-il un pointeur intelligent CUDA ?

Si ce n'est pas le cas, quelle est la méthode standard pour libérer cudaMalloc (Notez que je ne suis pas en mesure d'utiliser Thrust).

11voto

Sergey K. Points 14180

Vous pouvez utiliser RAII idiome et mettez votre cudaMalloc() y cudaFree() au constructeur et au destructeur de votre objet respectivement.

Une fois l'exception levée, votre destructeur sera appelé, ce qui libérera la mémoire allouée.

Si vous intégrez cet objet dans un pointeur intelligent (ou si vous le faites se comporter comme un pointeur), vous obtiendrez votre pointeur intelligent CUDA.

4voto

Mahdi Points 86

Vous pouvez utiliser cet outil personnalisé cuda::shared_ptr la mise en œuvre. Comme indiqué plus haut, cette implémentation utilise std::shared_ptr en tant qu'enveloppe pour la mémoire des périphériques CUDA.

Exemple d'utilisation :

std::shared_ptr<T[]> data_host =  std::shared_ptr<T[]>(new T[n]);
.
.
.

// In host code:
fun::cuda::shared_ptr<T> data_dev;
data_dev->upload(data_host.get(), n);
// In .cu file:
// data_dev.data() points to device memory which contains data_host;

Ce dépôt est en fait un seul fichier d'en-tête ( cudasharedptr.h ), de sorte qu'il sera facile de la manipuler si cela s'avère nécessaire pour votre application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X