该程序在MPI的上下文中使用。它是fortran的MPI实现。 我在module.like
中声明了一个数组module var
real,save ::arr(8)
end module
然后使用像init
这样的子程序初始化数组arr。
在主程序单元中,首先调用init
来初始化数组arr.And然后调用另一个
子程序如algo
进行一些计算。在子程序algo
的开头,arr的值是正确的。在计算过程中,虽然没有代码,但arr的值在某些处理器上发生了奇怪的变化。在其他处理器上更改arr的值时,该值是正确的。
我检查代码,我很确定在计算过程中没有代码更改arr的值。
顺便说一句,在模块var中声明的变量数量很多。
答案 0 :(得分:0)
感谢所有提出建议的人。错误是由于数组元素的访问
在我的程序中,有一行代码访问数组中的索引0元素
超出fortran数组范围的arr(0)=...
。此代码导致模块中另一个变量的值被更改,这对我来说是非常意外的。arr(0)=..
导致另一个变量的更改,如模块中定义了parm
。
答案 1 :(得分:0)
由于您正在使用MPI,如果仅在一个处理器上进行初始化,您还必须将变量广播到所有处理器