FORALL结构旨在建立一种高效执行程序的结构,特别是在并行过程,例如多重循环
以上两种写法完全等效,需要指出的是:FORALL只能用于数组操作,也就是说,赋值符号两边只能是数组。然而在实际使用中,FORALL结构的运算速度并不比do循环快,有时甚至比do循环还慢不少。以下是Intel Fortran编译器的官方文档说明
可以看到,FORALL强烈依赖于编译器优化,不一定能提高速度。因此,Fortran2015里FORALL已经是要淘汰的语法了。想要并行优势,还不如直接mpi把do循环给拆了。
PS:cpu_time返回的是一个浮点型数字,表示当前CPU运行时间(以秒计)
示例:
program test_cpu_time
real :: start, finish
call cpu_time(start)
! put code to test here
call cpu_time(finish)
print '("Time = ",f6.3," seconds.")',finish-start
end program test_cpu_time
这样可以自己分别用FORALL结构和do循环结构做个测试,看看各自运行的时间。