Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在fortran中跟踪内存使用情况_Fortran_Out Of Memory_Dynamic Memory Allocation_Gfortran - Fatal编程技术网

在fortran中跟踪内存使用情况

在fortran中跟踪内存使用情况,fortran,out-of-memory,dynamic-memory-allocation,gfortran,Fortran,Out Of Memory,Dynamic Memory Allocation,Gfortran,我正在构建一个用于fortran集成的库。我在其中使用了dynamics数组。问题是,每当我尝试用一个非常小的步长进行集成时,系统很快就会从RAM中退出,gfortran就会给出内存不足的错误 现在,我希望动态监控库模块中的ram使用情况,并在每个子例程中插入一个stop命令,即每当ram使用量达到总ram的4/5时,进程将停止并给出一条错误消息,即在某个指定限制内使用一个时间步,应从积分范围中获取。有没有办法监控fortran程序中的ram使用情况,并获取程序中可用系统ram总量的信息,这些信

我正在构建一个用于fortran集成的库。我在其中使用了dynamics数组。问题是,每当我尝试用一个非常小的步长进行集成时,系统很快就会从RAM中退出,gfortran就会给出内存不足的错误


现在,我希望动态监控库模块中的ram使用情况,并在每个子例程中插入一个stop命令,即每当ram使用量达到总ram的4/5时,进程将停止并给出一条错误消息,即在某个指定限制内使用一个时间步,应从积分范围中获取。有没有办法监控fortran程序中的ram使用情况,并获取程序中可用系统ram总量的信息,这些信息将用于停止程序?

问题是,每当我尝试与一个非常小的步长集成时,系统很快就会自然退出ram,我根本不会这么说。自年以来,Fortran程序一直用于解决大型集成问题。内存耗尽是一件非常奇怪的事情。想尽一切办法找出如何跟踪内存使用情况(记录存储
allocate
d和
deallocate
d应该不会太困难),但我自己的第一个想法是整理软件design@HighPerformanceMark对不起,马克,我只能对你的评论投赞成票once@high性能评分,我只是问这个。如何计算分配的阵列使用的存储空间?我使用的方案是1。将集成范围划分为1000和2000个网格。2.使用两个网格查找积分结果。3如果两者之间的差异小于最大误差,则将1000更改为1000×5,将2000更改为2000×5。4.如果仍然不能收敛到预期精度,则再次乘以woth 5。5.继续。如果必须的话,您可以在代码中填充对内在函数
storage\u size
的调用,并在计算过程中保持某种运行总计。你可以将计算结果与o/s认为的程序内存消耗进行比较,两者并不相同,o/s可能会认为你的程序占用的空间比你运行时使用的内存总量要多。问题是,每当我尝试集成一个非常小的步长时,很自然,系统很快就会脱离内存,我根本不认为这是自然的。自年以来,Fortran程序一直用于解决大型集成问题。内存耗尽是一件非常奇怪的事情。想尽一切办法找出如何跟踪内存使用情况(记录存储
allocate
d和
deallocate
d应该不会太困难),但我自己的第一个想法是整理软件design@HighPerformanceMark对不起,马克,我只能对你的评论投赞成票once@high性能评分,我只是问这个。如何计算分配的阵列使用的存储空间?我使用的方案是1。将集成范围划分为1000和2000个网格。2.使用两个网格查找积分结果。3如果两者之间的差异小于最大误差,则将1000更改为1000×5,将2000更改为2000×5。4.如果仍然不能收敛到预期精度,则再次乘以woth 5。5.继续。如果必须的话,您可以在代码中填充对内在函数
storage\u size
的调用,并在计算过程中保持某种运行总计。你可以将计算结果与o/s认为的程序内存消耗进行比较,两者并不相同,o/s可能认为你的程序占用的空间比你运行时使用的内存总量要多。