gpt4 book ai didi

random - CURAND 使用相同的种子生成不同的随机数

转载 作者:行者123 更新时间:2023-12-04 18:13:16 29 4
gpt4 key购买 nike

我正在使用 CURAND 库在 CUDA 中编写随机生成代码。我读到的关于随机生成的内容让我相信,如果我使用相同的种子,我将得到相同的随机数集。但是当我测试它时,情况并非如此。请解释我做错了什么。我粘贴下面的代码以供引用:

    curandGenerator_t rand_gen;  
status = curandCreateGenerator (&rand_gen ,CURAND_RNG_PSEUDO_DEFAULT );
if(status != CURAND_STATUS_SUCCESS){
printf("Error encountered in generating handle\n");
}
status = curandSetPseudoRandomGeneratorSeed (rand_gen ,1234ULL);
if(status != CURAND_STATUS_SUCCESS){
printf("Error encountered in setting seed\n");
}

for(j=0; j<2; j++){
status = curandGenerate(rand_gen,a_d,N);
if(status != CURAND_STATUS_SUCCESS){
printf("Error encountered in generating random numbers\n");
}

cudaMemcpy ( a_h , a_d , N * sizeof(unsigned int),cudaMemcpyDeviceToHost);
for(i = 0; i < N; i++){
printf("%d : %u\n",i,a_h[i]);
}
printf("-----------%d----------------------\n",j);
}
status = curandDestroyGenerator(rand_gen);
if(status != CURAND_STATUS_SUCCESS){
printf("Error encountered in destroying handle\n");
}

输出:

0:624778773
1:3522650202
2:2363946744
3:1266286439
4:3928747533
5 : 3732235839
6:1382638835
7 : 3362343509
8 : 48542993
9:1225999208
----------0----------
0:3356973615
1:1004333919
2:2916556602
3:1213079917
4:2705410958
5:520650207
6:1860816870
7:1645310928
8 : 2205755199
9:1282999252
----------1----------

最佳答案

有一个伪随机生成器的“状态”概念。例如,Mersenne twister 的状态大小约为 1024 个字,而默认的 XORWOW 的状态大小只有几个字(但它的周期也小得多)。

每当您调用“setPseudoRandomGeneratorSeed”时,您都会初始化生成器的状态。然后随着对 curandGenerate 的后续调用,该状态将被更新(即从一个随机数转到下一个,需要重新计算该状态),因此将生成随机序列的不同部分。

您还可以尝试使用驱动程序 API - 这里 curandInit() 初始化每个线程的状态,这可能非常昂贵。然后对 curand() 或 curandUniform() 等的后续调用将重用此状态。实际上每个线程都从一个随机序列的不同偏移量开始

关于random - CURAND 使用相同的种子生成不同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212384/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com