Pergunta

Eu estou tentando construir um sistema de partículas utilizando CUDA para fazer o trabalho pesado. Eu quero embaralhar alguns dos valores iniciais das partículas, como velocidade e tempo de vida. Os números aleatórios não tem que ser super aleatória, já que é apenas para efeito visual. Eu encontrei este post que aborda o mesmo assunto:

geração de números aleatórios em CUDA

Isso sugere uma congruência linear é o caminho a percorrer. Parece que ele deve ser simples de implementar, mas estou tendo problemas para fazer qualquer coisa útil da minha aplicação. Alguém pode fornecer um código que será executado no dispositivo?

Eu estou usando CUDA com VC ++ no Windows 7 de 64 bits.

Foi útil?

Solução

CUDA pseudo geradores de números aleatórios são

  1. incluído no NVidia SDK por exemplo C/src/MersenneTwister/ e C/src/quasirandomGenerator

  2. disponível como papéis e fonte distintas:

    papel de Langdon e código fonte de Langdon

    Mersenne Twister na GPU

Outras dicas

Dependendo de suas necessidades, há uma série de opções de código aberto. Há também várias opções comerciais, como NAG que implementaram l'MRG32k3a de Ecuyer. Desconfie de usar um LCG se você precisa garantir que seus fluxos não são correlacionados - você pode usar saltar / divisão, mas você vai precisar de um período muito longo

Se você quiser ir de código aberto, em seguida, você deve definitivamente considerar o uso impulso para ele é simplicidade. Existem também alguns RNG no SDK NVIDIA, incluindo a amostra de Mersenne Twister PRNG (MT607, MT19937 é nos fóruns) eo Sobol e Niederreiter QRNGs.

Finalmente, CUDPP também tem um gerador de números aleatórios.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top