以下是Fortran'并发'循环有效吗?

时间:2017-02-21 20:56:45

标签: fortran gfortran fortran2008

我不认为以下do concurrent Fortran循环有效,因为acc在每次迭代中都被修改。但是,gfortran没有给我任何警告,acc的结果值在55时是正确的。它是否有效?

integer :: acc, i
acc = 0
do concurrent (i=1:10)
    acc = acc + i
end do

1 个答案:

答案 0 :(得分:3)

循环确实无效。在这种情况下,编译器不需要检测到这一点并报告原因。

在Fortran 2008 8.1.6.5('对DO CONCURRENT构造的限制')中,我们有一个限制:

  

迭代中引用的变量应在该迭代期间预先定义,或者在任何其他迭代期间不得定义或变为未定义。当循环终止时,由多个迭代定义或变为未定义的变量将变为未定义。

acc是一个变量,它被多次迭代(所有这些)定义(位于内部赋值语句的左侧)。因此循环是一个错误的循环(并且循环结构acc的末尾未定义,因此检查其值也是顽皮的。)