Я проделал большую работу с интерпретируемыми на основе массивов языками, но я смотрю на Fortran. То, что только что произошло со мной после написания моего первого бита кода, - это вопрос о том, будет ли gfortran оптимизировать выражение с использованием синтаксиса массива, поместив выражение в один цикл. В большинстве интерпретаторов на основе массивов выражение, такое как A = B/n * 2 * pi (где B - массив), потребует 5 циклов и временных рядов массивов для оценки. Является ли gfortran достаточно умным, чтобы оптимизировать это, и будет ли мой код ниже (строка, которая вычисляет массив от 0 до 2pi), так же эффективна, как явный цикл do вокруг выражения? Есть ли что-нибудь, что я должен учитывать при использовании синтаксиса массива, если меня беспокоит производительность?Преобразовывает ли fortran 90 (gfortran) синтаксис массива?
PROGRAM Sine
IMPLICIT NONE
REAL, PARAMETER :: PI = 3.415926535
INTEGER, PARAMETER :: z = 500
INTEGER :: ier
INTEGER, EXTERNAL :: PGBEG
REAL, DIMENSION(z) :: x,y
x=(indgen(z)-1.0)/z*(2*pi) ! This line...``
y=sin(x)
CALL plot(y,x)
CONTAINS
FUNCTION indgen(n) result(i)
INTEGER :: n
INTEGER, DIMENSION(n) :: i
INTEGER :: l
DO l=1,n
i(l)=l
END DO
END FUNCTION indgen
SUBROUTINE plot(y,x)
REAL, DIMENSION(:) :: x,y
ier=PGBEG(0,'/XWINDOW',1,1)
CALL PGENV(0.0,7.0,-1.0,1.0,0,1)
CALL PGLINE(SIZE(x),x,y)
CALL PGEND()
END SUBROUTINE plot
END PROGRAM Sine
Спасибо, но это не ответ на мой вопрос. Я не прошу, если компилятор лучше обрабатывает циклы, чем интерпретатор, я пытаюсь выяснить, включает ли это выражение в один цикл, а не выполняет каждую операцию, как и во многих интерпретируемых языках массива. Думая об этом немного больше, я предполагаю, что мой код скомпилирован как минимум 2 цикла; один внутри indgen и один (или более?) для оценки остальной части выражения. –