我尝试使用OpenMP在Fortran90中并行化一个大程序。
我一直都会遇到分段错误错误。我想知道是否有任何简单的方法来解决它们。如果您有分段错误错误,该怎么办?
答案 0 :(得分:7)
首先将代码恢复到原始的,未平行的版本。你有这个版本控制吗?不是吗?
仔细检查您的串行程序不会导致任何分段错误。特别注意this document from Intel中提出的问题。即使您没有使用英特尔Fortran编译器,也请阅读此内容。采取它建议的纠正措施。
现在,并行化您的第一个构造。如果可以的话,选择一个简单的,非嵌套的循环。重新测试你的程序。想想你做了什么,并确保你了解发生了什么。选择另一个简单的构造来并行化。当你完成了简单的工作后,继续学习更复杂的工作,随时进行测试,随时学习。
所以,回答你的问题:解决这些问题的最好办法就是不要把它们放在第一位。您报告说您一直都会出现分段错误,这表明您在行走之前已尝试过运行。
回答另一个问题:不,没有简单的方法来解决它们。
答案 1 :(得分:3)
正如HPM建议的那样,只有在使用OpenMP进行编译或没有OpenMP时才会出现分段错误吗?
我建议使用编译器提供的所有调试选项进行编译。您的编译器可能能够识别某些问题并将其作为Fortran问题报告给您,而不是作为内存访问问题。例如,运行时下标检查将识别可能导致分段错误的非法下标。其他编译器选项可以强制执行良好的编码实践,从而降低错误。你使用什么编译器?