La génération de nombre aléatoire à l'intérieur de Cuda noyau dans une plage variant
Je suis en train de générer de nombres aléatoires de nombres aléatoires à l'intérieur de la cuda noyau. Je souhaite générer des nombres aléatoires à partir d'une distribution uniforme et dans la forme entière, à partir de 1 jusqu'à 8. Les nombres aléatoires serait différent pour chacun des threads. La gamme jusqu'à laquelle nombre aléatoire peut être généré serait également varier d'un thread à l'autre. Le maximum de l'échelle dans un thread peut être aussi bas que 2 ou dans l'autre thread, il peut être élevé que 8, mais pas plus que cela. Donc, je suis en fournissant un exemple ci-dessous de la façon dont je veux que les chiffres générée :
In thread#1 --> maximum of the range is 2 and so the random number should be between 1 and 2
In thread#2 --> maximum of the range is 6 and so the random number should be between 1 and 6
In thread#3 --> maximum of the range is 5 and so the random number should be between 1 and 5
et ainsi de suite...
Vous devez vous connecter pour publier un commentaire.
EDIT: j'ai édité ma réponse à corriger certaines des lacunes souligné dans les autres réponses (@tudorturcu) et les commentaires.
distribution
entre 0.0 et 1.0
valeur + 0.999999).
Quelque chose comme ceci dans votre code de périphérique:
Vous devez:
pour
truncf
Voici un exemple développé:
@Robert n'est pas de générer une parfaitement distribution uniforme (bien que tous les numéros de la plage sont générés et tous les nombres générés sont dans la gamme). À la fois la plus petite et la plus grande valeur de 0,5, la probabilité d'être choisi pour le reste de la les numéros de la plage.
À l'étape 2, vous devez multiplier par le nombre de valeurs dans la gamme: (la plus grande valeur plus petite valeur + 0.999999). *
À l'étape 3, le décalage doit être (+ la plus petite valeur) au lieu de (+ plus petite valeur de + 0,5).
Les étapes 1 et 4 restent les mêmes.
*Comme @Kamil Czerski noté, 1.0 est inclus dans la distribution. L'ajout de 1.0 au lieu de 0.99999 parfois le résultat dans un certain nombre dehors de la plage souhaitée.