如何在 Fortran 中调试 OpenMP 算法

问题描述 投票:0回答:0

我正在测试这个算法(Gridpoint Statistical Interpolation,已终止支持)并一直在关注其在线教程,特别是案例 9。作为该算法的一种总结,它基本上尝试估计一个函数具有一组观测值的最小误差,情况 9 需要大约两次迭代才能使函数收敛到观测值(这在某种程度上类似于机器学习中估计最佳拟合线)。

不幸的是,情况 9 总是会导致分段错误。我通常使用四个进程运行该算法,并且分段错误在第二次迭代结束后立即发生。但是,当我尝试使用超过甚至少于四个进程时,第一次迭代后就会出现分段错误。

我已经检查了分段错误发生的位置,根据错误消息,它发生在 if 子句中(可以在 mpeu_util.F90 中找到)

do i=1,size(varnames)
 if(trim(usrname)==trim(varnames(i))) then
    getindex_=i
    exit
 endif
enddo

我怀疑该算法以某种方式尝试提取

varnames
允许范围之外的值,并尝试使用简单的打印对其进行调试,但似乎没有任何问题。是否有可能线程被释放并且算法尝试从该线程读取,从而导致分段错误?我怎样才能检查这个?

编辑:该算法适用于在线教程中的其他情况。

fortran mpi openmp
© www.soinside.com 2019 - 2024. All rights reserved.