gfortran 如何将 random_seed 增加 2^128

问题描述

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 (将#修改为@)