Ошибка компиляторов Intel Fortran при параллелизации

455120f364e7590c72a9a36376ea8fe0

Обнаружил интересную ошибку компиляторов Intel Fortran 2023 года.

Исходный код:

program err

  implicit none

  integer :: s
  integer :: step, i

  step = 32

  do
    s = 0
    do concurrent (i=301:724:step)
      s = s + i
    end do
    print *, s
  end do

end program err

Такой параллельный цикл do concurrent, будучи скомпилирован в smp режиме (т.е. с ключом -fopenmp) даёт в компиляторе ifort случайные результаты, а в компиляторе ifx — нули.

В режиме последовательного выполнения программы всё работает правильно.

Для воспроизведения ошибки необходимы и достаточны следующие условия: Intel, do concurrent с шагом, заданным переменной, -fopenmp.

gfortran такой ошибкой не страдает, но он, впрочем, и не параллелит циклы do concurrent.

Будьте аккуратны.

© Habrahabr.ru