Vorrei generare numeri casuali nella mia funzione e conservarlo nel mio tab interno [500], ho trovato alcuni esempi, ma hanno utilizzato un tipo denominato curandState. Ho solo bisogno di una funzione come una rand()
in C++.Generazione casuale numero CUDA
risposta
ecco il mio codice, ho N3 [40000] array nella memoria del mio dispositivo, genero alcuni numeri casuali nel mio kernel che lavorano per un thread (intendo questo "kernel < < 1,1 >>> .. . "), allora copio nella mia N2 [40000] dalla CPU, e stamparlo, ecco il codice
#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;
}
Does 'setup_kernel <<< 1, N > >> (devstates, unsigned (time (NULL)));' funziona? Credo che avere 40000 thread in un blocco non sia possibile ... – Curious
È possibile utilizzare la libreria di rastrellamento per generare numeri casuali nella memoria del dispositivo e quindi eseguire il kernel senza dover copiare quei valori nell'host.
grazie, ma non so quale funzione e come utilizzare per il numero casuale da curand e la mia scheda [500] nella memoria del mio dispositivo. puoi scrivere il codice per la mia commissione? Sarò così grato –
Credo che questo sia lo scenario più basilare (anche se dovresti seminare la generazione - altrimenti otterrai sempre la stessa sequenza): cudaMalloc (& randoms_dev, sizeof (float) * WORK_SIZE); curandCreateGenerator (& generator, CURAND_RNG_PSEUDO_DEFAULT); curandGenerateUniform (generator, randoms_dev, WORK_SIZE); curandDestroyGenerator (generatore); – Eugene
grazie mille –
- 1. asp.net mvc C# generazione casuale stesso numero
- 2. Generazione casuale UUID casuale
- 3. Generazione di un numero casuale compreso tra più intervalli
- 4. Generazione di un numero casuale di 2^30
- 5. generazione casuale nella lista FSharp
- 6. minuscola generazione ID dall'aspetto casuale
- 7. Generazione di una stringa casuale
- 8. Numero primo casuale
- 9. numero casuale Javascript?
- 10. Numero casuale rapido
- 11. Generazione di un file binario casuale
- 12. Generazione casuale di numeri casuali in R
- 13. Generazione di un decimale casuale in C#
- 14. TensorFlow: generazione di una costante casuale
- 15. Selezionare un numero casuale un numero casuale di volte, ma mai lo stesso numero casuale due volte
- 16. Numero casuale nel 1991 Pascal
- 17. Numero casuale: 0 o 1
- 18. Numero casuale primo in python
- 19. Numero intero casuale con condizioni
- 20. elm genera un numero casuale
- 21. Numero casuale in un loop
- 22. Numero casuale tra due range
- 23. Numero casuale da un seme
- 24. Generazione di una schermata predefinita casuale su iOS
- 25. Generazione di un numero casuale compreso tra 0 e 9 in x86 8086 Assemblaggio
- 26. Generazione di un doppio numero casuale di un certo intervallo in Java
- 27. Generazione di un numero casuale da utilizzare come uguale nelle pagine successive
- 28. Generazione di codice parallelo Cuda in Visual Studio
- 29. Come generare un numero casuale in Swift senza ripetere il numero casuale precedente?
- 30. Genera un numero casuale con un numero casuale in Objective-C
il kernel di installazione non è mai in esecuzione perché si sta cercando di lanciarlo con un blocco contenente 40000 filettature. – talonmies
Perché hai cancellato il tuo codice? – talonmies