如何在CUDA FORTRAN中生成随机数?

时间:2011-02-04 12:18:46

标签: random cuda fortran

我正在寻找一种简单的方法来为并行的多个线程生成介于0.0和1.0之间的随机浮点数。到目前为止,这是我的内核..

  attributes(global) subroutine rand_kernel()
     implicit none

     integer :: tid
     real :: r

     ! Thread ID
     tid = threadIdx%x

     ! Generate random number
     call <some random number generator> (r)

     ! Randomise array
     d_array(tid) = r

   end subroutine rand_kernel

我一直在论坛上阅读和阅读CURAND手册,但我仍然无法弄清楚该怎么做。我甚至不确定CUDA FORTRAN是否有随机数库。 我只需要向正确的方向推进,然后我可以自己写一个像样的随机数生成器。

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

我发现了一篇文章,解释了如何从CUDA Fortran代码中调用CUDA C实现的伪随机数生成器(来自CUDA SDK的Mersenne Twister实现)。

详细信息可以在本文的“调用CUDA C随机数生成器”部分找到:
http://www.pgroup.com/lit/articles/insider/v2n1a4.htm

答案 1 :(得分:1)

您必须在FORTRAN中生成随机数并将其传输到设备。

call random_number(pkf)

pkf_dev=pkf