comment utiliser le gpu::Ruisseau dans OpenCV?
OpenCV a gpu::Stream
classe qui encapsule une file d'attente des appels asynchrones. Certaines fonctions ont des surcharges avec les autres gpu::Stream
paramètre. Hormis gpu-basics-similarity.cpp exemple de code, il y a très peu d'information dans les OpenCV documentation sur comment et quand utiliser gpu::Stream
. Par exemple, il n'est pas très clair (pour moi) qu'est-ce exactement gpu::Stream::enqueueConvert
ou gpu::Stream::enqueueCopy
faire, ou comment utiliser gpu::Stream
supplémentaires, surcharge de paramètre. Je suis à la recherche d'un tutoriel comme aperçu de gpu::Stream
.
OriginalL'auteur Alexey | 2013-07-24
Vous devez vous connecter pour publier un commentaire.
Par défaut, tous les gpu les fonctions du module sont synchrones, c'est à dire courant thread CPU est bloqué jusqu'à ce que l'opération se termine.
gpu::Stream
est un wrapper pourcudaStream_t
et permet d'utiliser asynchrone appel non bloquant. Vous pouvez aussi lire "CUDA C Guide de Programmation" pour des informations détaillées sur CUDA asynchrone de l'exécution en simultané.La plupart des gpu module de fonctions supplémentaires
gpu::Stream
paramètre. Si vous passez par défaut flux de l'appel de la fonction sera asynchrone, et l'appel sera ajouté aux flux de file d'attente de commandes.Aussi
gpu::Stream
fournit methos pour mémoire asynchrone transferts entreCPU<->GPU
etGPU<->GPU
. MaisCPU<->GPU
asynchrone mémoire transferts ne fonctionne qu'avec page verrouillée de la mémoire hôte. Il y a une autre classegpu::CudaMem
qui encapsule une telle mémoire.Actuellement, vous pouvez rencontrer des problèmes si la même opération est mis en file d'attente deux fois avec des données différentes à différents courants. Certaines fonctions d'utiliser la constante ou la texture de la mémoire graphique, et le prochain appel peut mettre à jour la mémoire avant que la précédente a été terminée. Mais l'appel de différentes opérations en mode asynchrone est sûr parce que chaque geste a son propre constante de la mémoire tampon. Copie de la mémoire/upload/download/opérations set de tampons que vous détenez sont également sans danger.
Ici est de petite taille de l'échantillon:
quand on utilise plusieurs flux?
Oui, vous pouvez utiliser plusieurs flux. Mais, comme je l'ai dit, vous pouvez rencontrer des problèmes si vous appelez les mêmes fonctions à partir de différents flux.
Comment est-ce qu'un code valide? Ne serait pas host_src_pl être vide?
stream.enqueueDownload
va allouer de la mémoire pourhost_dst_pl
.OriginalL'auteur jet47