2

在高性能 Fortran (HPF) 中,我可以使用DISTRIBUTE指令指定并行计算中涉及的数组的分布。例如,以下最小子例程将并行对两个数组求和:

subroutine mysum(x,y,z)
  integer, intent(in)  :: y(10000), z(10000)
  integer, intent(out) :: x(10000), 
  !HPF$ DISTRIBUTE x(BLOCK), y(BLOCK), z(BLOCK)
  x = y + z
end subroutine mysum

我的问题是,该DISTRIBUTE指令是否必要?我知道在实践中这没什么兴趣,但我很好奇一个朴素的、无指令的 Fortran 程序是否也可以是一个有效的 HPF 程序?

4

1 回答 1

2

我不认为 DISTRIBUTE 语句是必要的,而且我从未使用过它。

您可以通过在适用的情况下使用 FORALL 语句而不是 DO 循环来隐式实现这一点。最初,DO 循环会给出对数组元素的明确操作顺序,而 FORALL 将允许处理器在运行时确定最佳顺序。我不认为这在今天有太大的不同,因为现代编译器能够在可能的情况下优化/矢量化/并行化 DO 循环。我无法确定其他编译器,但我记得使用英特尔 Fortran 编译器在不使用 DISTRIBUTE 的情况下在 2 个和 4 个处理器上并行编译和运行程序。

但是,根据处理器架构和编译器,最好尝试一下你拥有的东西,看看什么能给你带来最佳的结果或效率。

于 2011-07-25T14:24:36.297 回答