我用 Fortran 编写的 PDE 模拟程序必须进行大约 200 万个可变时间步长。但是随着每一个时间步,它会越来越慢,所以如果它最初每秒执行 1000 个时间步,那么当它达到 600k 及以上的时间步时,它会在几分钟内完成 1000 个时间步。模拟运行得越远,减速就会继续。
据我建立和理解,问题与缓冲有关。有足够的内存,并且随着模拟的进行并没有完全填满,但是随着时间步长的进行,它确实会减慢很多。看起来有些缓存被填满了,所以出现了越来越多的延迟。
解决方案是在每隔一定数量的时间步后释放内存,从而以块的形式运行模拟。但是,我还不知道如何在 Fortran 中做到这一点。是否必须使用类似call Malloc()的方法在 Fortran 中动态分配每个数组,然后call Free()在完成一定数量的时间步后用于释放内存?或者有没有更好的方法来解决这个问题?将不胜感激一些建议。