y(1:n-1) = a*y(2:n) + x(1:n-1)
y(n) = c
在上面的Fortran 90代码中,我想知道它是如何在同步,通信和算术方面执行的。
我的理解是:
沟通是需要不同的任务来相互沟通。例如。如果有一些变量与其他变量有依赖关系。但上面的代码并没有表明存在一些沟通。因为它似乎没有依赖性,我是对的吗?
同步在某种程度上与沟通有关,但如果存在一些障碍,也会涉及到。但在上面的代码中没有障碍。因此,唯一涉及的同步是否存在任何数据依赖性。
算术我对这一点毫无头绪,如果有人能向我解释,我会很高兴。
答案 0 :(得分:2)
Fortran中的规则非常简单:在将结果分配给左侧之前,完整地评估右侧。 因此,您可以声明在分配(将结果发送到y)时进行通信,这同时是同步点。 右侧的实际评估可以由编译器进行矢量化/并行化,从而导致数组中所有条目的评估的任意顺序,除了最后一个,仅在第一次分配之后设置。 但是,除了流水线操作之外,普通编译器并没有引入真正的并行性。
答案 1 :(得分:0)
在给定的片段中没有停止太多,看起来你可能感兴趣(告诉我,如果我错了),例如,Using OpenMP book(演示文稿here)。这是对并行计算(内存共享)世界的一个很好的温和介绍。对于较大的系统,你最好谷歌“MPI”及其相关主题。关于此事的确有很多材料(其中很多涉及fortran + mpi / fortran + openmp)所以我将跳过这里的例子。
这是你的目标吗?