MST

星途 面试题库

面试题:Fortran数组操作与性能优化

在Fortran中,假设有一个二维数组 `A(1000, 1000)`,现在需要对其每一行进行求和操作。请给出一种优化后的代码实现方式,并解释为什么这样能提升性能。
20.0万 热度难度
编程语言Fortran

知识考点

AI 面试

面试题答案

一键面试
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

性能提升原因

  1. 利用Fortran的数组操作特性:使用 sum(A(i, :)) 这种内置函数进行求和操作,编译器可以对其进行优化,相比手动逐个元素累加,这种方式在底层可能会利用更高效的指令集,例如SIMD(单指令多数据)指令,以并行的方式处理数组元素,从而加快计算速度。
  2. 减少循环嵌套:如果手动使用循环逐个元素累加,需要两层循环(外层循环遍历行,内层循环遍历列)。而采用 sum 函数,只需要一层循环遍历行,减少了一层循环带来的额外开销,例如循环变量的更新、边界检查等操作,从而提升了性能。