Я оцениваю производительность кода Fortran 90. Запуская код через программу Intel Advisor, я вижу, что циклы со следующим стилем не векторизуются. Пример структуры цикла показан в файлах подпрограмм и модулей, описанных ниже.
Код компилируется с помощью компилятора Intel 19.0.3
-O3 оптимизация включена
Subroutine SampleProblem
Use GlobalVariables
Implicit None
Integer :: ND, K, LP, L
Real :: AVTMP
! Sample of loop structure that is no vectorized
DO ND=1,NDM
DO K=1,KS
DO LP=1,LLWET(K,ND)
L = LKWET(LP,K,ND)
AVTMP = AVMX*HPI(L)
ENDDO
ENDDO
ENDDO
End Subroutine SampleProblem
LLWET и LKWET - это размещаемые массивы, объявленные в модуле 'GlobalVariables'. Что-то вроде:
Module GlobalVariables
Implicit None
! Variable declarations
REAL :: AVMX
INTEGER :: NDM
REAL,ALLOCATABLE,DIMENSION(:) :: HPI
INTEGER,ALLOCATABLE,DIMENSION(:,:) :: LLWET
INTEGER,ALLOCATABLE,DIMENSION(:,:,:) :: LKWET
End Module GlobalVariables
Я не понимаю, почему этот цикл не будет векторизован компилятором. В коде много циклов, подобных его, и ни один из них не векторизован, согласно отчетам Intel Advisor. Я пытался заставить vecotoriztion с помощью блока! $ SIMD вокруг цикла.