2011-02-04 43 views
2

我正在尋找一種簡單的方法來爲多個線程並行地生成0.0到1.0之間的隨機浮點數。這是我的內核至今..如何在CUDA FORTRAN中生成隨機數字?

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是否有任何隨機數字庫。 我只需要一個正確的方向,然後我可以寫一個體面的隨機數發生器。

感謝您的幫助

回答

3

我發現一篇文章,解釋如何調用一個CUDA C從CUDA Fortran代碼實現的僞隨機數生成器(從CUDA SDK梅森倍捻機實現)。

詳情可參見「調用CUDA C隨機數發生器」這篇文章中找到:
http://www.pgroup.com/lit/articles/insider/v2n1a4.htm

+0

您可以使用相同的技術來連接CURAND。 – Tom 2011-02-05 18:04:13

1

你在FORTRAN生成隨機數,並將其傳送到設備。

call random_number(pkf) 

pkf_dev=pkf