Ошибка компиляторов Intel Fortran при параллелизации
Обнаружил интересную ошибку компиляторов 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.
Будьте аккуратны.