微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

隐含的 DO 循环编译性能

如何解决隐含的 DO 循环编译性能

以下隐含的 Do-loop 在编译时产生糟糕的性能

haarWPhi2D = reshape([((((((2**(-j/2))*haarWaveletPhi((2**j)*(m*dx)-k))* &
 ((2**(-j/2))*haarWaveletPhi((2**j)*(n*dt)-l)),&
  m = -grid_size,grid_size),k = -grid_size,&
   n = 0,num_time_steps),l = 0,num_time_steps)],shape(haarWPhi2D))

我不明白为什么编译非常慢,并且取决于finals的价值甚至可能永远无法完成编译。例如,其中一些是 100。

我不是专家,但我希望在任何情况下性能都会在运行时而不是编译时受到影响。

Compiler version: GCC version 9.3.0
 Compiler options: -mtune=generic -march=x86-64 -fpre-include=/usr/include/finclude/math-vector-fortran.h

--更新--

这是一个可以用来证明问题的简单案例

program main

    implicit none
        integer :: m,n
        integer :: k = 0
        integer :: l = 0
        integer,parameter :: num_time_steps = 100
        integer,parameter :: grid_size = 100
        real :: haarWPhi2D(-grid_size:grid_size,-grid_size:grid_size,0:num_time_steps,0:num_time_steps)
        haarWPhi2D = reshape([((((1,&
            m = -grid_size,&
                n = 0,shape(haarWPhi2D))

end program main

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。