minetree 发表于 2008-5-4 20:54

【原创】使用虚拟机实现sysnoise多进程的并行计算

对于大型模型,sysnoise多进程的并行计算是个大问题。利用5.1假期就此做了些有益的测试,终于实现了同一台机器上、多个sysnoise进程的同时运行并与多CPU节点的一对一绑定。
在此,本人将解决方案在振动论坛上首发,并欢迎来email多多交流。若要转载,请注明:转载于振动论坛forum.vibunion.com。


[ 本帖最后由 minetree 于 2008-5-4 21:32 编辑 ]

minetree 发表于 2008-5-4 21:00

minetree 发表于 2008-5-4 21:01



[ 本帖最后由 minetree 于 2008-5-4 21:30 编辑 ]

minetree 发表于 2008-5-4 21:03

minetree 发表于 2008-5-4 21:04

minetree 发表于 2008-5-4 21:05

minetree 发表于 2008-5-4 21:11

由于本人手头没有合适的sysnoise56,也没能安装上,所以sysnoise56的相关测试尚没有做,十分遗憾。如果能同时使用sysnoise56的Pade迭代求解器,速度将实现最大化。

相关内容欢迎来email交流,本人可提供文章的相关pdf版本。(这里附件不能发pdf,我不知道怎么搞)

mazhen 发表于 2008-5-5 20:01

非常感谢 minetree大侠的研究啊,简直就是雪中送炭,强烈建议楼主将本帖子作为精华帖,先下来研究一下,试试,不懂的再向楼主请教啊!

w89986581 发表于 2008-5-5 20:15

回复 8楼 的帖子

呵呵,你先试试,如果可以提高计算速度,那么再加为精华贴也不迟。如果能给出你做的测试结果(两个窗口运行时间与一个窗口运行时间比),也加分哦。

[ 本帖最后由 w89986581 于 2008-5-5 20:16 编辑 ]

minetree 发表于 2008-5-5 21:03

呵呵,简单测试我已经做过,是对比VPC和Host的CAE速度。即:分别在服务器上用VPC和Host对同样的模型进行sysnoise的CAE,相关比对程度、速度和耗时如下。
测试所用模型:两者相同。
对比结果:
(1)两者计算结果一致;
(2)耗时:
VPC: 4mins 49seconds(VPC锁定CPU)
Host: 6mins 26seconds(sysnoise进程未锁定CPU结果)5mins 17seconds(sysnoise进程锁定CPU结果)


由此可见:
VPC上的CAE结果是可靠的;
在Host上计算,锁定CPU的CAE速度会加快,但仍赶不上在VPC上的速度。
所以,在实际操作中,可优先使用VPC锁定CPU进行CAE,以节省计算时间。

上述解决方案中,文一是针对单核平台进行的实践,实质上不会提高计算一个指定模型的速度(因为CPU速度就这么多);但,对于多核平台,使用附文的方法,则开始能成倍节省计算时间。
根据简单测试,我推断,只要CPU足够,要计算一个模型,可以这么做:将需要计算的频点等分成若干份(记为n),每份对应锁定一个CPU计算,这样,原来需要T时间完成的CAE任务,原理上可以在T/n时间内完成。当然,前提是平台的CPU节点数>=n。

进一步的深入测试(如:运行稳定性、VPC内存设置对CAE速度的影响等)和实施技巧有待大家在使用中不断交流。

[ 本帖最后由 minetree 于 2008-5-5 21:19 编辑 ]

mazhen 发表于 2008-5-6 10:03

对楼主的这种方法,从昨天开始就一直在摸索,现在有几个疑问:
1对于单核平台,楼主的意思是不是在vpc中计算的时候要比在host中计算的时候要快?
2对于多核平台,楼主的意思好象是在系统中设置多个帐号,并在不同帐号下安装vpc,用远程桌面连接到多核平台,但是这样是不是每个进程计算的还是各自的内容啊!
    楼主的这种计算方法是否是人为的将计算按照参与计算的cpu个数分成n份,让每个vpc分别计算各自的一部分,最后再把结果合成起来?
    如果是这样,不知道最后的结果合成好做不好做?
上面只是我个人的感觉啊,跟楼主学习一下!呵呵

[ 本帖最后由 eight 于 2008-5-6 10:20 编辑 ]

minetree 发表于 2008-5-6 13:51

回复 11楼 的帖子

>>1对于单核平台,楼主的意思是不是在vpc中计算的时候要比在host中计算的时候要快?

我的测试结果是这样

>>但是这样是不是每个进程计算的还是各自的内容啊!

是的,每个进程相互之间是独立的。可以同时计算不同的模型,也可以同时计算相同模型的不同部分,后者需要将结果最后组合起来。这个工作很简单,只需要将结果文件txt结果内容,按照最初的分部次序组合即可。当然,我一直做的是将频率分部,最后再组合结果。结果可靠,这个方法我一直在用,只不过是在不同计算机上同时算而已。现在可以在一个平台上实现。

>>楼主的这种计算方法是否是人为的将计算按照参与计算的cpu个数分成n份,让每个vpc分别计算各自的一部分,最后再把结果合成起来?

呵呵,正是的。相当于以前是一台电脑算,现在是n台机器同时多线程算一个任务。和FlashGet的工作模式一样。只是最后要人工组合结果。建议将分配每个CPU的CMD中,把存储的结果文件txt编号,以方便组合。

[ 本帖最后由 eight 于 2008-5-6 15:24 编辑 ]

mazhen 发表于 2008-5-6 19:24

我还想了解一下关于最后结果文件的组合的情况,楼主如果有这方面的资料可以发给我点吗?谢谢!   mzh910@126.com

minetree 发表于 2008-5-6 20:21

比如,设定
CPU1计算出频段: Frequnecy 100 To 1000 Linstep 50,
输出结果:
Export Results Format Free
Frequnecy 100 To 1000 Linstep 50 File .\part1.txt
Return

CPU2计算出频段: Frequnecy 1050 To 2000 Linstep 50,
输出结果:
Export Results Format Free
Frequnecy 1050 To 2000 Linstep 50 File .\part2.txt
Return

这样,两个频段就可以同时计算出来了,节省一半的时间。然后在处理数据时,将part2.txt的结果全部copy到part1.txt后面就可以了,这样组合出来的数据就是Frequnecy 100 To 2000 Linstep 50 的所有结果,接下来在处理就是了。

要注意sysnoise结果文件(results)和potensial 数据排布格式不一样,results是频点-》场点格式,potensial 是场点-》频点格式

这些实际上是后期数据处理的事情,以上是我的处理方法,供参考。

[ 本帖最后由 minetree 于 2008-5-6 20:28 编辑 ]

mazhen 发表于 2008-5-7 09:54

似乎明白了,努力试验中--------
很期待这样的计算方法,如果是这样应该可以大幅度提高计算速度
页: [1] 2
查看完整版本: 【原创】使用虚拟机实现sysnoise多进程的并行计算