2

该程序在 MPI 的上下文中使用。它是 fortran 的 MPI 实现。我在 module.like 中声明了一个数组

module var
 real,save ::arr(8)
end module

然后使用子程序init来初始化数组 arr。在主程序单元中,首先调用init初始化数组arr。然后调用另一个子程序,像algo做一些计算。在子程序开始时algo,arr的值是正确的。在计算过程中,arr的值发生了奇怪的变化在某些处理器上,虽然没有代码更改 arr 的值,而在其他处理器上该值是正确的。我检查了代码,我很确定在计算过程中没有代码会改变 arr 的值。顺便说一句,在模块 var 中声明的变量数量很多。

4

2 回答 2

0

感谢所有提供建议的人。错误是由于数组元素的访问超出边界。在我的程序中,有一行代码访问数组中的索引 0 元素,例如 arr(0)=...超出了 fortran 数组的范围。并且此代码导致模块中另一个变量的值被更改,这对我来说是非常意外的。arr(0)=..导致parm模块中定义的另一个变量的变化。

于 2013-08-28T02:24:54.077 回答
0

由于您使用的是 MPI,因此如果仅在一个处理器上进行初始化,则还必须将变量广播到所有处理器

于 2013-10-23T00:37:55.473 回答