Me gustaría generar números aleatorios en mi función __device__
, y mantenerlo en mi Junta int [500], encontré algunos ejemplos, pero utilizaron algún tipo llamado curandState. Solo necesito una función como rand()
en C++.Número aleatorio CUDA que genera
Respuesta
aquí es mi código, tengo N3 [40000] matriz en memoria en el dispositivo, genero algunos números aleatorios en mi núcleo que trabaja para un hilo (me refiero a esto "kernel < < < 1,1 >>> .. . "), entonces lo copio a mi N2 [40000] a partir de la CPU, e imprimirlo, por lo que aquí está el código
#include <iostream>
#include <Cuda.h>
#include<curand.h>
#include<curand_kernel.h>
int n = 200;
using namespace std;
__device__ float generate(curandState* globalState, int ind)
{
//int ind = threadIdx.x;
curandState localState = globalState[ind];
float RANDOM = curand_uniform(&localState);
globalState[ind] = localState;
return RANDOM;
}
__global__ void setup_kernel (curandState * state, unsigned long seed)
{
int id = threadIdx.x;
curand_init (seed, id, 0, &state[id]);
}
__global__ void kernel(float* N, curandState* globalState, int n)
{
// generate random numbers
for(int i=0;i<40000;i++)
{
int k = generate(globalState, i) * 100000;
while(k > n*n-1)
{
k-=(n*n-1);
}
N[i] = k;
}
}
int main()
{
int N=40000;
curandState* devStates;
cudaMalloc (&devStates, N*sizeof(curandState));
// setup seeds
setup_kernel <<< 1, N >>> (devStates,unsigned(time(NULL)));
float N2[40000];
float* N3;
cudaMalloc((void**) &N3, sizeof(float)*N);
kernel<<<1,1>>> (N3, devStates, n);
cudaMemcpy(N2, N3, sizeof(float)*N, cudaMemcpyDeviceToHost);
for(int i=0;i<N;i++)
{
cout<<N2[i]<<endl;
}
return 0;
}
¿'setup_kernel <<< 1, N > >> (devStates, unsigned (time (NULL)));' funciona? Creo que tener 40000 hilos en un bloque no es posible ... – Curious
Puede usar la biblioteca curand para generar números aleatorios en la memoria del dispositivo y luego ejecutar su kernel sin siquiera tener que copiar esos valores al host.
gracias, pero no sé qué función y cómo usar para el número aleatorio de curand, y mi placa [500] en la memoria de mi dispositivo. ¿Puedes escribir el código de mi Junta? Estaré tan agradecido –
Creo que este es el escenario más básico (aunque también tendría que sembrar la generación, de lo contrario obtendrá la misma secuencia cada vez): cudaMalloc (& randoms_dev, sizeof (float) * WORK_SIZE); curandCreateGenerator (y generador, CURAND_RNG_PSEUDO_DEFAULT); curandGenerateUniform (generador, randoms_dev, WORK_SIZE); curandDestroyGenerator (generador); – Eugene
muchas gracias –
- 1. ¿Cómo se genera un número aleatorio en tiempo de ejecución?
- 2. ¿Cómo se genera un número aleatorio en C#?
- 3. Número aleatorio en iphone sdk?
- 4. genera un número aleatorio entre 1 yx donde es más probable un número menor que uno más alto
- 5. Número aleatorio no repetitivo
- 6. Genera un gran gráfico plano aleatorio
- 7. ¿Generar un número aleatorio dentro del rango?
- 8. ¿Cada máquina genera el mismo resultado de número aleatorio usando la misma semilla?
- 9. Java Generar número aleatorio {-1,0,1}
- 10. jQuery Número aleatorio no funciona
- 11. Generando un número aleatorio excluyendo el rango
- 12. Número aleatorio en un bucle
- 13. RNGCryptoServiceProvider - Revisión de número aleatorio
- 14. Número aleatorio: 0 o 1
- 15. Generar número aleatorio entre dos números con una rara número
- 16. Aleatorio.Siguiente no está dando un número aleatorio
- 17. PHP: Número aleatorio de una distribución normal
- 18. Obteniendo el número aleatorio divisible por 16
- 19. Algoritmo para generar un número aleatorio
- 20. Generar un número aleatorio de N-dígitos
- 21. cambiar probabilidad de obtener un número aleatorio
- 22. usando rand para generar un número aleatorio
- 23. ¿Cómo obtener un número aleatorio en pascal?
- 24. ¿Cómo restablecer un motor de número aleatorio?
- 25. ¿Cree un número aleatorio entre -100 y 100 en JavaScript?
- 26. generar un número aleatorio con 7 dígitos
- 27. llenando una matriz con número aleatorio
- 28. Número aleatorio no repetitivo en numpy
- 29. ¿Cómo generar un número aleatorio en Bash?
- 30. Devolver número aleatorio pero no 2
núcleo configurar no está en funcionamiento, ya que están tratando de lanzarlo con un bloque que contiene 40000 trapos. – talonmies
¿Por qué eliminaste tu código? – talonmies