是否使用 Blas 进行 Fortran 优化

Fortran optimization using Blas or not

我有以下 Fortran 代码

DO ir = 1, N
     cfac = exp( ci*B ) / dble( degen(ir) )
     C(:,:) = C(:,:) + cfac*D(:,:, ir )
ENDDO

这个循环使用 gcc -02 需要 14.00 秒。

我想优化一下。我试过 BLAS 执行矩阵向量乘法的例程:

DO ir = 1, N
   cfac(ir) = exp( ci*B ) / dble( degen(ir) )
ENDDO

DO j = 1, M
  CALL zgemv ('n', M, N, cone, D(j,:,:), M,cfac(:),1,czero, C(j,:), 1 )
ENDDO

事实证明,我得到了相同的结果,但在... 17.67 秒内。

为什么它变慢了,我该如何改进代码(不更改编译器选项)?

谢谢,

塞缪尔

改进方法如下

DO ir = 1, N
     cfac = exp( ci*B ) / dble( degen(ir) )
     CALL zaxpy(M**2,cfac, D(1,1, ir ),1, C (1,1),1)
ENDDO

有了这个,我大致从 15 秒到 13 秒。