在当前计算机应用中,对快速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求:

  1. 计算密集(Computer-Intensive)型应用,如大型科学project计算与数值模拟;
  2. 数据密集(Data-Intensive)型应用,如数字图书馆、数据仓库、数据挖掘和计算可视化等;
  3. 网络密集(Network-Intensive)型应用,如协同工作、遥控和远程医疗诊断等。

并行编程模型主要有三种:适用于共享内存的多线程编程模型。适用于分布内存的消息传递编程模型,混合编程模型。

在计算机系统中。处理器永远都是訪问离自己近期的存储空间速度最快,比方L1 cache->L2->本地节点内存->远程节点内存/磁盘,而各层次的存储容量跟訪问速度恰恰相反。

并行计算中,并行算法的设计是决定性能的关键。有些问题天生具有良好的并行性。比方待处理数据集合能够被较好的去耦,而有些问题则须要复杂的公式推导和转换以适合并行计算。同一时候,还要避免计算过程中可能出现的瓶颈。任务划分要充分考虑负载均衡特别是动态负载均衡,“对等”的思想是维护负载均衡和保持可扩展性的关键之中的一个,即在设计时尽量避免使用Master/Slave和Client/Server的模式。

1.并行机的体系

并行机的发展从SIMD到MIMD。衍生除了四种经典的体系结构模式:SMP(Symmetric Shared-Memory Multiprocessor。比方经常使用的多核机。可扩展性较差。处理器数目8~16个),DSM(Distributed Shared-Memory。物理存储器分布于各个处理节点,而逻辑地址空间採用统一编址,因此属于共享存储。訪存时间受限于网络带宽)。MPP(Massive Parallel Processor。由成百上千台处理机组成的大规模系统,国家综合实力的象征。。)。机群系统(Cluster。互联的同构或异构的独立计算机的集合体,每一个节点都有自己的存储器、I/O、操作系统,能够作为单机使用,节点之间採用商品网络互联,灵活性较强)。

硬件:多核CPU(Intel, AMD), GPU(Nvidia), CellBe(Sony&Toshiba&IBM -> game,包括一个主处理单元和8个协处理单元)

概念:数据总线 地址总线 控制总线 (寄存器)位数

2.并行编程模型和工具

– MPI –

MPI(Message Passing Interface)是一种消息传递编程模型。服务于进程通信。它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种库描写叙述,而不是一种语言,易于使用且具有高可移植性。说白了就是一些编程接口。

– OpenMP –

Open Multi-Processing是适用于共享内存多处理器体系结构的可移植并行编程模型。接口由SGI公司发起。

包括编译指导、执行函数库和环境变量三部分,具有串行等价性(不管使用一个还是多个线程执行一个程序,都带来同样的结果,更易于维护和理解)和增量并行性(处理器从一个串行程序開始,一块接着一块的寻找那些值得并行化的代码段)。

OpenMPI的执行模型採用Fork-Join形式。即主线程-从线程。减少了并行编程的难度和复杂度。

编译器指导语句,visio studio支持,使得OpenMP既能够被看做并行程序也能够被看做串行程序,或者在保持串行程序部分不变的情况下,用户能够方便地将串行程序改写成并行程序。

– MapReduce –

Google。PageRank倒排表索引的构建。

Map把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成终于输出Output。

– Hadoop –

MapReduce的开源版本号。HFDS,NameNode(JobTracker),DataNode(TaskTracker),集群架构。

– CUDA –

Nvidia公司开发的GPU并行计算工具。

– CellBe –

CellBe的主要目标是将PlayStation2的处理器性能提高10倍,2006年IBM还推出了Cell刀片计算机系统。

參考文献:《并行计算机编程基础》& CUDA课程

$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('

    ').addClass('pre-numbering').hide();
    $(this).addClass('has-numbering').parent().append($numbering);
    for (i = 1; i ').text(i));
    };
    $numbering.fadeIn(1700);
    });
    });

并行计算基础&编程模型与工具的更多相关文章

  1. 老李分享: 并行计算基础&编程模型与工具 2

    2.并行编程模型和工具 – MPI – MPI(Message Passing Interface)是一种消息传递编程模型,服务于进程通信.它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种 ...

  2. 老李分享: 并行计算基础&编程模型与工具 1

    老李分享: 并行计算基础&编程模型与工具   在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如 ...

  3. 老李分享: 并行计算基础&编程模型与工具

    在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学工程计算与数值模拟: 数据密集(Data-In ...

  4. Fork/Join编程模型

    1.一种并行计算的多线程编程模型 2.开始--任务分割--多线程异步执行---任务合并--阻塞等待合并结果.(分治算法) 3.work-stealing算法: 每个线程维护一个各自的双端的链表,有新任 ...

  5. 3、TensorFlow基础(一) 设计思想与编程模型

    1.TensorFlow系统架构 如图为TensorFlow的系统架构图: TensorFlow的系统架构图,自底向上分为设备层和网络层.数据操作层.图计算层.API层.应用层,其中设备层和网络层,数 ...

  6. Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark编程模型 1.1 术语定义 l应用程序(Application): 基于Spar ...

  7. Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 . 安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语 ...

  8. Spark编程模型

    主要参考: Spark官方文档:http://spark.apache.org/docs/latest/programming-guide.html 炼数成金PPT:02Spark编程模型和解析 本文 ...

  9. C#异步编程の-------异步编程模型(APM)

    术语解释: APM               异步编程模型, Asynchronous Programming Model EAP                基于事件的异步编程模式, Event ...

随机推荐

  1. “=”号和“:”的区别,Html.Raw()的使用

    “=”号,将原封不动输出字符串到页面 “:”号:将字符串进行编码后输出到页面 public ActionResult HtmlEncodeDemo() { ViewData["strScri ...

  2. (五)《Java编程思想》——final关键字

    可能使用final的三种情况:数据.方法.类. 1.final数据 final 常量必须是基本类型数据,且在定义时须赋值: 一个既是static又是final的域只占据一段不能改变的存储空间,只有一份 ...

  3. angularJS环境安装

    第一步: 安装node.js,进入node.js官网(http://nodejs.org/)下载安装相应的node.js版本:

  4. 如何让MyEclispe中英文切换

    我们通过网上的一些汉化办法汉化了我们的MyEclipse,可是我们有时候想切回英文版怎么办? 方法一:我们可以通过修改MyEclipse配置文件的办法来从中文恢复到英文, -Duser.languag ...

  5. C#高级知识点概要(1) - 委托和事件

    本文目录: 委托 委托的简单使用 用委托实现插件式编程 多播委托 静态方法和实例方法对于委托的区别 泛型委托 Func 和 Action 委托 委托的兼容 事件 事件的基本使用 事件的标准模式 委托 ...

  6. 读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数

    class A { private: int a; public: A(int x) :a(x){} A operator*(const A& x) { return A(a*x.a); } ...

  7. 如何在webstrom中配置eslint和less

    webstrom 帮助文档(英文版) 1.在webstrom中使用ESLint规范代码格式: JSHint 可以帮助检测你的 JavaScript 代码中的错误和潜在的问题,而 eslint是一个 J ...

  8. [Mugeda HTML5技术教程之10]发布内容

    动画作品制作好后,就要拿来使用,怎么发布到想要的位置也是动画制作者比较关心的问题.这一节,我们讲述怎样将制作好的动画内容发布到想要的地方.对制作好的内容,可能的使用场景主要有以下三种:直接导出:发布到 ...

  9. LINUX VPS 查看系统信息命令

    系统# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostna ...

  10. destoon实现调用热门关键字的方法

    本文所述的destoon调用热门关键字的方法是根据数据库里面的保存的搜索的关键字来显示的.每个模块下面都有各自的关键字下面是调用的标签: ? 1 <!--{tag("moduleid= ...