Parallel processing 将子例程中的独立迭代分布到多台机器上

Parallel processing 将子例程中的独立迭代分布到多台机器上,parallel-processing,fortran,distributed-computing,Parallel Processing,Fortran,Distributed Computing,我有一个用Fortran编写的应用程序,有一个特殊的子程序调用需要很长时间才能执行。我想知道是否有可能将计算任务分配到多个节点上。 代码的当前串行流如下所示: D = Some computations that give me D and it is in memory subroutine call <within the subroutine> iteration from 1 .. n { independent operations on D } D=一些计算得

我有一个用Fortran编写的应用程序,有一个特殊的子程序调用需要很长时间才能执行。我想知道是否有可能将计算任务分配到多个节点上。 代码的当前串行流如下所示:

D = Some computations that give me D and it is in memory
subroutine call

<within the subroutine>

iteration from 1 .. n
{

  independent operations on D
}
D=一些计算得到D,并且它在内存中
子程序调用
从1.开始的迭代。。N
{
D上的独立操作
}

我希望将迭代分布在n/4台机器上。有人能给我介绍一下吗?如果有什么不太清楚,一定要告诉我

根据底层实现,协同阵列(F2008)可能允许处理分布在多个节点上。在图像之间划分迭代空间相对简单,将结果传回一个图像(或所有图像)可能会产生一些复杂性。可以找到一些关于coarray的介绍性材料


同样,根据底层实现,DO CONCURRENT(F2008)可能允许并行处理迭代(尽管不太可能跨节点)。在DO并发构造的范围内可以执行的操作存在限制,这意味着迭代可以以任何顺序执行,具有适当能力的编译器可以将其进一步转换为并发执行。

取决于底层实现,coarray(F2008)可能允许处理分布在多个节点上。在图像之间划分迭代空间相对简单,将结果传回一个图像(或所有图像)可能会产生一些复杂性。可以找到一些关于coarray的介绍性材料


同样,根据底层实现,DO CONCURRENT(F2008)可能允许并行处理迭代(尽管不太可能跨节点)。在DO并发构造的范围内,可以执行的操作存在限制,这意味着迭代可以以任何顺序执行,具有适当能力的编译器可以将其进一步转换为并发执行。

当一个人拥有现有代码并希望增量并行(或仅一个例程)时,共享内存方法是“快速成功”的方法。特别是当知道迭代是独立的时,我首先建议查看编译器标志以实现自动并行化,语言构造,例如
DO CONCURRENT
(感谢@IanH提醒我这一点),以及OpenMP编译器指令

不过,由于我的扩展评论是关于分布式内存的,所以我将谈到这一点

我假设您没有访问所有潜在机器上的某些高级进程生成设置的权限。也就是说,您将在不同的机器上运行进程,无论正在做什么工作,每个进程都会按时间计费。然后,工作流程如下所示

  • 串行外环
    • 计算
      D
    • D
      分发到并行环境
      • D
    • 在主机上收集
      D
如果并行环境中的处理器/进程不做任何其他事情,或者不管怎样都要向您收费,那么这对您来说与

  • 外环
    • 所有过程计算
      D
    • 每个进程都在其
      D
    • 同步
      D
这里的通信端,MPI或coarray(在本例中,我建议再次参阅@IanH的答案,其中图像同步等,仅限于几个带有
[…]
的循环)只是在同步中


作为尾注:多机协同阵列支持非常有限
ifort
据我所知,它需要基本许可证之外的许可证,
g95
有一些支持,Cray编译器可能很好。不过,这是另一个问题。MPI将得到很好的支持。

当一个人拥有现有代码并希望以增量方式(或仅一个例程)并行化时,共享内存方法是“快速成功”的方法。特别是当知道迭代是独立的时,我首先建议查看编译器标志以实现自动并行化,语言构造,例如
DO CONCURRENT
(感谢@IanH提醒我这一点),以及OpenMP编译器指令

不过,由于我的扩展评论是关于分布式内存的,所以我将谈到这一点

我假设您没有访问所有潜在机器上的某些高级进程生成设置的权限。也就是说,您将在不同的机器上运行进程,无论正在做什么工作,每个进程都会按时间计费。然后,工作流程如下所示

  • 串行外环
    • 计算
      D
    • D
      分发到并行环境
      • D
    • 在主机上收集
      D
如果并行环境中的处理器/进程不做任何其他事情,或者不管怎样都要向您收费,那么这对您来说与

  • 外环
    • 所有过程计算
      D
    • 每个进程都在其
      D
    • 同步
      D
这里的通信端,MPI或coarray(在本例中,我建议再次参阅@IanH的答案,其中图像同步等,仅限于几个带有
[…]
的循环)只是在同步中

作为尾注:多机协同阵列支持非常有限
ifort
据我所知,它需要基本许可证之外的许可证,
g95
有一些支持,Cray编译器可能很好。不过,这是另一个问题。MPI将得到很好的支持。

我将研究一下分布式