Kann jdn. erklären den Unterschied zwischen pointer
und allocatable
Subroutine Parameter in Fortran? Ich verstehe nicht, warum die folgende Funktion nicht vectorize in gfortran 7.2 tut:zuweisbare Funktionsparameter und automatische Vektorisierung
subroutine test0(fsm, im)
implicit none
real, dimension(:), pointer :: fsm
integer, intent(in) :: im
integer i
do i = 1,im
fsm(i) = fsm(i)*2
end do
end subroutine test0
während es vectorize tut (wie in C), wenn ich allocatable
Attribut für das Dummy-fsm
Argument verwenden. Ich kompiliere mit der folgenden Befehlszeile
gfortran -mavx -O3 -ftree-vectorize -c loops.f90 -fopt-info-vec-note
Bei der Verwendung von pointer
gfortran berichtet über eine viel höhere Vektorisierung Kosten. Gibt es also einen wichtigen Unterschied in der Art und Weise, wie die Argumente übergeben werden (z. B. Indirection, Pointer to Pointer vs. Passing by Value), oder ist dies ein Problem von gfortran?
Wenn Sie der Pointer-Version das Attribut "contiguous" hinzufügen, vektorisiert es? – francescalus
Dumm, dachte über angenommene Form statt zuordenbar. Ich denke Francescalus könnte Recht haben. Versuchen Sie auch ein angenommenes Form-Array '(:)' und ein explizites Form-Array '(n)'. Sie könnten einen ähnlichen Unterschied beobachten. –
@francescalus in der Tat, das macht es :) danke! – angainor