关于FDTD Solutions并行计算的有关问题


#1

FDTD算法非常适合并行运算,因此,从Lumerical公司成立的那一天起,FDTD Solutions计算引擎的核心部分就可以根据不同的计算机硬件并行运算。 另外,对于扫描和优化作业,需要仿真大量的文件,为了提高仿真效率,Lumerical公司也提供了相应的并行计算解决方案。根据仿真文件和所涉及的计算机硬件,有两种并行计算方法:

1:分布式并行运算 Distributed Parallel Simulation
从Lumerical公司成立的那一天起,分布式并行运算就是一个缺省的选项,只要仿真需要,并且计算机有足够的核或者CPU,都可得以充分利用,此种并行运算是针对
一个仿真文件和一台物理计算机(即一台个人电脑或者集群CLuster的节点)
参见下图:

上方表示一个仿真文件的空间,下方表示它可以分解为522=20个小块,每个小块使用一个Process来计算。注意这里我们使用Process而不是核或者CPU,这是因为实际计算机它们三者之间的关系比较复杂。

在缺省的情况下,只要用户在Resouce那里设置Process个数,软件会自动地根据文件的大小选择最优的小块来并行运算。这种分布式并行运算不需要额外的License,只要能打开软件的GUI图形界面,就可以使用。

当然,如果你有EngineLicense, 也可以不用图形界面而直接用命令行运行。

需要注意的是,由于在每个时间步长上每块需要与相邻的块交换数据(相当于边界条件),因此,并不是设置的Process个数越多越好,用户最好先行测试。具体每个Process最好有多少仿真量与计算机硬件有直接关系。

软件本身支持多核并行、跨节点并行,支持
MPICH2
Microsoft MPI
Intel MPI
Cusom
等并行库

2:共发式并行运算Concurrent Parallel Simulation
当用户需要参数扫描、优化时,需要大量的仿真,这种共发式并行运算就是针对这种情况设计的。此时,软件可以自动在
不同的计算机上同时仿真不同的文件,而且每台计算仍然可以分布式并行运算
前提是,每台计算机上都必须有EngineLicense,而且它们会好在同一个局域网内(即一个路由器下面):

下图显示在Resouce那里设置了5台机器,名字分别为local, node2,node3,node4 和 node5。其中local是当前打开仿真文件的当地机器; node2,node3,node4 和 node5是局域网内其它能够获取Licnese的机器,即这些机器或者本身安装了EngineLicense, 或者能够连接到安装Engine License的机器。此时,该用户共有一个FullLicense和4个EngineLicense。 如果你们计算机管理员并没有给计算机命名,也可以使用计算机的IP地址。

如此,仿真将加快5倍。

为了获得最好的仿真效果,我们建议者喜参与仿真的计算机性能相当,否则某台性能差的计算机可能影响仿真效率,因为仅当所有文件仿真结束后,共发式并行运算才结束,并获取结果。

如果文件的仿真量小,你的计算机性能也很好,你可以在同一台计算机上在仅有一个License的情况下做共发式并行运算,其设置同上面一样,只不过是你点复制就可以

对于Concurrent 在这里的翻译,当时也比较犯难。考虑其共行性,是逻辑上同时发送和空间上的并行,再考虑与并行的区别,故此。现在比较新的一种翻译是并发,但是由于我们已经使用共发,就一直沿用。

有关硬件配置的一般参考性意见参见这个帖子


关于服务器CPU 的主频和核数选择问题
工作站如何用一个以上的节点分布式并行仿真一个大型文件
FDTD Solutions 扫描中断
job manager not respond怎么解决呢
FDTD Solutions硬件指标的一般性推荐
运行失败 engine err
如何设置才能提高fdtd仿真效率
#2

发现使用一台高性能电脑(基本参数如图,没有运行其他后台程序)并不比一台一般笔记本(内存4G,I5双核)在运算速度上有显著提升。参数设置都一样,在128G电脑上把process从5调到50,发现基本没有变化,该如何提高运算速度呢?预期以为时间会缩短为1/10,结果发现几乎一样。


#3

这个需要对并行运算有充分的理解。并行运算有个性能指标Scaling,忘记中文里翻译成什么了。
FDTD Solutions 分布式并行运算是将仿真区根据一定的原则划和计算机硬件分成不同的子区域,见下图

每个Process仿真一个子区域。不仅如此,在
每个时间步长上
相邻子区域的边界需要交换数据才能做下一步仿真。当子区域数目比较少时,整个仿真需要的时间主要花在子区域的计算方面,而交换数据所需要的时间可以忽略不计,此时,仿真性能随子区域的增加而线性提高,也就是,以子区域的个数为横坐标,以性能Scaling作纵坐标,是一个在第一象限的直线;随着子区域的增加,交换数据所需要的时间越来越长,特别是,这种交换一般都是芯片之间,速度要远远慢于芯片内的交换速度,此时Scaling将不再是直线,而是向下弯曲。当数据交换占主要时,用多个子区域性能反而下降,例如你说的情况。

所以,用多少核或者Process,要根据你的仿真文件的性质来决定。你可以逐步增加Process的个数(一般建议为偶数),当性能下降时,就不要再增加了。

更多测试参见这个白皮书
以及这个


Fdtd solution对cpu和内存的配置有什么要求?