使用OpenMP初始化具有唯一随机整数的数组

时间:2019-06-10 16:40:51

标签: algorithm random parallel-processing fortran openmp

我需要生成一个随机的索引数组,即从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是不可能的,因为我们使用的是数组的先前值,不必在需要时分配它们。

如果没有办法做到这一点,那么是否还有其他并行算法在做同样的事情,即生成某个范围内唯一整数的随机数组?

0 个答案:

没有答案