J'ai un tableau d'entrée qui est donné à un noyau. Chaque thread fonctionne avec une valeur du tableau et modifie la valeur ou ne la modifie pas du tout selon une règle.Emulation de std :: bitset dans CUDA
Je voudrais savoir très rapidement après s'il y avait des changements dans la mémoire d'entrée et, dans le cas où, je voudrais trouver très rapidement où ce changement s'est produit (index du tableau d'entrée). J'ai pensé à utiliser quelque chose comme un tableau de bits. La quantité totale de bits serait égale à la quantité totale de threads. Chaque thread ne manipulerait qu'un seul bit, donc initialement les bits seraient mis à false, si un thread change la valeur d'entrée correspondante, le bit deviendra vrai.
Afin de le rendre plus clair, supposons que nous avons ce tableau d'entrée appelé A
1 9 3 9 4 5
Le tableau de bits seront les suivants
0 0 0 0 0 0
Nous aurions 6 fils de travail sur le tableau d'entrée. Supposons que le tableau d'entrée final sera
1 9 3 9 2 5
donc le tableau finale de bits serait:
0 0 0 0 1 0
Je ne veux pas utiliser un tableau de bool
parce que chacune des valeurs prendra 1 octet de mémoire ce qui est beaucoup car je ne veux travailler qu'avec des bits.
Est-il possible de réaliser quelque chose comme ça?
J'ai pensé à créer un tableau char
où chaque valeur du tableau aura 8 bits. Cependant, que se passe-t-il si deux threads souhaitent changer différents bits du premier caractère du tableau? Ils devraient faire l'opération atomiquement même si le changement à l'intérieur du bit sera à des endroits différents. Donc, l'utilisation d'opérations atomiques perturbera probablement le parallélisme, et dans ce cas l'utilisation d'opérations atomiques n'est pas nécessaire, cela n'a aucun sens, mais devrait être utilisé en raison des contraintes d'utilisation d'un tableau de caractères plutôt que de quelque chose de plus spécialisé. comme un std::bitset
Merci d'avance.
Cette question ressemble beaucoup à vous: http://stackoverflow.com/questions/11042816/how-to-create-large-bit-array -in-cuda – BenC
Merci, j'ai lu la question et la réponse mais il ne dit rien sur la façon dont je peux utiliser un tableau de bits ou s'il y a quelque chose comme un 'std :: bitset' dans CUDA. Utiliser un tableau de 'bool' n'est pas une bonne idée car je ne peux pas utiliser trop de mémoire dans le GPU. – ksm001