CURDA 라이브러리를 사용하여 CUDA에서 무작위 생성 코드를 작성하고 있습니다. 내가 무작위 세대에 대해 읽은 것은 동일한 시드를 사용하면 동일한 난수 세트를 얻을 것이라고 믿게되었습니다. 하지만 그걸 시험 할 때가 아닙니다. 내가 뭘 잘못하고 있는지 설명해주세요. I는 기준 아래 코드를 붙여 오전 :CURAND가 동일한 시드로 다른 난수를 생성합니다.
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 : 624,778,773
1 : 3,522,650,202
2 2,363,946,744
3 : 1266286439
4 : 3928747533
5 : 3732235839
,6 : 1382638835
7 : 3362343509
8 : 48,542,993
9 : 1225999208
----------- 0 ----------------- -----
0 : 3356973615
1 : 1,004,333,919
2 2,916,556,602
3 : 1213079917
4 : 2705410958
5 : 520,650,207
6 : 1860816870
7 : 1645310928
8 : 2205755199
9가 1,282,999,252
----------- 1 ----------------------
해답을 가져 주셔서 감사합니다. 그래서 당신은 다른 난수에 대해 다른 씨앗을 생성 할 필요가 없다는 것을 의미하며, 동일한 씨드를 사용하더라도 다른 난수 세트를 얻을 것입니다. – user1439690
예 curandGenerate()를 호출 할 때마다 임의의 시드를 생성 할 필요가 없습니다. 프로그램 실행 당 한 번 시드를 설정할 수 있습니다. 예를 들어 'time (NULL)'을 사용하면 –
내가 설명을 가지고 있다고 생각합니다. cuRandGenerator는 시드 시마다 오프셋을 재설정하지 않으므로 다른 임의 값 집합을 얻습니다. 루프에서 생성기를 생성하고 파기하면 동일한 임의의 값을 갖게됩니다. – user1439690