J'utilise CURAND pour générer des nombres aléatoires. J'ai créé un curandGenerator_t
pour remplir 3 tableaux qui sont environ 36 millions de nombres aléatoires. Chacun de ces tableaux a une graine différente. La génération de nombres se fait dans une boucle plus ou moins comme ceci:CURAND plus lent
curandGenerator_t randGenerator;
curandCreateGenerator(&randGenerator, CURAND_RNG_PSEUDO_DEFAULT);
for(i = 0; i < 100; i++)
{
curandSetStream(randGenerator, stream[0]);
curandSetPseudoRandomGeneratorSeed(randGenerator, seed[0]);
curandGenerateUniformDouble(randGenerator, d_rv0, N);
curandSetStream(randGenerator, stream[1]);
curandSetPseudoRandomGeneratorSeed(randGenerator, seed[1]);
curandGenerateUniformDouble(randGenerator, d_rv1, N);
curandSetStream(randGenerator, stream[2]);
curandSetPseudoRandomGeneratorSeed(randGenerator, seed[2]);
curandGenerateUniformDouble(randGenerator, d_rv2, N);
}
Il fonctionne très bien que les résultats que je reçois sont ceux attendus mais après profilage l'application j'ai réalisé que, après quelques itérations de la boucle de la génération des nombres aléatoires devient plus lent. Dans l'image suivante, l'élément bleu-verdâtre passe de 100 ms à 1 s. Est-ce que quelqu'un pourrait expliquer si c'est un comportement normal de la génération de nombre aléatoire?
Suis-je en train de générer des nombres aléatoires avec trois graines différentes et un seul curandGenerator?
Je pensais que le générateur sauvait l'état même après avoir changé la graine. Et bien j'ai vraiment besoin de 3 graines différentes pour 3 flux aléatoires différents. Je vais y jeter un coup d'oeil et voir comment ça se passe. Si le problème persiste, je le posterai à nouveau. – BRabbit27
Le problème était en fait 'curandSetSeed()' j'ai exécuté le même test et maintenant il n'y a plus d'effet de ralentissement et en fait j'ai eu plus de vitesse. – BRabbit27