原文网址(不知道国内能上去不):http://jkndrkn.livejournal.com/205249.htm
作者为了测试Erlang与MPI的性能,做了两大类实验:
一、数据传送速率实验
1.pingpong:两个进程相互间进行收发数据,就像打乒乓球一样。
2.pingping:也就是说该进程一直像外发送数据,而不管上次的数据是否已被处理(如果没有被处理就被这次的数据给覆盖了)
3.Sendrec:将多个进程组成一个圈,第一个进程发出数据,第二个接收;然后第二个发出,第三个接收;...
4.Alltoall:有多个进程,任意两个进程间相互传递数据。
二、计算性能实验
1.Monte-carlo仿真实验
2.矩阵的乘法实验
还有一个实验作者没有完成,这里就不写了。
下面是作者的实验结果:
数据传送速率部分实验结果:
下面这张图是各个数据量下的统计次数,前面的统计次数都是1000,后面数据量太大了,就没有做太多的统计。
Pingpong
Pingping
Sendrecv:
All-to-all:
计算性能测试实验结果:
Matrix Multiplication:
Monte-Carlo:
实验结果分析:
由上面的实验结果可以看出来,MPI在计算性能方面要远远优于Erlang, 并且在小数据量传输方面也要优于Erlang. Erlang只在较大的数据量传输时,性能才明显优于MPI。并且当核数增加时,Erlang传输数据耗时的增加速率要远大于MPI的。当然,作者是基于共享内存式的并行计算,而不是分布式的并行计算,但这些实验结果也是很有意义的。如果你设计的并行计算程序计算负担大于数据传输负担,那么你最好用MPI来进行设计。而相反,如果你设计的并行计算程序数据交互比较厉害,数据传输负担远大于计算负担,则应优先考虑用Erlang来进行设计。另外,当核数比较多时,MPI的优势就更加明显了,在数据传送速率和计算性能方面都要优于Erlang。