老李分享: 并行计算基础&编程模型与工具
在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求:
- 计算密集(Computer-Intensive)型应用,如大型科学工程计算与数值模拟;
- 数据密集(Data-Intensive)型应用,如数字图书馆、数据仓库、数据挖掘和计算可视化等;
- 网络密集(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课程
老李分享: 并行计算基础&编程模型与工具的更多相关文章
- 老李分享: 并行计算基础&编程模型与工具 1
老李分享: 并行计算基础&编程模型与工具 在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如 ...
- 老李分享: 并行计算基础&编程模型与工具 2
2.并行编程模型和工具 – MPI – MPI(Message Passing Interface)是一种消息传递编程模型,服务于进程通信.它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种 ...
- 并行计算基础&编程模型与工具
在当前计算机应用中,对快速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学project计算与数值模拟: 数据密集(Da ...
- 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...
- 老李分享:《Java Performance》笔记1——性能分析基础 1
老李分享:<Java Performance>笔记1——性能分析基础 1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...
- 老李分享:android app自动化测试工具合集
老李分享:android app自动化测试工具合集 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)
IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...
- 3、TensorFlow基础(一) 设计思想与编程模型
1.TensorFlow系统架构 如图为TensorFlow的系统架构图: TensorFlow的系统架构图,自底向上分为设备层和网络层.数据操作层.图计算层.API层.应用层,其中设备层和网络层,数 ...
- 老李分享:qtp自动化测试框架赏析-关键字自动化测试框架
老李分享:qtp自动化测试框架赏析-关键字自动化测试框架 QTP从2005年继winrunner,robot逐渐退出历史舞台之后,占领主流自动化测试工具市场已经10年之久.当初为了提高在自动化测试 ...
随机推荐
- devexpress设置皮肤、字体以及折叠菜单、伸缩Panel的实现
1.为了体现系统的个性化,越来越多的系统增加了换肤功能.这里例举一个devexpress实现换肤的案例,效果图对比: 第二张图片中更换了皮肤与字体. 2.皮肤数据源绑定代码: //循环添加皮肤名称 f ...
- dev控件chart简单实现多图例,双曲线,双柱图,曲线与柱图
1.效果图 2.数据源代码: ; i < ; i++) { == ) { dt1.Rows.Add( * i); dt2.Rows.Add( * i+); } else { dt1.Rows.A ...
- repeater绑定泛型list<string>
菜鸟D重出江湖,依然是菜鸟,囧!言归正传—— 工作中遇到一个repeater绑定的问题,数据源是一个list<string> 集合,然后在界面上使用<%#Eval()%>绑定. ...
- 2732: [HNOI2012]射箭( 半平面交 )
很久没写题解了= =,来水一发吧= = 首先这道题很明显就是求y=ax^2+bx的是否有值取,每一个式子都代表着两个半平面,然后直接半平面交就行了 借鉴了hzwer的代码,还是特别简洁的说 CODE: ...
- 存储过程与SQL语句如何选择
58到家数据库30条军规,有一条是“禁止使用存储过程.视图.触发器.Event”, 高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”, 并发量大的情况下,这些功能很可能 ...
- iOS 快速集成启动页广告
前言 由于项目中要用到启动页广告,所以做了简单的研究,同时借鉴网易新闻和蘑菇街的交互写了一个简单的demo,现在写出来供大家参考,可能由于个人局限会有一些bug和不完善的地方,也希望大家能够友善提醒和 ...
- mfc---CFileFind
使用CFileFind实现在指定路径下,查找指定类型文件 CFileFind.FindFile(FilePath + "\\*.*"),成功返回true,否则返回false CFi ...
- github学习(一)
初识github篇. 一.什么是github: GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub. g ...
- Playground 你不知道的小技巧, CoreData 的使用
Playground 的出现无疑是大大的提高了开发效率,可以节省大量的编译时间. 这里介绍在 Playground 中使用 CoreData 的小技巧. 我们新建一个工程 iOS 项目工程. 点击Fi ...
- LeetCode 2. Add Two Numbers 解题报告
题意: 有两个链表,它们表示逆序的两个非负数.例 (2 -> 4 -> 3)表示342,求两个数字的和,并用同样的方式逆序输出.如342+465 = 807,你需要把结果表达为(7 -&g ...