2009年10月22日星期四

并行编程方式:OpenMP + MPI +Mapreduce

OpenMP和MPI是并行编程的两个手段,但基本的思考方式有些差异,结构上有所区别。基于个人理解,现比较如下:

OpenMP:

OpenMp是线程级别的,共享是存储,只适应用于共享总线与内存,单一操作系统映像的SMP机器和DSM机器。可扩展性比较差,对机器的要求比较高。一般双核的机器(很多CPU共享内存条)适合用OpenMP,可以提高一定的运行速度。这个在科学计算方面应用比较多一些。

MPI:

MPI是进程级的并行粒度,分布式存储,数据分配方式是显示的,具有很好的扩展性。适合于各种机器,但其编程模型比较复杂:

  1. 需要分析计划分计算任务,并将任务映射到分布式进程集合中去计算。由于MPI是基于消息的,至于是基于任务划分还是数据划分,没有任何限制。具有很强的划分灵活性,这也就引起了复杂性,灵活也意味着复杂呀。简约的灵活才是硬道理。
  2. 由于是进程级别的,就需要解决通信延迟和负载不平衡问题。要不效率也会大大折扣了。
  3. 另外就是程序调试起来比较费劲。
  4. 可靠性比较差。一个进程挂了,整个程序都错了。

OpenMP+MPI的组合也是一个应用研究方向。

MapReduce:

MapReduce是通过把对数据集的大规模操作分散到网络节点上实现可靠性;每个节点会周期性的巴完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点记录下这个节点状态为死亡状态。然后把分配给这个节点的任务发到别的节点上。

从上可见,Mapreduce是完全基于数据划分的角度来构建并行计算模型的。具有很好的容错能力,也很容易学习。可用于分布排序,web日志分析,构建索引,文档聚类,给予统计的机器学习(Mahout)等等了。

Hadoop是一个基于JAVA实现了MapReduce计算模型的分布式并行编程框架。关于Hadoop的技术调查请参考下面的调查资料。Hadoop技术调查

没有评论:

发表评论