Cómo generar números aleatorios en la función del kernel cuda
curandCreateGenerator(& gen, CURAND_RNG_pseudo_default);
Especifique el disparador como gen y el modo aleatorio como CURAND_RNG _pseudo_default.
curandSetPseudoRandomGeneratorSeed(gen, 1234 ull);
Especifique la semilla como 1234ULL (diferentes semillas generan diferentes secuencias aleatorias).
curandGenerateUniform(gen, devData, n);
Según el gen de activación, el puntero de destino de salida es devData y el tamaño es n.
/*
*Este programa utiliza la API CURAND del host para generar 100
* flotantes pseudoaleatorios.
*/
# incluir & ltstdio.h & gt
# incluir & ltstdlib.h & gt
# incluir & ltcuda .h & gt
# include & ltcurand.h & gt
#define CUDA_CALL(x) do { if((x)!=cudaSuccess) { \
printf("Error ubicado en %s:%d\n ", __FILE__, _ _ LINE _ _);\
Devolver EXIT _ FAILURE}} while(0)
#define CURAND_CALL(x) do { if((x)!=CURAND_STATUS_SUCCESS) { \
printf("Error ubicado en %s:%d\n ", __FILE__, _ _ LINE _ _) ;\
Regresar EXIT _ FAILURE}} while(0)
int main(int argc, char *argv[])
{
size_t n = 100;
size_t I;
curandGenerator_t gen
float *devData, *hostData
/*Asignar n puntos flotantes en el host*/
hostData = (float *)calloc(n, sizeof(float));
/*Asignar n en el dispositivo Punto flotante */
CUDA_CALL(cudaMalloc((void * *)& devData, n * sizeof(float)));
/*Crear generador de generación de números pseudoaleatorios*/
CURAND_CALL(curandCreateGenerator(& gen,
CURAND_RNG_pseudo_default));
/*Establecer semilla* /
CURAND _ CALL(curandSetPseudoRandomGeneratorSeed(gen, p>
1234 ull));
/*Generar n puntos flotantes en el dispositivo*/
CURAND_CALL(curandGenerateUniform(gen,devData,n));
/*Copiar la memoria del dispositivo al host*/
CUDA_CALL(cudamemacpy(hostData, devData, n * sizeof(float)),
cudamemacpydevicetohost));
/*Mostrar resultados*/
for(I = 0;i<n ; i++) {
printf("%1.4f ", hostData[I]);
}
printf(" \ n ");
p>
/*Limpiar*/
CURAND _ CALL( curandDestroyGenerator(gen));
CUDA _ CALL(CUDA free(datos de desarrollo));
Gratis(hostData);
Devolver EXIT _ SUCCESS p>
}