面试题答案
一键面试program sum_rows
implicit none
integer, parameter :: n = 1000
integer :: i, j
real :: A(n, n)
real :: row_sum(n)
! 初始化数组A,这里假设随机初始化
do i = 1, n
do j = 1, n
A(i, j) = real(random_number())
end do
end do
! 对每一行进行求和
do i = 1, n
row_sum(i) = sum(A(i, :))
end do
do i = 1, n
print *, 'Row ', i,'sum: ', row_sum(i)
end do
end program sum_rows
性能提升原因:
- 利用Fortran的数组操作特性:使用
sum(A(i, :))
这种内置函数进行求和操作,编译器可以对其进行优化,相比手动逐个元素累加,这种方式在底层可能会利用更高效的指令集,例如SIMD(单指令多数据)指令,以并行的方式处理数组元素,从而加快计算速度。 - 减少循环嵌套:如果手动使用循环逐个元素累加,需要两层循环(外层循环遍历行,内层循环遍历列)。而采用
sum
函数,只需要一层循环遍历行,减少了一层循环带来的额外开销,例如循环变量的更新、边界检查等操作,从而提升了性能。