我需要生成一个随机的索引数组,即从1开始的唯一整数。
到目前为止,我在Fortran中有以下顺序代码:
subroutine rperm3(N, p)
integer, intent(in) :: N
integer, dimension(:), intent(out) :: p
integer :: j, k, l
real :: u
call random_seed()
p = 0
do j=1,N
call random_number(u)
k = floor(j*u) + 1
p(j) = p(k)
p(k) = j
call sleep(2)
end do
end subroutine rperm3
每次迭代都会生成一个随机索引,该索引中的值将分配给当前索引的位置,而旧值将被当前索引本身重写。
但是有什么方法可以将其与OpenMP并行化吗?我看到,仅使用!$omp parallel for
是不可能的,因为我们使用的是数组的先前值,不必在需要时分配它们。
如果没有办法做到这一点,那么是否还有其他并行算法在做同样的事情,即生成某个范围内唯一整数的随机数组?