高性能Fortran(HPF)没有指令?

时间:2011-07-25 10:11:41

标签: fortran distributed-computing hpc

在高性能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程序?

1 个答案:

答案 0 :(得分:2)

我不相信DISTRIBUTE语句是必要的,我从来没用过它。

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

但是,根据处理器架构和编译器的不同,最好先尝试一下您所拥有的内容,然后了解哪些内容可以为您提供最佳结果或效率。