问题描述
gfortran page on random_seed 表示使用 OMP 线程时,每个线程将其种子增加 2^128。我想知道如何手动将种子增加 2^128。我写了一个小测试程序,将主种子设置为 0,然后查看种子是什么,但我不明白我看到的是什么。我想知道的是例如我在子程序 increment_by_2_tothe_128
program main
implicit none
character(len=32) :: arg
integer :: n
integer :: i
integer :: nthreads
integer,allocatable :: seed(:,:)
integer,allocatable :: master_seed(:)
real,allocatable :: rn(:)
call get_command_argument(1,arg)
read(arg,*) nthreads
call random_seed(size=n)
allocate(seed(n,nthreads))
allocate(master_seed(n))
allocate(rn(nthreads))
master_seed = 0
seed = 0
call random_seed(put=master_seed)
! call increment_by_2_tothe_128(n)
call omp_set_num_threads(nthreads)
!$OMP PARALLEL DO
do i=1,nthreads
call random_number(rn(i))
call random_seed(get=seed(:,i))
end do
do i=1,nthreads
print *,i
print *,rn(i)
print *,seed(:,i)
end do
end program main
subroutine increment_by_2_tothe_128(n)
implicit none
integer,intent(in) :: n
integer :: current_seed(n)
integer :: increment_seed(n)
call random_seed(get=current_seed)
! what goes here:
! incrememt_seed = current_seed + 2**128
call random_seed(put=increment_seed)
end subroutine increment_by_2_tothe_128
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)