哪些因素限制了ANSYS Fluent的多核并行数值计算核数

查看: 17336|回复: 11
ansys 14.0的软硬件电脑配置问题,期待高手解答!
主题帖子积分
学徒工, 积分 49, 距离下一级还需 51 积分
学徒工, 积分 49, 距离下一级还需 51 积分
在资金有限(8000元)情况下,进行比较大型的计算,如何使Ansys14.0计算速度最快。
有以下几个疑问:
1) ansys最大可以多少个线程进行计算,4核CPU(比如i7)+64位系统(win7)可以得到充分利用吗,是不是只能使用其中2核,或者1核,如果要发挥4核可以通过打补丁来解决吗,有这样的补丁吗?
2) ansys运行对内存大小的要求高吗,3通道或者4通道内存构架对发挥其性能影响大吗?
3) Nvidia显卡的GPU计算功能对Ansys14.0有帮助吗,比如GTX460+的GPU,怎么实现?
4) 显卡性能对复杂网格结构显示的作用大吗?
5) 在复杂计算的时候,计算数据的吞吐量大吗,需不需要固态硬盘或者硬盘阵列?
以下的配置方案是否满足水桶原则,能否最大限度运行ansys14.0,能同时运行多少个线程呢?
cpu:intel i7 3770
ram:kingston 4x4G ddr1600
motherboard: Asus P8Z77
displaycard: GTX570
hardisk: SSD&&威刚S510(120G) X2 raid
请高手不吝赐教!!!
主题帖子积分
学徒工, 积分 47, 距离下一级还需 53 积分
学徒工, 积分 47, 距离下一级还需 53 积分
真正的高手,普通的机子也可以玩的很溜,虽然我不是高手,比如划分适量网格和使用合适的求解计算方法。你的机子配置真的很高了,不知道你准备从事什么分析,我现在仍然还在使用10年前的本子,IBM ThinkPad T30,CPU还是奔4的,标配256M内存,自己加了根516M内存,40G硬盘,还被Linux占了20G,运行ANSYS 13.0版本,计算普通模型,8万个节点以下,静力分析还好,要是碰到弹塑性问题,需要分步载荷多次迭代计算的,时间就较长,但还是能计算出来,这时间也刚好可以去喝茶和妹子吹牛。
有限元软件主要是对内存要求大,还有CPU的二三级缓存尽量大,还有主板的频率,这些能说明的是数据的传输速率,还有CPU的主频,这关系数据处理能力,当然还有很多东西可以考虑,比如指令集,硬盘读写速率,机子工作稳定性。倒是对显卡要求不是很高,一般的就可以了。我还想找Linux版本的ANSYS呢,linux的shell和ANSYS的APDL结合起来应该不错。你给的配置应该属于WorkStation级别的了,具体看你做什么
© The rotblatt™, Inc.| The Yeh's Families
主题帖子积分
学徒工, 积分 49, 距离下一级还需 51 积分
学徒工, 积分 49, 距离下一级还需 51 积分
谢谢楼上的回应,主要是用来分析比较复杂的静力结构(接触),疲劳和动力学碰撞,模型结构比较不规范,貌似不能简化。
补充一下,32位系统和64位系统有什么大的区别呢
主题帖子积分
学徒工, 积分 49, 距离下一级还需 51 积分
学徒工, 积分 49, 距离下一级还需 51 积分
有人知道吗?求详细经验!
主题帖子积分
中级工程师, 积分 1146, 距离下一级还需 3854 积分
中级工程师, 积分 1146, 距离下一级还需 3854 积分
硬盘有点小了,大的东西计算过程中,中间的文件可能达到几百G,如果不够的话,会出现你看不明白 的错误,你还 不知道是什么原因。换个大的的硬盘吧,至少搞个500G的独立硬盘。如果你计算的东西很大的话。其它的配置已经很牛了。
主题帖子积分
中级工程师, 积分 1146, 距离下一级还需 3854 积分
中级工程师, 积分 1146, 距离下一级还需 3854 积分
64位的系统 在理论上要比32位快一倍,据说是专为数学计算开发的系统。
主题帖子积分
学徒工, 积分 16, 距离下一级还需 84 积分
学徒工, 积分 16, 距离下一级还需 84 积分
既然内存远大于3.2G的话,就别考虑32位系统了,而且64位系统更能提升计算性能,当HPC用的话,肯定是选择64位操作系统,毕竟能够更好的发挥64位CPU的性能。顺便说一下,64位系统不是专门给高性能计算开发的……………………
ANSYS的并行计算是由License决定的,如果License中间限制了核心数的话,可能部分组件只能4线程或者8线程或者更少。从你的描述来看,感觉似乎没怎么用过多核计算的功能,用多核心计算不需要什么补丁,只要在计算任务中进行设置使用的核心数就可以了,至少我用过的组件像ANSYS、Ls-Dyna、Fluent等都是这样使用的。
配4×4的内存比较多余,根据使用集群的经验来看一核心配2G的内存基本就足够了,即使是这样的配法,一般都有盈余,内存占用率在实际使用中并不会太高,足够正常的计算使用。多通道主要是提升了CPU与内存的交换速度,但是实际使用中计算瓶颈可能会在在于硬盘的数据吞吐,所以多通道一般会提升计算效率,但是提升不会太大。
硬盘只用120G×2的SSD肯定不够用,特别是如果你做了RAID,实际使用空间就只有120G,而一般进行大规模计算的话,一个工况可能产生几十G的中间数据,这个时候硬盘空间肯定吃紧。考虑实际使用,SAS不会比SSD性能下降多少,但价格低很多,所以实际HPC多使用SAS。但是千万不要选用个人电脑用的IDE,对性能和数据安全都会有较大的影响。
现在ANSYS支持GPU加速,具体可以见ANSYS的说明,不过购买显卡最好先咨询确认一下是否能够支持ANSYS的GPU加速功能,否则过好的显卡只能带来经费上的浪费。当然好的显卡由于渲染等性能较好,所以在显示大规模的网格时,确实能够得到较好的使用体验,不易出现幻灯片的情况。
最后,最好对需要的计算机性能做一个预估,找到计算机成本与计算时间成本的相对平衡,如果实际不需要计算太大的规模的模型或者不需要考虑复杂的非线性问题或动力学问题的话,这台电脑在经过前面几点的微调的话是肯定够用了,甚至可能是有很大的性能盈余的。但是如果处理一些大规模的非线性问题,这台电脑估计是难以胜任,就我这边集群的计算时间来看,这台电脑对一个数十万单元规模的非线性动力学问题估计要花费一两周时间才能计算完。
主题帖子积分
学徒工, 积分 47, 距离下一级还需 53 积分
学徒工, 积分 47, 距离下一级还需 53 积分
引用第2楼archer19于 22:17发表的  :
谢谢楼上的回应,主要是用来分析比较复杂的静力结构(接触),疲劳和动力学碰撞,模型结构比较不规范,貌似不能简化。
补充一下,32位系统和64位系统有什么大的区别呢
主要是寻址范围,32位系统只能在内存寻址2^32个存储单元,即3G多,超过4G即使再多的内存也是浪费,而64位可以寻址2^64个单元,在当前内存容量水平下,不可能有这么大的内存的。内存其实也是缓存的一部分,只是是CPU以外的缓存,比CPU内的二三级缓存要慢,内存越大,越可以把准备要处理的数据加载进入内存或缓存,待CPU处理,特别对迭代运算产生中间数据,在接后要调用的,要知道有限元是大矩阵计算问题,迭代运算过程产生的数据是很大的,如果寻址的内存不够,就只能临时存入硬盘了,但速度就会慢了很多
© The rotblatt™, Inc.| The Yeh's Families
主题帖子积分
真正的高手,普通的机子也可以玩的很溜,虽然我不是高手,比如划分适量网格和使用合适的求解计算方法。你的机子配置真的很高了,不知道你准备从事什么分析,我现在仍然还在使用10年前的本子,IBM ThinkPad T30,CPU还是奔4的,标配256M内存,自己加了根516M内存,40G硬盘,还被Linux占了20G,运行ANSYS 13.0版本,计算普通模型,8万个节点以下,静力分析还好,要是碰到弹塑性问题,需要分步载荷多次迭代计算的,时间就较长,但还是能计算出来,这时间也刚好可以去喝茶和妹子吹牛
主题帖子积分
学徒工, 积分 4, 距离下一级还需 96 积分
学徒工, 积分 4, 距离下一级还需 96 积分
额 请问各位高手 如果要计算100万级的流体问题,需要怎么样的配置?最好给个配置清单
主题帖子积分
学徒工, 积分 0, 距离下一级还需 100 积分
学徒工, 积分 0, 距离下一级还需 100 积分
这个应该是没问题啊。。。。各项配置都是顶配、、、、
主题帖子积分
技工, 积分 258, 距离下一级还需 42 积分
技工, 积分 258, 距离下一级还需 42 积分
低手,求教了
主题帖子积分
学徒工, 积分 2, 距离下一级还需 98 积分
学徒工, 积分 2, 距离下一级还需 98 积分
Powered by(window.slotbydup=window.slotbydup || []).push({
id: '3071821',
container: s,
size: '960,60',
display: 'inlay-fix'FLUENT和ANSYS的并行计算设置_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
FLUENT和ANSYS的并行计算设置
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢ansys fluent 下载|ANSYS Fluent16.0 最新版 - 河东下载站ANSYS&FLUENT&13.0&UDF&手册&--并行设置
第7章介绍ANSYS FLUENT并行UDF设置及应用
FLUENT并行概要
并行求解器对大规模问题采用多核同步求解,或者单机或者分布式机群。并行求解首先将计算域划分,然后给每个子块的数据分配一个计算进程。每个计算节点同步对其分配到的数据执行相同的运算程序。主进程不负责网格单元、面、节点(除使用DPM共享内存模型),其主要负责Cortex命令解释(用户交互、图形相关函数的解析),然后再把这些命令传给其他计算节点。内部节点编号为:
Host (compute Node-0), compute
Node_1, compute Node-2, etc
相邻计算节点的计算域有一层单元的重叠来保证节点间通信。虽然单元、面都是按计算域划分的,但是全域信息,如单元编号,都是映射到每个计算节点上的,它按链表存储就和串行求解一样。最后,该并行计算(配置)支持大型并行机、多CPU核工作站、网络分布式集群。
分区网格中的单元和面
串行UDF的并行化
串行求解器包含一个Cortex和唯一的一个FLUENT
进程。然而,并行求解器包括三个可执行部分:Cortex,
主节点,从计算节点。并行运行ANSYS
FLUENT,从Cortex开始,然后是一个主节点和若干个(n)从计算节点,即共有n+2个进程。因此,并行计算时,就需要保证函数可以分别在主、从节点上执行。当然,这不是说你必须写三个版本的UDF,然后分别在串行、主、从节点上跑。好的编程模式只写一个UDF,而编译生成任何想要的一个版本。这样的编程需要使用并行相关的宏文件以及编译指令(例如,#if RP_NODE, RP_HOST,PARALLEL),指引编译器对特定进程有用的UDF部分函数编译,而忽略其余。
基本要求是UDF必须是可并行的。所以,如果UDF执行的一个操作依赖于接受、发送其他计算节点的数据,那么这个UDF里有关全局规约的运算,比如全局求和、最值、某个操作需要使用相邻节点数据的等,就需要修改以支持并行。其他需要针对并行修正的串行程序还有:
全域逻辑判断
单元、面的某些循环操作
主从节点打印
离散相模型(DPM)UDF并行化
DPM可采用如下并行选项:
当使用DPM相关UDF时,这些UDF会在控制研究(对象)粒子的机器上执行,基于上述两种并行选择。因为在DPM模型中所有流体变量都存入追踪粒子的数据结构中,使用DPM UDF的并行不需要其他考虑了,除了并行写输出文件。这时,不允许使用C语言的fprintf函数,而要使用一个专为并行写文件操作定义的新函数。每个计算节点将各自信息写到各自独立文件里,最后再排序整合到一个文件。该新函数使用同fprintf的变量。这些文件的排序需要额外的一个参数列表。不使用排序函数
par_fprintf_head,就需要将排序信息填在输出文件的文件头。
par_fprintf_head("x-coordinate&y-coordinate&z-coordinate\n")&
上述函数会自动将字符“ x-coordinate, y-coordinate, z-coordinate”
放到输出文件的文件头。
计算节点信息如下:
par_fprintf("%d %d %e %e %e\n", P_INJ_ID(P_INJECTION(p)), p-&part_id,
P_POS(p)[0],&P_POS(p)[1],&P_POS(p)[2]);&
额外参数P_INJ_ID(P_INJECTION(p)),p- &part_id在并行方案中使用,但是不管串并行都必须有这两个参数。写入各自节点信息文件时这两个参数将被去掉。
注意,如果你需要得到其他数据,比如单元变量值。那么对消息传递方法,你将得到所有流体变量以及求解器相关变量。但是共享内存法,你只能得到在SV_DPM_LIST和SV_DPMS_LIST中定义的变量。这些宏定义参考dmp.h
编译指令宏
主从进程传递宏
谓词宏(逻辑判断宏)
全域归并宏
分区单元ID、面ID宏
消息显示宏
消息传递宏
从节点消息传递宏
并行UDF缺点
PRINCIPAL_FACE_P只能用于并行UDF;etc
FLUENT的每个进程都有一个唯一的整数标识号,它存在全局变量myid里。当在UDF里使用myid,它将返回当前计算节点的标识号。主进程ID node_host(=999999),存在全局变量node_host。Node_0节点标识号是0,对应全局变量node_zero.
FLUENT的全局变量
int&node_zero&=&0;
&int&node_host&=&999999;
&int&node_one&=&1;
&int&node_serial&=&1000000;
&int&node_
&int&compute_node_&
myid常用于IF条件语句。下面给出一个使用全局变量myid的例子。其中,总面数在一个面线程中通过累加求的。那么,如果myid不是0号计算节点(node_0),那么所有计算节点的面数豆浆通过PRF_CSEND_INT宏传给0号计算节点。
int&noface=0;
&&begin_f_loop(f,&tf)
&&end_f_loop(f,&tf)
&#if&RP_NODE&if(myid!=node_zero)
&PRF_CSEND_INT(node_zero,&&noface,&1,&myid);
并行UDF实例
#include&"udf.h"
&DEFINE_ADJUST(face_av,domain)
&int&surface_thread_id=0;
&real&total_area=0.0;
&real&total_force=0.0;
&#if&!RP_HOST
real&area[ND_ND];
&#if&!RP_NODE&
surface_thread_id&=&RP_Get_Integer("pres_av/thread-id");
Message("\nCalculating&on&Thread&#&%d\n",surface_thread_id);
&host_to_node_int_1(surface_thread_id);&
&#if&RP_NODE
Message("\nNode %d is calculating on thread #
%d\n",myid,
&surface_thread_id);
&#if&!RP_HOST
&thread&=&Lookup_Thread(domain,surface_thread_id);
&begin_f_loop(face,thread)
&if&(PRINCIPAL_FACE_P(face,thread))&
F_AREA(area,face,thread);
total_area&+=&NV_MAG(area);
total_force&+=&NV_MAG(area)*F_P(face,thread);
&end_f_loop(face,thread)
&Message("Total&Area&Before&Summing
%f\n",total_area);
&Message("Total&Normal&Force&Before&Summing
%f\n",total_force);
&#&if&RP_NODE&
&total_area&=&PRF_GRSUM1(total_area);
&total_force&=&PRF_GRSUM1(total_force);
&node_to_host_real_2(total_area,total_force);&
&#if&!RP_NODE&
&Message("Total&Area&After&Summing:&%f&(m2)\n",total_area);
&Message("Total&Normal&Force&After&Summing
%f (N)\n",total_force);
&Message("Average&pressure&on&Surface
%d is %f (Pa)\n",
surface_thread_id,(total_force/total_area));
首先所有进程初始化变量 surface_thread_id, total_area,
total_force,计算节点使用这些变量计算,主节点使用这些变量做消息传递和显示目的。然后,预处理器在各节点上编译thread, face, area变量,因为面、线程仅在从计算节点内定义过。然后,主节点使用RP_Get_Integer获得用户定义变量pres_av/thread_id,
并将其赋给变量 surface_thread_id. …
并行写文件
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 python 多核并行计算 的文章

 

随机推荐