Почему 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
forall(j = i**2:sn:i, nums(j)) nums(j) = .FALSE.
илиdo concurrent
. Это должно быть немного быстрее, так как после каждого шага внешнего цикла нужно пройти меньший набор индексов. - person sigma   schedule 18.12.2012nums(i**2:sn:i) = .FALSE.
. - person sigma   schedule 19.12.2012