CURAND产生具有相同的种子不同的随机数(CURAND generating different

2019-09-22 00:12发布

我现在用的是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 ----------------------

Answer 1:

还有一个伪随机生成的“国家”的概念。 例如,梅森捻线机有大小约1024个字的状态,而默认的XORWOW有状态的大小只是一个几个单词(但它也有更小的时间段)。

每当你所说的“setPseudoRandomGeneratorSeed”初始化发电机的状态。 然后用后续调用curandGenerate此状态将被更新(即,从一个随机数到下一个,该状态需要重新计算)与随机序列的不同,因此部分将被生成。

你也可以尝试通过驱动程序API - 在这里curandInit()初始化状态为每个线程可以是相当昂贵的。 然后,后续调用curand()或curandUniform()等将重用这种状态。 其实每个线程从不同的随机序列的开始偏移



Answer 2:

线程调用是很随意的,所以即使是种子被设置在主机,每次运行都会产生不同的序列。



文章来源: CURAND generating different random numbers with same seed
标签: random cuda