ifort没有并行化代码

时间:2012-12-17 02:14:25

标签: parallel-processing fortran intel-fortran

为什么ifort没有并行化这段代码? 它一直说“循环没有并行化:存在并行依赖”。我无法理解依赖性在哪里。 gfortran将生成并行代码,但速度不是很高。

PROGRAM erat
IMPLICIT NONE

INTEGER*8 :: i, rm, sn=1000000000
LOGICAL*1 , ALLOCATABLE, DIMENSION(:) :: nums

rm = INT( DBLE(sn)**0.5) + 1

ALLOCATE(nums(sn))
nums = .TRUE.                       !This line not parallelized

PRINT *, 'Doing initial sieve...'
nums(1) = .FALSE.
DO i = 2,rm
    nums(i**2:sn:i) = .FALSE.       !This line not parallelized
END DO
END PROGRAM erat

1 个答案:

答案 0 :(得分:3)

根据DO声明报告该诊断。作为一个具体的例子:

  • 当i为2时,循环将num(8)设置为false。

  • 当我是4时,循环也将num(8)设置为false。

这是循环写入同一内​​存位置的两个不同迭代。

(相关的英特尔论坛是一个更好的地方,可以提出可能涉及其编译器行为细节的问题。)