8ac7bd4173def42e07cad6cfb529a3b97cc7a639
1 #ifndef CURAND_TOOLS_H_
2 #define CURAND_TOOLS_H_
4 #include <curand_kernel.h>
7 /*----------------------------------------------------------------------*\
9 \*---------------------------------------------------------------------*/
11 /*--------------------------------------*\
13 \*-------------------------------------*/
17 * (1) Fabriquer sur le device les generateurs parallels de nomber aleatoire : setup_kernel_rand
18 * (2) Passer au kernel métier ces générateurs : ptrDevTabGeneratorThread
19 * (3) Dans le kernel métier
20 * curandState generatorThread = ptrDevTabGeneratorThread[tid]; //Optimisation
21 * xAlea = curand_uniform(&generatorThread);
23 * (H1) Grid et block monodimensionnelle
25 __global__
void setup_kernel_rand(curandState
* ptrDevTabGeneratorThread
, int deviceId
);
27 /*--------------------------------------*\
29 \*-------------------------------------*/
31 /*----------------------------------------------------------------------*\
33 \*---------------------------------------------------------------------*/
35 /*--------------------------------------*\
37 \*-------------------------------------*/
39 __global__
void setup_kernel_rand(curandState
* ptrDevTabGeneratorThread
, int deviceId
)
41 int tid
= Indice1D::tid();
43 // Customisation du generator: Proposition (au lecteur de faire mieux)
44 // Contrainte : Doit etre différent d'un GPU à l'autre
45 int deltaSeed
= deviceId
* INT_MAX
;
46 int deltaSequence
= deviceId
* 100;
47 int deltaOffset
= deviceId
* 100;
49 int seed
= 1234 + deltaSeed
; // deviceId+tid;
50 int sequenceNumber
= tid
+ deltaSequence
; // + tid;
51 int offset
= deltaOffset
;
53 //Each thread gets same seed , a different sequence number , no offset
54 curand_init(seed
, sequenceNumber
, offset
, &ptrDevTabGeneratorThread
[tid
]);
57 /*--------------------------------------*\
59 \*-------------------------------------*/
63 /*----------------------------------------------------------------------*\
65 \*---------------------------------------------------------------------*/