我正在寻找一种简单的方法来为并行的多个线程生成介于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是否有随机数库。 我只需要向正确的方向推进,然后我可以自己写一个像样的随机数生成器。
感谢您的帮助
答案 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