我很少使用 fortran,但是我的任务是让遗留代码重写它以并行运行。我正在使用 gfortran 作为我的编译器选择。我在https://computing.llnl.gov/tutorials/openMP/以及其他 一些资源中找到了一些优秀的资源。
我的问题是,在我添加任何 OpenMP 指令之前,如果我只是编译遗留程序:
gfortran Example1.F90 -o Example1
一切正常,但即使不添加指令也要打开 openmp 编译器选项:
gfortran -openmp Example1.F90 -o Example1
当我运行旧程序时,会出现分段错误。使用我编写的较小的测试程序,我已经成功地编译了其他在多个线程上运行的带有 -openmp 的程序,但是我很困惑为什么单独启用该选项并且没有指令会导致段错误。
如果我的问题相当简单,我深表歉意。我可以发布代码,但它相当长。当我分配初始值时它会出错:
REAL, DIMENSION(da,da) :: uconsold
REAL, DIMENSION(da,da,dr,dk) :: uconsolde
...
uconsold=0.0
uconsolde=0.0
对“uconsold”的第一个分配工作正常,第二个似乎是错误的根源,因为当我注释掉该行时,接下来的几行会愉快地执行,直到再次使用“uconsolde”。
感谢您在这件事上提供的任何帮助。