是否使用 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 秒。
我有以下 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 秒。