使用Blas的Fortran优化与否

时间:2015-10-01 13:19:36

标签: optimization fortran blas

我有以下Fortran代码

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

此循环使用gcc -02需要14.00s。

我想优化它。我试过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.67s。

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

谢谢,

塞缪尔

1 个答案:

答案 0 :(得分:1)

改进它的方法如下

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

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