3

我有一些(Fortran)代码将数据累积到一个数组中,基本上是这样做的:

complex,dimension(4000)::a,b
complex :: c
[...]
a=0.
do i=1,20000
    b=foo(...)
    c=bar(...)
    a=a+b*c
end do

使用 callgrind,我了解到我的程序的大部分工作是执行该行

a=a+b*c

所以我对我是否可以做任何事情来加速这一点很感兴趣。作为一个起点,我尝试使用为我的系统优化的 BLAS 库,并将这一行替换为

call caxpy(4000,c,b,1,a,1)

Callgrind 报告称,这将整个程序的“Ir 计数”减少了约 40%。但是,以“时间”衡量的执行时间增加了大约 20%。

我预计运行时间应该与执行的指令数量大致成正比,因此这两个度量应该给出可比较的结果(时间报告 99% 的 CPU 使用率)。我在这里想念什么?

4

0 回答 0