一、计算核心增加

二者都由寄存器、控制器、逻辑单元构成,但比例很大不同,决定了CPU擅长指令处理,函数调用上;GPU在数据处理(算数运算/逻辑运算)强力很多。

NIVIDA基于Maxwell构架的GPU代号GM200的显示核心主要由4个图形处理集群(GPC ),16个流处理集群(SMM)和4个64bit显存控制器组成。每个流处理集群中包含了4个调度器(Warp),每个调度器又控制着32个逻辑计算核心(Core),Core是实现逻辑计算的基本单元。

GPU处理数据过程:

  1. 从CPU得到数据处理指令。
  2. 把大规模、无结构化的数据分解成很多独立的部分然后分配给各个流处理器集群。
  3. 每个流处理器集群再次把数据分解,分配给调度器所控制的多个计算核心同时执行数据的计算和处理。

如果一个核心的计算算作一个线程,那么在这颗GPU中就有32×4×16, 2048个线程同时进行数据的处理。尽管每个线程/Core的计算性能、效率与CPU中的Core相比低了不少,但是当所有线程都并行计算,那么累加之后它的计算能力又远远高于CPU。

二、内存结构不同

GPU另一个比较重要的优势就是他的内存结构。

  • 首先是共享内存。在NVIDIA披露的性能参数中,每个流处理器集群末端设有共享内存。相比于CPU每次操作数据都要返回内存再进行调用,GPU线程之间的数据通讯不需要访问全局内存,而在共享内存中就可以直接访问。这种设置的带来最大的好处就是线程间通讯速度的提高(速度:共享内存》全局内存)。
  • 再就是高速的全局内存(显存):目前GPU上普遍采用GDDR5的显存颗粒不仅具有更高的工作频率从而带来更快的数据读取/写入速度,而且具有更大的显存带宽。我们认为在数据处理中,速度往往最终取决于处理器从内存中提取数据以及流入和通过处理器要花多少时间。

而在传统的CPU构架中,尽管有高速缓存(Cache)的存在,但是由于其容量较小,大量的数据只能存放在内存(RAM)中。进行数据处理时,数据要从内存中读取然后在CPU中运算最后返回内存中。由于构架的原因,二者之间的通信带宽通常在60GB/s左右徘徊。与之相比,大显存带宽的GPU具有更大的数据吞吐量。在大规模深度神经网络的训练中,必然带来更大的优势。

数据推断:FPGA VS ASIC

CPU与GPU都是利用现有的成熟技术去提供了一种通用级的解决方法来满足深度学习的要求,是大公司对于深度学习的一种妥协,而并不是一种针对性的专业解决方案。

FPGA可编程逻辑阵列:它有一下几个的特点: 硬件层面上,其内部集成大量的数字电路基本门电路和存储器,用户可以通过烧入配置文件来定义这些它们之间的连线,从而达到定制电路的目的;逻辑层面上,它不依赖于冯诺依曼结构,一个计算得到的结果可以被直接馈送到下一个无需在主存储器临时保存。

ASIC特定应用集成电路:应特定应用要求和特定电子系统的需要而设计制造的集成电路,比FPGA快。

与GPU/CPU相比,FPGA与ASIC运行能效比更好(运算量/功耗),虽然前者有很多核心但是受限于冯诺依曼结构无法发挥并行计算特点,后者除了可以做到并行计算还能实现流水处理,大大减小了输入输出延时比。

在设计环节对比,FPGA只需用描述语言定义好内部逻辑结构即可实现硬件功能,ASIC设计制造要经过很多验证和物理设计,开发周期是是FPGA的两倍;但FPGA虽然灵活低成本,但是执行效率远比不上ASIC,FPGA的通用性必然导致亢余,其运算电路基于查找表,比如说FPGA内部有1000万个自定义逻辑部件,一个4输入的查找表单元要96个晶体管来支持,而在ASIC大概10个,这些亢余会体现在面积和功耗上。

GPU/CPU竞争一边倒,FPGA/ASIC相对缓和,FPGA被大量应用在大企业线上数据处理中心和军工单位,ASIC偏向消费电子

GPU适合搭建平台,FPGA/ASIC适合数据推段(95%工作量),摩尔定律的枯竭和数据的爆发增长产生矛盾,一种解决方法是通过硬件加速,采用专用协处理器提升性能

以深度学习为例,从芯片架构、计算性能、功耗、开发难度几个方面对芯片分析对比。深度学习又叫深层神经网络,是从人工神经网络发展而来

CPU

CPU作为通用处理器,兼顾计算和控制,70%晶体管用来构建Cache和流程控制器,用来处理复杂逻辑和提高指令效率,致使可以处理计算复杂度高,但性能一般

提高CPU性能三个方向:加核、提高频率、修改架构(增加计算单元个数)

GPU

GPU提供大量计算单元和高速内存,可同时并行处理很多像素,GPU把晶体管更多用于计算单元,而不像CPU,这样的设计是因为并行计算时每个数据单元执行相同程序,不需要繁琐流程控制及大Cache容量,而更需高计算能力。GPU中一个逻辑控制单元对应多个计算单元,要计算单元充分并行逻辑控制单元必然不能太复杂,例如太多if...else...分支无法提高并行度

FPGA

FPGA的硬件语言描述的逻辑可以直接被编译为晶体管电路的组合,直接用晶体管实现算法,没有通过指令系统翻译。FPGA的计算单元可以是DSP

ASIC

相比通用芯片,体积小、能耗低、计算效能高、效率高、出货量越大成本越低;相比FPGA,缺点算法固定,AI算法却处于爆发期;开发周期长在高可靠性场合如军工和工业ASIC需要更多时间,而FPGA直接买军工级FPGA就可以了。ASIC性能高于FPGA(5~10倍)量产后成本低于FPGA。

GPU、CPU、FPGA的更多相关文章

  1. Linux下查看内核、CPU、内存及各组件版本的命令和方法

    Linux下查看内核.CPU.内存及各组件版本的命令和方法 Linux查看内核版本: uname -a                        more /etc/*release       ...

  2. C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher

    原文:C#取硬盘.CPU.主板.网卡的序号 ManagementObjectSearcher private void button1_Click(object sender, EventArgs e ...

  3. Android系统信息(内存、cpu、sd卡、电量、版本)获取

    Android系统信息(内存.cpu.sd卡.电量.版本)获取 /*APPInfo.java*/ public class AppInfo { private String appLable; pri ...

  4. [Linux] - 服务器/VPS一键检测带宽、CPU、内存、负载、IO读写

    一.SuperBench.sh VPS/服务器一键检测带宽.CPU.内存.负载.IO读写等的脚本: wget -qO- https://raw.githubusercontent.com/oooldk ...

  5. Windows系统中CMD wmic查看硬盘、内存、CPU、BIOS、网卡等信息。(附带脚本)

    目录 Windows系统中CMD wmic查看硬盘.内存.CPU.BIOS.网卡等信息. 查看内存相关 查看内存主板数量(两条命令均可) 查看物理内存 查看逻辑内存 查看缓存 查看虚拟内存 查看网络相 ...

  6. 谈谈IC、ASIC、SoC、MPU、MCU、CPU、GPU、DSP、FPGA、CPLD

    IC (integrated circuit) 集成电路:微电路.微芯片.芯片:集成电路又分成:模拟集成电路(线性电路).数字集成电路.数/模混合集成电路: 模拟集成电路:产生.放大.处理各种模拟信号 ...

  7. iOS GPU、cpu、显示器的协作

    在 iOS 系统中,图像内容展示到屏幕的过程需要 CPU 和 GPU 共同参与. CPU 负责计算显示内容,比如视图的创建.布局计算.图片解码.文本绘制等. 随后 CPU 会将计算好的内容提交到 GP ...

  8. IIS7 性能(内存、CPU、当前请求耗时)监测

    程序上线了,但运行过程中如果发现很CPU.内存异常,某些操作耗时,如何在生产环境中监测并查明原因呢,有以下几种工具(方式): 1.NProfiler,这是一个商业软件,有试用周期,可以监测包括Winf ...

  9. linux服务器性能(网卡流量、CPU、内存、磁盘使用率)监控

    广义的网站的监控涵盖所有的非业务行为的数据采集与管理,包括数据分析师和产品设计师使用的网站用户行为日志.业务运行数据,以及供运维工程师和开发工程师使用的性能统计数据等. 本文主要是通过shell脚本来 ...

随机推荐

  1. day32基于tcp协议的远程执行命令

    客户端 from socket import *import structimport json client = socket(AF_INET, SOCK_STREAM)client.connect ...

  2. Python(算法)-时间复杂度和空间复杂度

    时间复杂度 算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,时间复杂度常用“O”表述,使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况 时间复杂度是用来估计算法 ...

  3. leetcode20:有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  4. Tomcat、TongWeb5.0、TongWeb6.0部署solr

    将solr,solr-4.7.2复制到某一路径下,比如F盘根目录. 1.tomcat中进行配置,配置如下: <Context docBase="F:/solr" reload ...

  5. gentoo emerge L10N

    gentoo 中安装软件的时候 emerge 提示 USE 中有 语言包可选安装,使用 L10N 来设置,设置方法是在USE中使用 l10n_,比如说 l10n_zh_CN 来安装中文支持包.

  6. 面试回顾——kafka

    关于消息队列的使用场景:https://www.cnblogs.com/linjiqin/p/5720865.html kafka: Topic Kafka将消息种子(Feed)分门别类 每一类的消息 ...

  7. java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager

    一个比较老的web项目,  IDEA 导入后不能用,  出现了各种问题, 但是, 别人用eclipse 导入就不会有问题,  我折腾了半天, 还是各种问题,  真是郁闷了.  哎, 承认很难配置吧, ...

  8. Python实践练习:强口令检测

    题目: 写一个函数,它使用正则表达式,确保传入的口令字符串是强口令.强口令的定义是:长度不少于 8 个字符,同时包含大写和小写字符,至少有一位数字.你可能需要用多个正则表达式来测试该字符串,以保证它的 ...

  9. 6. 添加messager.alert()确定按钮的回调函数,即点完确定按钮后触发的事件

    添加messager.alert()确定按钮的回调函数,即点完确定按钮后触发的事件: $.messager.alert('提示信息', "请联系管理员处理!", 'info', f ...

  10. java 内部类注意点

    1.只有内部类可以是私有类,而常规类只可以具有包可见性,或公有可见性. 内部类访问权限修饰符可以为:public.protected.默认.private:(可以用哪些修饰符视具体内部类类型而定) 常 ...