3

我正在尝试使用 OpenMP 在 Fortran90 中并行化一个大程序。

我一直收到分段错误错误。我想知道是否有任何简单的方法可以修复它们。如果出现分段错误错误怎么办?

4

2 回答 2

7

首先将您的代码回滚到其原始的、无与伦比的版本。你确实有这个版本控制,不是吗?

非常仔细地检查您的串行程序不会导致任何分段错误。请特别注意英特尔在本文档中提出的问题。即使您不使用英特尔 Fortran 编译器,也请阅读本文。采取它建议的纠正措施。

现在,并行化您的第一个构造。如果可以的话,选择一个简单的、非嵌套的循环。重新测试你的程序。想想你做了什么,并确保你明白发生了什么。选择另一个简单的构造进行并行化。完成简单的任务后,继续进行更复杂的任务,边做边做测试,边做边学。

因此,要回答您的问题:解决此类故障的最佳方法是一开始就不要制造它们。您报告说您一直遇到分段错误,这向我表明您在走路之前尝试过跑步。

并回答另一个问题:不,没有简单的方法可以解决它们。

于 2013-02-04T15:56:00.687 回答
3

正如 HPM 建议的那样,只有在使用 OpenMP 编译时,还是在没有 OpenMP 的情况下才会出现分段错误?

我建议使用编译器提供的所有调试选项进行编译。您的编译器可能能够识别出一些问题并将它们作为 Fortran 问题而不是内存访问问题报告给您。例如,运行时下标检查将识别可能导致分段错误的非法下标。其他编译器选项可以强制执行良好的编码实践,从而降低错误的可能性。你用的是什么编译器?

于 2013-02-04T18:07:06.887 回答