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等,但都不常用。

  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/tibetanmastiff/p/4673721.html
Copyright © 2011-2022 走看看