由於Fortran使用列優先順序,是否意味着使用向量比使用數組要快?由於列主要順序,1D陣列是否比2D陣列更快?
考慮下面的例子。方法2是否比方法1慢,因爲方法2連續訪問A(ii,1)
和A(ii,2)
,它們在內存中是分開的?
program main
implicit none
real*8 :: A(10,2)
real*8 :: A1(10),A2(10),B(10)
integer :: ii,jj
do jj=1,2
do ii=1,10
A(10,2)=dble(ii)+(jj)
end do
end do
A1=A(:,1)
A2=A(:,2)
! Method 1
do ii=1,10
B(ii)=A1(ii)+A2(ii)
end do
! Method 2
do ii=1,10
B(ii)=A(ii,1)+A(ii,2)
end do
end program main
您是否嘗試過測量它?你發現了什麼? Fortran中沒有*向量*,所有顯示的都是一個數組。 –
同樣,'A1(ii)'不在內存中的'A2(ii)'旁邊。這裏有關於編譯器,硬件和所有事情的問題。 – francescalus
OP可能會感興趣http://stackoverflow.com/questions/38353830/how-to-choose-the-best-configuration-of-2d-array-ai-j –