zoukankan      html  css  js  c++  java
  • 五种主要多核并行编程方法分析与比较

      随着多核时代的到来与流行,传统的单线程串行程序的编程模式必将改变,取而代之的将是并行编程。目前已经有五种主要并行编程模型,下面将对此五种模型进行概括性的分析与比较:

    1. MPI

      MPI(Message Passing Interface)消息传递接口是MPI论坛发布的一个库,而不是一门实现语言,支持C/C++/Fortran。是一种消息传递编程模型,为进程间通信服务。MPI提供了一种与平台无关,可以被广泛使用的编写消息传递程序的标准。用它来编写消息传递程序,不仅实用、可移植、高效和灵活,而且和当前已有的实现没有太大的变化。目前MPI的主要实现有以下三种:

      优点:可以在集群上使用,也可以在单核/多核CPU上使用,它能协调多台主机间的并行计算,因此并行规模上的可伸缩性很强,能在从个人电脑到世界TOP10的超级计算机上使用。

      缺点:第一,基于消息传递,需要显示划分和分布计算任务,显示进行消息传递与同步,且不易增量开发串行程序的并行性;第二,使用进程间通信的方式协调并行计算,这导致并行效率较低、内存开销大、不直观、编程麻烦。

      参考资料:MPI论坛

    2. OpenMP

      OpenMP(Open Multi Processing)是由Open ARB发布的一种用于并行编程的规范,是建立在串行语言上的扩展,目前可以在C/C++/Fortran中使用。

      OpenMP由三部分组成:编译指导(compiler directive)、运行库(runtime library)和环境变量(environment variables)。其语言模型基于以下假设:执行单元是共享一个地址空间的线程,即OpenMP是基于派生/连接(fork/join)的编程模型。Fork/join的并行机制如下图所示:

      Fork/join并行机制:并行区前,串行命令派生出多条并行命令并行执行,执行到并行区末等待,等所有并行任务都结束,再转到串行执行。

      OpenMP有两种常用的并行开发形式:一是通过简单的fork/join对串行程序并行化;二是采用单程序多数据对串行程序并行化。

      优点:第一,共享存储模型,使得程序员不必进行数据划分和分布,使得开发并行程序比较容易;第二,更适合于SMP系统;第三,主要面向循环级的并行开发,可以容易地实现增量性的并行化。

      缺点:第一,OpenMP只适用于SMP结构;第二,OpenMP主要开发循环级的并行程序,受此限制,对某些应用并不适合;第三,OpenMP的编写、正确性调试和性能调度复杂。

      参考资料:Open ARB - OpenMP

    3. Intel IPP

      Intel IPP(Integrated Performance Primitives),Intel集成性能基元是Intel函数库的第二代。Intel为每种新的多核处理器都发布一个IPP函数库(C/C++ API),专用于多核架构,提供了调度优化的函数库,其中涉及的领域有数学、信号处理、音频视频、图像处理与编码、字符串、密码学。 IPP的组成如下图所示:

      优点:是经过性能高度优化的库,执行效率高。

      缺点:专用于Intel处理器和某些领域,不方便移植。

      参考资料:Intel IPP产品介绍

    4. Intel TBB

      Intel TBB(Threading Building Blocks),Intel线程构建模块,是一个为创建可靠的、可移植的和可扩展的并行程序的C++模板库。专用于编写高层抽象的C++程序,和可移植的程序。

      优点:可移植、可扩展。

      缺点:性能没有IPP高。

      参考资料:Intel TBB产品介绍

    5. MapReduce

        MapReducesh是Google的人研究出来的一个模型,开发的一个针对大规模群组中的海量数据处理的分布式编程模型。

      参考资料:http://www.mapreduce.org/

      此外,并行编程模式还有X3H5, Phreads, HPF等,但都不常用。

  • 相关阅读:
    cfdem链接库地址不对的解决方法(liblmp_auto.so)
    总结入门学习OpenFOAM的资料(网址、论坛、帖子、博客等)
    运行cfdemCFDEMuti编译时出现的错误
    mapreduce 的三种测试方式
    Shell 编程
    hadoop集群搭建
    hadoop的环境配置
    hadoop 模板虚拟机环境准备以及对模板机的克隆
    linux总结
    解决maven控制台出现乱码情况
  • 原文地址:https://www.cnblogs.com/jpcflyer/p/2356906.html
Copyright © 2011-2022 走看看