我在F90中有类似的代码:
real(8), dimension(10,10,10) :: A
do i = 1, 1000
print*,A(i,1,1)
enddo
Run Code Online (Sandbox Code Playgroud)
我很惊讶这个工作,它比简单地循环3个维度更快i,j,k.
有人可以解释为什么这有效吗?
你的代码是非法的.但是在引擎盖下,阵列的内存布局恰好是在三维循环k,j,i中的列主要顺序,因此代码似乎有效.但这是非法的.
如果在编译器中启用运行时错误检查(请参阅手册),它将找到错误并报告它.
如果不启用编译器优化,可能会稍快一些,因为嵌套循环中存在一些开销,但优化编译器会将代码优化为一个循环.
如果你真的这样做了(你应该总是显示你的代码!)
do i=1,10
do j=1,10
do k=1,10
something with A(i,j,k)
Run Code Online (Sandbox Code Playgroud)
那么请注意,这是错误的顺序,你应该循环k,j,我的顺序.
另请注意,测量打印到屏幕的速度是没有用的,可能非常棘手.一些数学运算更有用.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |