切换到宽版
  • 1438阅读
  • 9回复

[一家之言]ECL多进程与加速比 [复制链接]

上一主题 下一主题
离线麦克龙
 
发帖
801
财富
1146
威望
54
交易币
0
只看楼主 倒序阅读 使用道具 0楼 发表于: 2015-06-14 | 石油求职招聘就上: 阿果石油英才网
《ECL是什么?》
ECL是Eclipse,是一套大型的数值模拟软件系统,或者叫数值模拟平台。
但是,资深的数模人员都叫它“模拟器”。包含一组模拟器。
有黑油模拟器,E100;组份模拟器,E300,这两个用的最多。还有热采模拟器、流线模拟器、组份流线模拟器。
黑油模拟器,对付流体相态由压力主导的油藏。相应的,组份——组份主导的油藏;热采——温度主导的油藏。
其它品牌的模拟器:CMG、VIP、MORE,别的我不知道的。各有优缺点,ECL用得比较多。
ECL同时安装有32位、64位版本。具体用哪个,ECL自己判断。当然可以在64位系统上强制运行32位版本,不过没人这么干。

《数模怎样干?》
以黑油模拟器为例,有两个方面。
一是人怎样干。很简单,就是准备DATA文件(有八大部分),说白了就是为模拟器准备运算需要的基础、控制参数、需要查看哪些东西,然后分析运算的结果,通过反复调整输入,使其更符合油藏历史,然后预测油藏未来。
二是计算机怎样干。也很简单,就是把偏微分方程线性化,针对每一个网格(及其与相邻网格的流动关系),通过牛顿迭代法求解。每个步长(一般是1个月)求一次解,形成这个月的油藏照片(压力场、饱和度场),就像电影胶片的一帧,多帧连续起来看,就像电影了,就能仿真再现油藏的开发历史。
多数人考虑的是“人怎样干”。
实际上“干数模”主要就是干这部分,把DATA文件拾掇得更能符合油藏实际。
从人的角度看,ECL就是个软件,一个平台,一个数据交互的界面。
但计算机不这样看。计算机认为,ECL是个模拟器,人的作用就是为模拟器提供运算基础和控制参数。
实际上,ECL就是一个批处理程序,与一般批处理程序不同,它需要大量的、复杂的输入输出。

《计算机怎样干?》
ECL是个运算密集型任务。尤其是网格规模大、开发历史长的油藏。
从这一点上来说,如果让我编模拟器,我会选用Fortran,至多在人机交互界面上用点别的语言。
那么“运算密集型”任务,有多密集呢?无法想像。
开发一般的应用软件,有一个“1秒原则”。就是从提交任务到看到结果,用户等待的时间极限是一秒。
但数模不行,1秒是办不了的。可能是一个小时,也可能是一天。
哀家对数模耗时的心理预期是一个晚上:下班前推送作业,第二天上班能看到结果。
这样,我白天干,它晚上干,貌似不吃亏。

《我都8核了,你怎么还那么慢?》
计算机硬件发展水平,已到了令人发指的地步。但对数模来说,提8核还是个很幼稚的表现,16核也白搭。
必须给模拟器提并行机,才能让它老实一点。计算密集就是这么任性。
我没有并行机,但我有多核,多处理器,至多有集群(我不习惯说“机群”,因为”集群“是”有机集成的机群“,概念要比”机群“大得多)。

《什么是多进程?》
线程是轻量化的进程;多核是简化的多处理器;多处理器是简化的多机。
而并行机不然。说并行机是集成化的多机,也不太严格。
对称并行机:一大堆CPU围着一个内存。
非对称并行机:一大堆CPU围着一个或几个老大CPU。
多进程的前提是有并行的实际需求。计算1+1=2无需并行。
多进程的前前提是软件有这样的设计。现在的通用操作系统(包括Windows)都是多进程的,关键是应用软件。简单的多线程很容易实现:主线程抛出多个子线程,然后忙自己的事并随时等待子线程返回结果。如果主线程没有考虑抛出子线程,那就无从实现多线程了。多进程也一样,只是子进程可以有自己全套的存储、堆栈、输入输出,例如,操作系统可以同时运行两个扫雷游戏。
多进程的前前前提是多核、多处理器、多机。一般人下棋只能同时下一盘,大师1对15的车轮大战可以同时下多盘,对外来说是并行,实际对内还是串行的,除非大师精神分裂,有多个大脑。

《什么是并行?》
一个大项目分解成几个步骤,一步一步的干。
一个大项目分解成几个小项目,同时干,并行向前推进。
如果结合起来呢?不能同时干的分步,能同时干的分工。盖房子,既要打地基也要砌墙。先打地基,然后砌墙,这是串行。砌墙的时候,有搬砖的,有和泥的,这是并行。
并行的关键就是分解。分解好了确实可以提高效率,分解不好不行:打地基的时候派个人去和泥,这不是并行,是胡闹。

《并行一定提高效率吗?》
还真不一定,跟分解和配合有关。
说得直白一点,就是“合理分工,密切协作”,说起来容易,做起来难。

先说分工。还是砌墙:。1个人搬砖,1个人和泥,1个人砌砖。这样,工头就可以安排3个人一组砌墙。如果搬砖的快、砌砖的慢,工头就可以安排1个搬砖的伺候2个砌砖的。工头不会安排10个搬砖的伺候1个砌砖的,工头不傻。但计算机很傻,软件不能预见,可能就会出现窝工的现象。
出路——合理划分“任务粒度”。

再说粒度。合理的并行粒度始终是并行机、并行任务研究的核心。还是砌砖,假设合适的粒度是1。
如果进一步分解:1人抹泥,1人放砖,1人对齐,1人压实,1人弥缝,粒度成0.2了,效率会提高吗?中间消息传递的过程会严重拉低效率,没准压实人会用瓦刀砍掉抹泥人的手指头。
如果进一步合并:砌砖的同时兼顾搬砖、和泥,粒度变成3,仅爬脚手架,就能把人累死。
出路——合理划分“计算粒度”。

再说协作。如果一个团队的“协作度”是3,任务限定,时间限定的情况下,往往会出现以下下结果:一个人干的是半成品;三个人干的是精品;十个人干的是废品。
出路——提高改善“协作度”。

《MPI/MPICH是何方神圣?》
为了以低廉的代价实现有限度的并行,充分考虑不同种类处理器之间的交互,MPI应运而生。
M是消息的意思,消息是处理器之间通信的高级语言,消息包括数据及其语义、操作、时效等,学过windows编程的人容易理解,现代人就是生活在消息里。
直白一点,消息就是一个处理器/进程对另一个处理器/进程说:你给我处理一组数据,这些数据是什么意思,处理的方法我告诉你,具体怎样处理你看着办,处理完把结果返回给我。
MPI:基于消息的非对称多处理器并行应用程序接口,是一个规范;
MPICH:MPI的一个实现,实际上是一个函数库;
MPICH for Intel:基于Intel芯片的多处理器、多核MPI函数库;
MPICH for Intel & win32/64:预编译的windows平台下的MPICH。
如果在Windows系统的微机上跑ECL,没说的,安装个吧(UNIX/LINUX平台的,效果更好,当然也不能放过)。
而且是免费正版哟~

《MPICH实现了啥?》
可以通过本地消息,利用本地机器上的多核、多处理器运行Eclipse;
可以通过远程消息,利用远程机器上的处理器运行Eclipse,甚至是不同型号的机器,前提是远程机器也有安装并接受我的消息。
不止如此,在这个环境下,也可以开发并运行其它基于MPI的并行程序。

《MPICH怎么安装?》
官方网站下载对应版本,安装(别告诉我跑数模的机器上没有安装·net framwork)。
装完要注册一下,即使是本地单处理器的多核。
给我想要使用的远程机器上也安装一套,也要注册,并搞来远程机器的机器名、帐号、密码。说白了,就是开放远程机器的使用特许——通过MPI。
别忘了测试一下,MPI消息传递通不通。

《ECL是并行设计吗?》
很幸运,是。
但需要事先告诉它:开启并行模式。
很简单:OFFICE模型定义,杂项,勾上并行选项,设置几路并行。最好再告诉处理方式:顺序的还是分布的。
单机多核的SERIAL;远程机的DISTRIBUTED。前者省去网络通信,后者需要通过网络传输(理论上是这样)。
当然,你把本机处理器的一个核心仿真成远程机器也未尝不可,就是效率低点,剩下的事MPI做。

《我非用并行不可吗?》
看着办吧。
小模型单核就够用了,非要并行,反而会增加消息传递数据量,降低效率。
中等规模的考虑用本机的处理器多核、多处理器。
大规模的考虑用远程机器,或者集群的部分节点。

《ECL数模的并行“粒度”怎么划分?》
就是几路并行。是把双刃剑,考虑两点:
1、每个网格块体的求解需要时间,路数越多越好。
2、网格块体之间的通讯需要时间,路数越少越好。
实际模型,根据网格规模、生产井数、总步长数、加密分区、机器性能、收敛程度等综合考量。
不同规模的模型理想的加速比是不同的,凭经验、感觉。
以网格数论,万数的单路,数十万的多核(2-4),上百万的(4-8)。
具体情况具体考虑,时间要求严格的最好通过试算确定。
并行度是可以随时调的。

《怎么提高ECL运算速度?》
实际工作中,是否“并行”对速度似乎不是最关键的。——上面的算是白说了。
最关键的还在人身上:
1、合理的网格:总网格数,网格类型(似乎当前角点一统天下),粗化,加密,分区,正交性,畸形网格,等等;
2、准确的流体、岩石物理模型,避免外推;
3、模型收敛性,合适的步长,避免加密;
4、动态数据准确性,假数据的发现和剔除;
5、报表定义,避免大量的、非关键数据的输出,尤其是数模前期,输出文件的格式(二进制的)。
也就是说,想提高速度,最关键的还是在OFFICE及以前阶段,而非RUN阶段。
一个模型跑4~5个小时,剔除畸形网格后半个小时跑完,什么样的并行能达到这样的加速比?

《我们还能做点啥?》
模型本身第一;机器性能第二;运行参数第三。
在笔记本上前期准备,真正RUN的时候传到高档机器上。
台式机比笔记本好,工作站比微机好,大至强比扣肉好,新机器比旧机器好。
内存开大点,主频提高点,高速硬盘或并行盘阵,都可以提速。
再有一点,数模是个让人发狂的工作,不是发烧友的工作,很多人都是晚上跑。
5个小时、10个小时都是一晚上,先让机器发烧,然后再考虑终极提速。
数模产生的文件相当大——重启步,轻松上10G。哀家的做法是,保留DATA及其包含文件,压缩起来放好,其它的一概删除。
这样,几兆、几十兆的文件运行一遍,就能还原整个模型——最佳的并行度记在最终文件里,这时候需要的是终极速度。
时间和空间这把双刃剑,哀家选择的是宝贵的硬盘空间。
3条评分财富+210威望+1
minsoul 财富 +10 优秀文章,您的文章给了我们一种享受~ 2015-07-09
dedream 威望 +1 技术交流奖励,感谢您积极参与专业技术交流 2015-06-25
dedream 财富 +200 技术交流奖励,感谢您积极参与专业技术交流 2015-06-25
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线百韧千行
发帖
1265
财富
931
威望
5
交易币
0
只看该作者 1楼 发表于: 2015-06-15 | 石油求职招聘就上: 阿果石油英才网
真的很不错,说的很全面,很深入,虽然我只看懂了一部分。
离线zrq4210
发帖
1699
财富
4275
威望
2
交易币
0
只看该作者 2楼 发表于: 2015-06-15 | 石油求职招聘就上: 阿果石油英才网
楼主在数模上面的造诣绝对是令我仰望的大神啊
以后还望多多指导
你和我的交流,不光是在交流知识。
离线georgehqg
发帖
373
财富
465
威望
34
交易币
0
只看该作者 3楼 发表于: 2015-06-27 | 石油求职招聘就上: 阿果石油英才网
大牛。。。。。。。
求给力~
离线drrile
发帖
402
财富
295
威望
1
交易币
0
只看该作者 4楼 发表于: 2015-06-30 | 石油求职招聘就上: 阿果石油英才网
挺牛的资料
离线飞行器
发帖
928
财富
978
威望
2
交易币
0
只看该作者 5楼 发表于: 2015-06-30 | 石油求职招聘就上: 阿果石油英才网
言简意赅,很棒的科普材料,有时间能细说说数模里面模拟机理么
离线minsoul
发帖
1007
财富
627
威望
33
交易币
0
只看该作者 6楼 发表于: 2015-07-09 | 石油求职招聘就上: 阿果石油英才网
很好的文章。
但也有些小缺点:
1、把能够说得更浅显明白一些的东西,说得更学术、更高深了些,感觉这个写文思路或习惯,是写论文的节奏啊。其实,有些专业术语,如果出于普及或深入浅出的原则,可以不要列那么多,比如堆栈;
2、“如果进一步合并:砌砖的同时兼顾搬砖、和泥,粒度变成3,仅爬脚手架,就能把人累死。”,这个貌似也应该把前提加上,即设砌、搬、和各占粒度1,否则与前文提到的粒度0.2对比 ,容易引起误解。
以多年专业经验,与大家分享。拓展视野,共同进步 。
2年以上工作经验的,欢迎到本空间发提问及技术探讨贴
阿果空间:测井解释十多年
http://www.agoil.cn/bbs/thread.php?fid=387
离线minsoul
发帖
1007
财富
627
威望
33
交易币
0
只看该作者 7楼 发表于: 2015-07-09 | 石油求职招聘就上: 阿果石油英才网
其实似乎可以这么总结文章主要意思:
1、ECL是个模拟软件,常规油藏用黑油模型,特殊油藏也提供针对性选择,总体来说,就是输入一堆数据,给定一堆参数,得出一堆数据;
2、输入数据环节,以建立运算基础,主要是模型及参数,是人控;计算环节,就是油田常说的“跑模型”,是机控。人控大于机控,人控做好了,合理的模型,有效的数据,正确的参数,“跑”得就快了;
3、计算机越好(包括群或操作系统,也统一计入此因素),“跑”得越快(似乎是废话?);

至于粒度等参数,参考前人经验就好。

以多年专业经验,与大家分享。拓展视野,共同进步 。
2年以上工作经验的,欢迎到本空间发提问及技术探讨贴
阿果空间:测井解释十多年
http://www.agoil.cn/bbs/thread.php?fid=387
离线李大白话
发帖
12
财富
7
威望
0
交易币
0
只看该作者 8楼 发表于: 2015-07-25 | 石油求职招聘就上: 阿果石油英才网
楼主真神人也    只能仰望
离线daokui0701
发帖
111
财富
0
威望
0
交易币
0
只看该作者 9楼 发表于: 2020-03-01 | 石油求职招聘就上: 阿果石油英才网
我还是先学会点简单的!

网站事务咨询:QQ:1392013 | 26189883
阿果石油网为免费个人网站,为石油人提供免费的在线即时技术交流场所,拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论和行为!
如有言论或会员共享的资料涉及到您的权益,请立即通知网站管理员,本站将在第一时间给予配合处理,谢谢!