版权声明:很多其它内容,请关注【架构师技术联盟】公众号 https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/80059122

当摩尔定律还是行业的铁律时。计算机编程差点儿一直都是串行的,绝大多数的程序仅仅存在一个进程或线程。大家还过着“我写个程序,性能达不到就睡个觉,等硬件工艺刷新硬件性能。性能就达标了”的美好生活。2003年以后由于工艺达到了瓶颈。你光“睡觉”是不行了。

异构并行计算作为重要技术之中的一个承担起了技术变革的重任。

异构并行计算的本质是把任务分发给不同架构的硬件计算单元(比方说CPU、GPU、FPGA等),让他们各司其职。同步工作。如同平时工作,把业务中不同类型的任务分给不同的计算资源运行。

从软件的角度来讲,异构并行计算框架是让软件开发人员高效地开发异构并行的程序。充分使用计算平台资源。从硬件角度来讲。一方面,多种不同类型的计算单元通过很多其它时钟频率和内核数量提高计算能力,还有一方面。各种计算单元通过技术优化(如GPU从底层架构支持通用计算,通过分支预測、原子运算、动态并行、统一寻址、NIC直接訪问显存等能力)提高运行效率。

异构计算(Heterogeneous Computing)在80年代中期就已产生。其定义更加宽泛。异构计算主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。常见的计算单元类别包含CPU、GPU等协处理器、DSP、ASIC、FPGA等。

一个异构计算平台往往包含使用不同指令集架构(ISA)的处理器。

在HPC异构并行计算架构应用技术中,通常分为通用架构并行专用架构并行。通用架构并分为同构多核并行(X86 CPU多核并行计算和非X86 CPU多核并行计算)和异构众核并行(CPU+GPU异构协同计算和CPU+MIC异构协同计算);专用架构并行主要是指CPU+FPGA异构协同计算。

从更广义的角度来讲,不同计算平台的各个层次上都存在异构现象。除硬件层的指令集、互联、内存层次之外。软件层中应用二进制接口、API、语言特性底层实现等的不同。对于上层应用和服务而言,都是异构的。

异构并行计算框架有个很重要的特征就是可以帮助开发人员屏蔽底层硬件差异,能让软件平台自适应未来硬件的演进。概括来说,理想的异构计算具有例如以下的一些要素:

  • 它所使用的计算资源具有多种类型的计算能力。如SIMD、MIMD、向量、标量、专用等。

    当中。芯片硬件定义了单指令单数据(SISD)、单指令多数据流(SIMD)、多指令单数据(MISD)和多指令多数据(MIMD)四个并行级别 ,此外,MIMD还分单程序多数据(SPMD)和多程序多数据(MPMD)。

  • 它须要识别计算任务中各子任务的并行性需求类型。

  • 它须要使具有不同计算类型的计算资源能相互协调运行

  • 它既要开发应用问题中的并行性,更要开发应用问题中的异构性,即追求计算资源所具有的计算类型与它所运行的任务(或子任务)类型之间的匹配性

  • 它追求的终于目标是使计算任务的运行具有最短时间

可见,异构计算技术是一种使计算任务的并行性类型(代码类型)与机器能有效支持的计算类型(即机器能力)最匹配、最能充分利用各种计算资源的并行和分布计算技术。异构计算处理过程本质上可分为三个阶段:

  1. 并行性检測阶段。并行性检測不是异构计算特有的。同构计算也须要经历这一阶段。可用并行和分布计算中的常规方法加以处理。

  2. 并行性特征(类型)析取阶段

    并行性特征析取阶段是异构计算特有的,这一阶段的主要工作是预计应用中每一个任务的计算类型參数,包含映射及对任务间通信代价的考虑。

  3. 任务映射和调度阶段,也称为资源分配阶段。主要确定每一个任务(或子任务)应该映射到哪台机器上运行以及何时開始运行。

从用户来看,上述的异步计算处理过程可用两种方法来实现:

第一种是用户指导法,即由用户用显式的编译器命令指导编译器完毕相应用代码类型分析及有关任务的分解等工作,这是一种显式开发异构性和并行性方法,较易于实现。但对用户有一定要求,需将异构计算思想融入用户程序中。

这是当前主流採用的方法,我们所知的CUDA(Computing Unified Device Architecture) 、OpenCL都是採用用户指导法。

还有一种是编译器指导法,需将异构思想融入编译器中,然后由具有“异构智能”的编译器自己主动完毕应用代码类型分析、任务分解、任务映射及调度等工作,即实现自己主动异构计算。这是一种隐式开发异构性和并行性方法,是异构计算追求的终极目标。但难度很大,对编译器要求很高。NVIDIA已经開始部分尝试编译器指导法。当然,基于CUDA Core的同构特征,也可以觉得其做的是同构自己主动调度。

异构计算按提供计算类型多样性的形式来看。可分为系统异构计算SHC (System Heterogeneous Computing) 和网络异构计算NHC (Network Heterogeneous Computing) 两大类。SHC以单机多处理器形式提供多种计算类型,而NHC则以网络连接的多计算机形式提供多种计算类型。

用于HPC的计算系统(如IBM RoadRunner等)属于NHC;当前热门的CUDA、OpenCL都属于SHC的范畴。

随着深度神经网络为代表的深度学习盛行,从图像识别到自然语言处理、自己主动驾驶等。似乎大家遇上了问题都会思考:“是否能依靠AI来解决?”对于深度神经网络训练来说。通常网络越深,须要的训练时间越长。

一次训练使用单X86 CPU来做。可能须要一年,使用8核CPU来做,也须要一个半月到两个月,可是使用单GPU来做,仅仅须要一周,可是一周对实际生产来说已经很慢了,大家希望一天两天、甚至是几个小时训练就行得到结果。在部署的时候,计算平台一般是X86或ARM。提高其计算性能对用户的使用体验很重要。基于这些原因。深度学习应用领域应用对异构并行计算领域很关注

另外,云计算的兴起,数量繁多的云服务不再单纯地追求处理速度。而是在同一时候处理大量数据以及在可忍受的时间内提供服务方面有很多其它诉求。这些诉求与CPU对单个任务高速响应的特征并不一致,迫切须要微结构与CPU不同的加速设备协助完毕,在这方面。异构并行计算天然支持不同硬件资源,充分发挥不同硬件的特点,有着很巨大的优势。

异构并行计算作为当前性能提升。需求满足的重要法宝之中的一个,可以想见在对于时延、性能、功耗都有着很严格或者说苛刻的要求的通信领域,或者讲究用户体验的终端领域都有很重要的地位。

HPC高性能计算知识: 异构并行计算的更多相关文章

  1. HPC —— 高性能计算

    CUDA,目前只有 NVIDIA 支持: OpenCL,CUDA Tesla 卡很贵: 1. 术语及概念 SMP:"对称多处理"(Symmetrical Multi-Process ...

  2. OpenGL的学习资源

    OpenGL是3D图形接口工业标准,使用上非常简单,所有API不过上百个函数,但理解OpenGL就没那么简单,本文总结OpenGL的学习资源,包括官方资料.网上教程.示例程序等. Wikipedia: ...

  3. 这些年学过的FPGA

    这些年学过的FPGA 最近看了老罗的鄙视链是怎样炼成的,联想到FPGA.从2011年底开始接触FPGA到现在已经快接近4个年头了,这四年见证了Altera-FPGA的发展,使用的cyclone系列的芯 ...

  4. Linux系统——Nginx反向代理与负载均衡

    集群集群是指一组(若干个)相互独立的计算机,利用高速通信网路组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运用各自服务的独立服务器.这些服务器之间可以彼此通信,协同向用户提供 ...

  5. [转帖]双剑合璧:CPU+GPU异构计算完全解析

    引用自:http://tech.sina.com.cn/mobile/n/2011-06-20/18371792199.shtml 这篇文章写的深入浅出,把异构计算的思想和行业趋势描述的非常清楚,难得 ...

  6. LVS-负载均衡

    LVS: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.章 ...

  7. MapReduce剖析笔记之一:从WordCount理解MapReduce的几个阶段

    WordCount是一个入门的MapReduce程序(从src\examples\org\apache\hadoop\examples粘贴过来的): package org.apache.hadoop ...

  8. HADOOP HDFS的设计

    Hadoop提供的对其HDFS上的数据的处理方式,有以下几种, 1 批处理,mapreduce 2 实时处理:apache storm, spark streaming , ibm streams 3 ...

  9. Spark源码分析 之 Driver和Excutor是怎么跑起来的?(2.2.0版本)

    今天抽空回顾了一下Spark相关的源码,本来想要了解一下Block的管理机制,但是看着看着就回到了SparkContext的创建与使用.正好之前没有正式的整理过这部分的内容,这次就顺带着回顾一下. S ...

随机推荐

  1. 关于vc工程包含多个lib库老是提示无法打开问题

    在一个VC项目中,我要包含五个lib库,我在连接器->常规->附加库目录中输入了正确的库包含路径,然后再连接器->输入->附加依赖项中输入:ws2_32.lib;wsock32 ...

  2. Java枚举的小用法

    package com.lxc.wmb; public enum TestEnum { Success("200","成功!"), Faild("50 ...

  3. 美秒快报 移动端API接口后台制作总结

    1.创建方法时,不要用index这类的不易显示该方法功能的单词,尽量使用功能的缩写 例如: public function xssc(){} 2.尽量少用Request方法,多用input助手方法获取 ...

  4. WP8.1学习系列(第十七章)——交互UX之输入和反馈模式

    如果你将 Windows 应用商店应用设计为触摸交互,则可免费获取对触摸板.鼠标.笔和键盘交互的支持.你的用户可以从一种输入法切换到另一种,而不会丧失应用体验的感觉.将键盘插入平板电脑?没问题.你的应 ...

  5. java框架---->commonmark的使用(一)

    commonmark-java是一个Markdown 解析器,一个基于CommonMark规范解析和渲染Markdown文本的Java库.偶尔要回头看看,否则永远都在追寻,而不知道自己失去了什么. c ...

  6. Excel 2010 得到当天的日期/得到一年中的第几周/得到当前一周中的星期几

    =TODAY() ="第"&WEEKNUM(TODAY())&"周" =TEXT(TODAY(),"aaaa") Ctrl ...

  7. JiraRemoteUserAuth

    配置Jira7.x版本使用REMOTE_USER的HTTP Header方式登录: 前提是已经安装好了JIRA,并且前端使用apache或者nginx拦截对应的地址进行认证,认证之后访问对应的应用的时 ...

  8. jdbc(1)(三)DBCP、C3P0、Proxool 、 BoneCP开源连接池的简介

     简介          使用评价  项目主页  DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用 可以设置最大和最小连 ...

  9. 解决IE6下透明图片有背景的问题

    描述,透底的图片,在其他浏览器中效果: 在IE6中的效果:  1.改图片 IMG 换用gif格式的图片,但是这样的话图片效果不好: 想让IE6用gif的图片,其他浏览器用png图片,但是只有IE有这样 ...

  10. iOS - 沙盒机制(SandBox)和获取沙盒路径

    iOSAPP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URLScheme.沙盒里面的文件可以是照片.声音文件.文本 ...