Fortran 数组在 OpenMP 中平行的相同形状和大小

fortran arrays same shape and size parallel in OpenMP

我想问问 openMP 是否能够使用 simple 符号并行化具有相同形状和大小的 fortran 数组。我做了一些研究,但我无法找到或弄清楚它是否可行。

我将以下形式称为简单表示法:

a = b + c * 1.1

在下面找到一个完整的例子:

PROGRAM Parallel_Hello_World

USE OMP_LIB

implicit none

integer, parameter :: ILEN = 1000
integer :: a(ILEN,ILEN), b(ILEN,ILEN), c(ILEN,ILEN), d(ILEN,ILEN)
integer :: i, j

a = 1
b = 2

!$OMP PARALLEL SHARED(a, b, c, d)

    !$OMP DO
    DO i=1,ILEN
      DO j=1, ILEN
        c(j,i) = a(j,i) + b(j,i) * 1.1
      ENDDO
    END DO
    !$OMP END DO

    # is this loop parallel?
    d = a + b * 1.1

!$OMP END PARALLEL
write (*,*) "Total C: ", c(1:5, 1)
write (*,*) "Total D: ", d(1:5, 1)
write (*,*) "C same D? ", all(c == d)

END

d 循环是否与具有当前符号的 openMP 并行化?

正如 评论的那样,问题的答案是用 workshare 子句将其包装起来:

  !$OMP WORKSHARE
  d = a + b * 1.1
  !$OMP END WORKSHARE

查找更多信息here