Puis-je utiliser Thrust::host_vector ou dois-je utiliser cudaHostAlloc pour une copie nulle avec Thrust ?
Question
Je souhaite utiliser la copie zéro sur la mémoire mappée en cudaHostGetDevicePointer
.Puis-je utiliser thrust::host_vector
ou je dois utiliser cudaHostAlloc(...,cudaHostAllocMapped)?
Ou est-ce plus facile à faire avec Thrust ?
La solution
Je suis presque sûr qu'il n'est toujours pas possible d'utiliser un poussé :: host_vector comme allocation d'hôte mappée.Il existe un allocateur de mémoire épinglé, mais je ne pense pas que la mémoire mappée soit disponible.Ce que vous devez faire est quelque chose comme ceci :
- Mémoire hôte mappée et épinglée allouée avec
cudaHostAlloc
- Obtenez le pointeur de périphérique pour la mémoire zéro copie en utilisant
cudaHostGetDevicePointer
- Créer un
thrust::device_ptr
en utilisantthrust::device_pointer_cast
sur le pointeur de cet appareil (voir ici pour plus d'informations)
Vous pouvez soit faire un thrust::device_vector
en utilisant le thrust::device_ptr
ou passer directement le thrust::device_ptr
à tous les algorithmes qui acceptent un itérateur.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow