0
y(1:n-1) = a*y(2:n) + x(1:n-1)
y(n) = c

在上面的 Fortran 90 代码中,我想知道它是如何在同步、通信和算术方面执行的。

我的理解是:

沟通是需要不同的任务来相互沟通。例如,如果有一些变量与其他变量有依赖关系。但是上面的代码并没有表明有一些通信。因为它似乎没有依赖关系,对吗?

同步在某种程度上与通信有关,但它也涉及是否使用了一些障碍。但是在上面的代码中没有障碍。因此,唯一涉及的同步是是否存在任何数据依赖关系。

算术我对这一点一无所知,如果有人可以向我解释,我会很高兴。

4

2 回答 2

2

Fortran 中的规则相当简单:在将结果分配给左侧之前,对右侧进行完全评估。因此,您可以声称在分配(将结果发送给 y)时存在通信,这同时是一个同步点。右侧的实际评估可以由编译器矢量化/并行化,从而导致数组中所有条目的评估顺序任意,除了最后一个,它仅在第一次赋值之后设置。但是,除了流水线之外,普通编译器在这里没有引入真正的并行性。

于 2011-08-21T01:12:14.167 回答
0

无需过多地停留在给定的代码段上,您可能会感兴趣(如果我错了,请告诉我),例如,使用 OpenMP书(此处的演示文稿)。这是对并行计算(内存共享)世界的一个很好的温和介绍。对于较大的系统,您最好在谷歌上搜索“MPI”及其相关主题。关于这个问题确实有很多材料(其中很多都处理 fortran+mpi / fortran+openmp),所以我将跳过这里给出示例。

这是你的目标吗?

于 2011-08-08T11:24:39.690 回答