Domanda

sto cercando di costruire un sistema di particelle che utilizza CUDA per fare il sollevamento di carichi pesanti. Voglio ripartire le probabilità alcuni dei valori iniziali delle particelle come la velocità e la durata della vita. I numeri casuali non devono essere super casuale dal momento che è solo per effetto visivo. Ho trovato questo post che affronta lo stesso argomento:

generazione di numeri casuali in CUDA

Questo suggerisce un congruenziale lineare è la strada da percorrere. Sembra come dovrebbe essere semplice da implementare, ma sto avendo difficoltà a raggiungere qualcosa di utile della mia esecuzione. Qualcuno può fornire un codice che verrà eseguito nel dispositivo?

Sto usando CUDA con VC ++ su Windows 7 a 64 bit.

È stato utile?

Soluzione

generatori CUDA pseudo numeri casuali sono

  1. incluso nel SDK NVidia esempio C/src/MersenneTwister/ e C/src/quasirandomGenerator

  2. disponibile come carte e fonte separati:

    carta di Langdon e codice sorgente di Langdon

    Mersenne Twister sulla GPU

Altri suggerimenti

A seconda delle esigenze ci sono una serie di opzioni open source. Ci sono anche diverse opzioni commerciali come NAG che hanno implementato MRG32k3a del l'Ecuyer. Diffidare di utilizzare un LCG se è necessario per garantire che i flussi non sono correlati - è possibile utilizzare cavallina / scissione, ma avrete bisogno di un periodo molto lungo

Se si vuole andare open source allora si dovrebbe assolutamente considerare l'utilizzo di spinta per la sua semplicità. Ci sono anche alcuni RNG nel NVIDIA SDK, tra cui il campione di Mersenne Twister PRNG (MT607, MT19937 è sui forum) e la Sobol e Niederreiter QRNGs.

Infine, CUDPP ha anche un generatore di numeri casuali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top