Trouver de la valeur max dans CUDA
Je suis en train d'écrire un code CUDA pour trouver la valeur max
pour l'ensemble donné de nombres.
Supposons que vous disposez de 20 numéros, et le noyau est en cours d'exécution sur 2 blocs de 5 threads. Supposons maintenant le 10 threads comparer les 10 premières valeurs en même temps, et thread 2 trouve une valeur max, de sorte que le thread 2 est la mise à jour de la valeur maxi de la variable dans la mémoire globale. Tandis que le thread 2 est la mise à jour, ce qui va se passer pour les autres threads (1,3-10) en comparaison à l'aide de l'ancienne valeur?
Si je verrouiller la variable globale à l'aide de atomicCAS(), le fils (1,3-10) comparer à l'aide de la vieille valeur max? Comment puis-je résoudre ce problème?
OriginalL'auteur kar | 2011-03-10
Vous devez vous connecter pour publier un commentaire.
C'est purement une réduction problème. Voici un bon présentation par NVIDIA pour l'optimisation de réduction sur les Gpu. Vous pouvez utiliser la même technique pour trouver le minimum, le maximum ou la somme de tous les éléments.
OriginalL'auteur jwdmsd
Le lien pour la Poussée de la bibliothèque est cassé.
Si quelqu'un trouve qu'il est utile de l'utiliser dans ce cas, vous pouvez trouver de la documentation ici:
Poussée, extrema réductions
OriginalL'auteur Panos Kal.
Sauf si vous essayez d'écrire une réduction du noyau, de la façon la plus simple est tout simplement d'utiliser le CUBLAS.
OriginalL'auteur Edric