Performance 隐含DO循环编译性能
以下隐含的Do循环在编译时产生了糟糕的性能Performance 隐含DO循环编译性能,performance,compiler-errors,fortran,gfortran,do-loops,Performance,Compiler Errors,Fortran,Gfortran,Do Loops,以下隐含的Do循环在编译时产生了糟糕的性能 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, grid_size), & n = 0, num_time_steps), l =
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, grid_size), &
n = 0, num_time_steps), l = 0, num_time_steps)], shape(haarWPhi2D))
我不明白为什么编译速度非常慢,取决于期末考试的价值,编译可能永远也不会完成。例如,其中一些人的年龄为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, grid_size), k = -grid_size, grid_size), &
n = 0, num_time_steps), l = 0, num_time_steps)], shape(haarWPhi2D))
end program main
您的类型声明看起来不正确。为什么人们认为一切都需要在一行中完成?有时隐含循环不如显式循环优化。尝试独立于重塑对二级数组进行计算可能值得一试?类型声明不会不正确,因为正如我所说的,对于较低的final值,编译成功了。我的问题与编译时受到影响而运行时不受影响这一事实有关。一旦编译完成,计算速度非常快。你没有抓住要点。您没有提供足够的信息,以便有人调查此问题。特别是,我编写了gfortran的一些片段,这些片段扩展了数组构造函数并进行了简化(即常数折叠)。祝你好运