FORALL导致堆栈溢出

时间:2015-01-13 18:18:13

标签: fortran

我正在实施遗传算法,以基于实验数据对ODE系统中的一些系数进行数值估计。我正在学习Fortran,因为我实现了算法。我的配置是在旧的i7处理器上运行在Windows 7 / Visual Studio 2013上的英特尔Fortran 2015。

我在众多代码行中有以下内容:

DO i = 1, N_CROMOSOMES
    IF (population(9,i) < 0.0_DOUBLE) population(9, i) = square_error(population(1:8, i))
END DO

我刚刚定义DOUBLE为:

INTEGER, PARAMETER :: DOUBLE = 16

N_CROMOSOMES是函数的INTEGER参数,它定义了数组的大小,而数组又是REAL(KIND = DOUBLE)类型的(9 x N_CROMOSOMES)数组。对于该阵列上的每一列,其前8个元素表示我估计的8个系数,第9个元素是与系数的特定8个猜测相关的误差。 square_error是决定它的函数。

在程序的这一点上,我标记了刚创建的列或者被更改为错误为-1的列。因此,“IF(population(9,i)&lt; 0.0_DOUBLE)”:我正在检查错误为-1的数组的列,以便计算它们的错误。

问题是,我只是重写了我的大部分代码,并在过去几天里纠正了神秘的错误。在此之前,代码使用FORALL而不是DO工作得很好。现在它说当我使用FORALL时出现错误“堆栈溢出”,但是与DO一起使用。但是它需要花费更多的时间来完成它的工作。

有谁知道这个的原因,以及如何解决它?我很清楚,我的代码可以从并行化中获益,但我不太清楚如何去做。

感谢您的时间。

0 个答案:

没有答案