Parallel processing 混沌系统的MPI并行性

Parallel processing 混沌系统的MPI并行性,parallel-processing,chaos,Parallel Processing,Chaos,我有一个Fortran动态程序(基本上是verlet算法)。为了更快地计算速度,我将该算法与MPI并行。让我紧张的是,如果我有四个处理器,每个处理器运行一个Verlet,当它们达到并行化点时,它们共享信息。然而,由于微小的数值差异(例如,在每个节点上编译的LAPACK中),从长远来看,每个Verlet轨迹可能朝着完全不同的方向发展,这意味着在共享点,我将从不同的轨迹获得信息的混合。因此,我决定在每个时间步同步信息,以防止出现分歧,但这显然带来了障碍 这个问题(节点发散)通常是如何解决的?有参考资

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


这个问题(节点发散)通常是如何解决的?有参考资料吗?

嗯,每个节点上不应该有不同的LAPACK编译。如果您的数值库在模拟的不同部分发生变化,您应该会看到奇怪的结果——而这与并行性无关。所以不要那样做


我所见过的MPI在这种情况下引入的唯一实时技巧是,在不同的运行中,在相同数量的节点上执行类似MPI_REDUCE(…MPI_SUM…)的操作可能会得到不同的答案,因为求和的顺序可能不同。这只是标准的“浮点数学不能通勤”的东西。您可以通过对相关数字进行MPI_GATHER()运算,并按照定义明确的顺序进行求和(例如,从最小到最大排序)来避免这种情况

您不能确保LAPACK的每个副本都被完全相同地编译,并且处理器具有相同的体系结构,从而为任何给定的(浮点)计算集产生完全相同的结果?虽然我猜所有遵循浮点运算标准的处理器应该返回完全相同的结果…@JAB好吧,我们静态编译自己的LAPACK版本,但我们也可以使用其他用户提供的库,我们可以使用动态链接。对于浮点运算,以及长时间的传播,比如在Verlet中,浮点运算结果的细微差异可能会导致长期的差异,我们对此无能为力“哦,我们在不同的节点上使用了不同的编译和版本的关键数字库”,我会在那时停止阅读论文,转而更有效地利用我的时间。你是否考虑过使用一些高精度定点格式来确保可预测的十进制行为?