各种量子化学计算软件,甚至包括VASP等材料计算软件,并行方面都有共同的特点。
准备概念:
1,CPU
考察CPU的性能的,主要是:主频、核数。
原则上说,主频(做一件事的效率)越高,计算效率越高;核数(同时做多件事的能力)越多,计算效率越高。
2,并行
并行的基本含义是,将计算任务(尤其是积分、求矩阵本征值)分割成多份,每一份交给一个“核”。每个“核”完成自己的任务之后,再交给“主管”(术语叫做“主进程”,每个核的计算叫做“子进程”)进行协调。主进程会等到收集了所有子进程的完成分配任务的信息之后,继续分配新的任务给各个子进程(分配到各个核)。如此,子进程与主进程之间反复互相协调、统一步调。这个过程中,就涉及到一个通信速率,而这是由带宽决定的。
3,带宽
并行计算里面的带宽,是指集群中,节点之间互相通信的带宽,并不是指一般的带宽。一般集群的通信,用的比较多的有以太网、InfiniBand。以太网带宽比较低,例如千兆网或者万兆网;InfiniBand的带宽可以达到几十G。子进程和主进程之间数据交换,就要靠这个带宽去完成。
并行效率
综上,并行计算的效率取决于:
1)CPU主频。一般同一品牌的CPU,主频越高,效率越高
2)CPU核数。核数越多,一般而言计算效率越高。但这仅限于并行化较好的软件。并行化较差的软件,核数增加了,计算效率有可能反而下降。因此这也是衡量软件并行化做的好不好的一个决定性指标。
3)通信速率。带宽越高,并行效率越高。但带宽对并行效率的影响,主要地是以“瓶颈”的方式去影响的。简单的说,对于特定的计算,带宽达到某个值之后,再提高带宽,对计算效率影响就很小。或者换一种说法,对某种计算而言,可能万兆网下,并行效率就不错,增加到InfiniBand,效率也不会有显著的提高,而有的计算,从千兆到万兆到InfiniBand效率都会明显的提升。
从现象上来看,对于一个具体的软件而言,计算的体系越小,通常而言,并行效率就越差。提现在什么地方呢?就是随着核数的增加,效率很快下降,效率最高的核数较小。例如对于一个水分子而言,可能A软件1核需要1分钟,4核需要15秒,8核反而需要30秒。而B软件,1核需要1分钟,4核需要15秒,8核需要8秒。那么就可以说A的并行化,没有B做的好。
从这个角度来看,计算同一个体系,有的软件在4核效率最高,有的在8核效率最高。最考验软件并行的,就是小体系。测试一个软件并行是不是做的很好,就用小体系来测试。因为体系变大了,并行效率一般都还可以,也就是效率峰值对应的核数一般都会变大。
不过也有的软件,体系大了,也算不动,增加核数,效率也不太增加。这样并行化就做的不好,不适合大体系计算。如果一个软件对小分子的并行都做的很好,那么对大体系,一般而言,就更好。
另外,大体系计算的并行,对带宽要求低于小体系。例如一个小体系计算,从InfiniBand下降到万兆网,并行效率可能会显著下降。但对很大的体系,从InfiniBand下降到万兆网,可能效率并不会明显的下降,但下降到千兆网,并行效率的下降就比较明显。
其机理用一个比喻来说明:一个管理人员(主进程),手里拿到一个工程(一个计算任务),要交给N个工作人员(N个子进程)一起配合完成(并行计算)。当每个工作人员完成自己拿到那份工作所消耗的时间比较长,而管理人员为工作人员交代工作、工作人员向管理人员提交工作的结果消耗的时间非常短(也就是对应通信效率很高),那么工作人员越多,效率就越高。反之,如果每个工作人员完成自己拿到那份工作需要的时间很短,而管理人员与工作人员之间的交接需要的时间几乎和工作人员具体工作的时间差不多(通信效率低),那么这个并行,就是非常不划算的。工作人员越多,并行的效率就越低。