混沌系统中的MPI并行性

时间:2011-04-29 15:35:05

标签: parallel-processing chaos

我有动态的Fortran程序(基本上是一个verlet算法)。为了更快地计算速度,我将算法与MPI并行化。令我紧张的是,如果我有四个处理器,每个处理器运行一个Verlet,当它们达到并行化点时,它们共享信息。但是,由于轻微的数值差异(例如,在每个节点上编译的LAPACK),每个Verlet轨迹在长期运行中可能会在完全不同的方向上发展,这意味着在共享点我将获得不同信息的混合轨迹。因此,我决定在每个时间步骤同步信息以防止分歧,但这显然会带来障碍。

这个问题(节点的分歧)通常如何解决?有没有参考?

1 个答案:

答案 0 :(得分:1)

好吧,你不应该在每个节点上有不同的LAPACK编译。如果您的数值库在模拟的不同部分发生变化,您应该期待奇怪的结果 - 这与并行性无关。所以不要这样做。

我见过MPI在这种情况下引入棘手的唯一实时是,像MPI_REDUCE(... MPI_SUM ...)这样的事情会导致不同运行中相同数量的节点上出现不同的答案,因为求和可以是不同的顺序。这只是标准的“浮点数学不通勤”的东西。您可以通过执行相关数字的MPI_GATHER()并以一些明确定义的顺序对它们进行求和来避免这种情况,例如在数量级别从最低到最高之后。