阳光石油网|石油技术交流|石油人论坛

 找回密码
 欢迎注册
查看: 2698|回复: 2

[基本理论] 关于模拟器提示内存不足的问题(OUT-OF-MEMORY CONDITION)

[复制链接]
  • TA的每日心情
    奋斗
    2016-2-26 13:48
  • 签到天数: 508 天

    [LV.9]以坛为家II

    发表于 2018-11-22 01:29:53 | 显示全部楼层 |阅读模式

    马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。

    您需要 登录 才可以下载或查看,没有账号?欢迎注册

    x
    本帖最后由 joylin 于 2018-11-22 02:47 编辑

    原帖地址:http://www.sunpetro.cn/forum.php ... 1&extra=#pid1939311
    问题如下:
    我在用Petrel跑拟合的时候,报了个错,错误描述如下:
    “ UNABLE TO ALLOCATE MEMORY FOR ARRAY GRID OF TYPE DOUBLE , LENGTH 333601241, AND REQUIRING 2545 MBYTES. THE SYSTEM ERROR RETURNED WAS 41 3369 MBYTES PREVIOUSLY ALLOCATED THIS IS AN OUT-OF-MEMORY CONDITION. ”

    怀疑提问的朋友直接拿了精细地质模型输入了模拟器,未经过粗化,3亿的网格规模,需要规模集群或者大型工作站了。

    好吧,其实这是个简单的问题,但还是值得思考下,因为目前精细模拟又被提出来了,动辄宣传几亿的网格规模,但是使用界限大家还是要明确的。

    这个模型网格规模达到了3亿!其实,模拟器的提示已经很全面了,就是模拟器的表达太死板。

    这里来解释下,网格的属性数据,比如渗透率,在模拟器里是已一个双浮点数类型(double)的数组(或者叫一维矩阵),
    一个333601241规模的双浮点数数组,在64位系统下的内存占用约为2.5GB。用python来验证下:
    2018-11-22_010457.png
    但是,你要知道模拟器还需要很多的属性数组,比如三个方向的渗透率、孔隙度等,在模型计算中还有很多结果也是保存在同样规模的双浮点数数组中,比如饱和度、压力等。
    因为模拟器通常使用牛顿迭代,所以要保留前几次迭代的结果,这就导致储存矩阵的数量在增多。所以模拟器的线性迭代一般都是使用稀疏矩阵,因为内存占用小。

    模拟器使用的内存,除了属性,还跟流体相数目有关,比如3相肯定大于2相。tnavigrator模拟器里明确说了,最小内存范围:一个3相活网格需要3kb,一个2相活网格需要2kb。为什么,因为相态数据也是要储存为数组矩阵的。所以组分模型需要的内存就更多了。

    ECLIPSE中的NSTACK 关键字,可能大家经常用来改善线性迭代收敛性,其实这个关键字就是增大了线性迭代结果的储存栈的深度,用来储存前几步的结果,更好的为以后的线性迭代做参考值。所以增大这个数,也会增大内存使用。我见过有人设置1000,额~~~

    还有,并行、非邻链接NNCs、LGR啊,都会增大内存使用哦,当然网格规模还是最重要因素。

    就这个模型而言,实际过程就不是一个2.5GB可以满足了,你瞧,模拟器告诉你了,他需要404GB,但是恐怕你没有那么多内存。其实这也是模拟器的预估计,实际计算过程中可能需求更多。

    内存不够的问题,在10几年前,计算机内存不大的时候,做模拟还时有发生,但是后来内存都大了,大家反而忽视了内存使用的优化。

    如何解决也简单,第一种:控制网格规模,对照自己的内存大小,选择合适的网格规模;第二种:购买足够的内存,你的公司是王思聪开的话,可以考虑这一条^_^
    有人可能说,为什么不把这些数据保存到本地硬盘,这要内存使用就少了。其实就目前的硬件条件不可行,因为数据量太大,本地的读写也太慢。

    有人可能又说,现在的模拟器不都是动态内存分配吗,其实动态内存分配是在初始化阶段完成,内存检测也是,主要根据的就是你输入的数据维度大小。也就是说,动态分配只是不需要你指定数据DIMS了,但是最低的要求还是有的。像tnavigrator,cmg全都是动态分配,所以不需要你输入dims设置和预分配内存设置。

    额,ECLIPSE的runspec部分的welldims等DIMS设置,这应该是遗留的兼容问题。明确的是目前的ECLIPSE是动态内存分配。所以MEMORY这个关键字也是遗留而已,不起作用的哦。

    如何查看目前模拟的内存分配呢?ECLIPSE为例,PRT文件,搜索MEMORY:
    2018-11-22_010457.png
    其他的,大家有兴趣的话,自己研究下吧。

    最后说一句,要做精细模拟,大规模模型,你的软硬件、人工、时间成本都会增加不少,至于目前的油价环境,玩得起的,想要玩的,都是土豪!



  • TA的每日心情
    无聊
    2018-11-28 20:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-11-25 15:48:41 | 显示全部楼层
    谢谢您,我就是原贴的提问者,确实是直接用的精细模型跑,因为项目要求就是精细三维地质建模和数值模拟,但我建的模型网格总数是一千七百多万,为何模拟器里变成了3亿
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-2-26 13:48
  • 签到天数: 508 天

    [LV.9]以坛为家II

     楼主| 发表于 2018-11-25 19:49:31 | 显示全部楼层
    Terrigenesis 发表于 2018-11-25 15:48
    谢谢您,我就是原贴的提问者,确实是直接用的精细模型跑,因为项目要求就是精细三维地质建模和数值模拟,但 ...

    这里的3亿多是指的网格grid部分啊,你可以在rpt文件中查看的。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 欢迎注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|阳光石油网 ( 鲁ICP备2021003870号-1 )

    GMT+8, 2024-5-15 09:34 , Processed in 0.064724 second(s), 23 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表