Can sb。 Fortranでpointer
とallocatable
のサブルーチンパラメータを渡す違いについて説明してください。私はダミーfsm
引数にallocatable
属性を使用している場合、それは(ちょうどCのように)ベクトル化を行いながら割り当て可能な関数パラメータと自動ベクトル化
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
:以下の関数はのgfortran 7.2でないベクトル化を行い、なぜ私は理解していません。私はpointer
のgfortranを使用すると、はるかに高いベクトル化コストを報告すると
gfortran -mavx -O3 -ftree-vectorize -c loops.f90 -fopt-info-vec-note
を次のコマンドラインを使用してコンパイルします。引数がどのように渡されるか(例えば、間接、ポインタへのポインタ対値渡し)に重要な違いがありますか?これはgfortranの問題ですか?
ポインタバージョンに 'contiguous'属性を追加すると、ベクトル化されますか? – francescalus
愚かな、割り当て可能ではなく仮定された形状について考えました。私はフランセスカラスが正しいかもしれないと思う。仮定の形状配列 '(:)'と明示的な形状配列 '(n)'も試してみてください。同様の違いが見られるかもしれません。 –
@francescalus確かに、それは:)ありがとう! – angainor