我使用CURAND来生成随机数。我创建了一个curandGenerator_t
来填充3个大约3600万个随机数的数组。每个数组都有不同的种子。数生成一个循环内完成或多或少是这样的:CURAND运行速度较慢
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);
}
因为我得到的结果是这些预期,但剖析应用程序后,我意识到它工作正常环路产生的一些迭代后的随机数变得更慢。在下图中,蓝绿色的项目从100毫秒变为1秒。
有人可以解释这是否是随机数生成的正常行为?
我做错了用三个不同的种子和只有一个curandGenerator生成随机数?
我希望生成器即使在更改种子后也能保存状态。我真的需要为3种不同的随机流提供3种不同的种子。我会看看它,看看它是如何发展的。如果问题仍然存在,我会再次发布。 – BRabbit27
问题其实是'curandSetSeed()'我跑了相同的测试,现在没有更多的减速效果,事实上我得到了更多的加速。 – BRabbit27