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

问题描述 投票:2回答:1

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

fortran distributed-computing hpc hpf
1个回答
2
投票

我不认为有必要使用DISTRIBUTE语句,并且我从未使用过它。

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

但是,最好根据处理器的体系结构和编译器,尝试一下所拥有的,然后看看能为您带来最佳结果或效率。

© www.soinside.com 2019 - 2024. All rights reserved.