首页 > 其他分享 >CPU(中央处理器)和GPU(图像处理器)的区别

CPU(中央处理器)和GPU(图像处理器)的区别

时间:2024-07-24 10:21:01浏览次数:12  
标签:训练 神经网络 处理器 显卡 GPU 中央处理器 CPU

CPU(中央处理器)和GPU(图像处理器)的区别

GPU和CPU是什么?

CPU:中央处理器(英文Central Processing Unit)是一台计算机的运算核心和控制核心。CPU、内部存储器和输入/输出设备是电子计算机三大核心部件。其功能主要是解释计算机指令以及处理计算机软件中的数据。


CPU

GPU:英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。


GPU


显卡

GPU(Graphics Processing Unit,图形处理器)又被称作显示核心、视觉处理器、显示芯片,是一种专为并行处理而设计的微型处理器,非常擅长处理大量简单任务,包括图形和视频渲染。GPU能应用在台式机、笔记本电脑、工作站、游戏机、嵌入式设备、数据中心等各种需要渲染图形或高性能计算的场景。

在生活中,我们普遍把GPU叫成显卡。不过事实上,GPU和显卡在术语上有细微差别,GPU指的是负责处理各种任务的那颗芯片,显卡指的是把GPU芯片、显存、接口等集合在一起的那张板卡。

GPU根据接入系统的方式分为集成型GPU(Integrated GPU,iGPU)和离散型GPU(Discrete GPU ,dGPU)两种,前者就是我们日常所说的集成显卡/核芯显卡,后者就是我们日常所说的独立显卡,两种类型GPU均有各自的特点和使用场景。

集成型GPU中,GPU被嵌在CPU旁边,且无单独的内存组用于图形/视频,会与CPU共享系统内存。由于集成型GPU内置于处理器中,通常功耗更低,产生的热量更少,从而延长了电池续航时间。

离散型GPU则完全以独立板卡出现,通常被连接在PCI高速插槽内,就像主板包含CPU一样。离散型GPU除包含GPU芯片以外,还包括允许GPU运行并连接到系统其余部分所需的大量组件。离散型GPU有自己的专用内存,同时也拥有自己的内存源和电源,因此其性能比集成型GPU更高。但由于与处理器芯片分离,因此会消耗更多功率并产生大量热量。

从专用到通用再到融合

现代的GPU拥有两大功能,一是充当强大的图形引擎,二是用作高度并行的可编程处理器,处理各种神经网络或机器学习任务。

图形计算是GPU的拿手绝活。当我们拖动鼠标时,GPU将需要显示的图形内容计算后呈现在屏幕上;当我们打开播放器观看电影时,GPU将压缩后的视频信息解码为原始数据;当我们玩游戏时,GPU将游戏画面计算并生成出来。轻点鼠标的背后,是复杂的处理过程,包括顶点读入、顶点渲染、图元装配、光栅化、像素渲染等。

图形GPU广泛应用于游戏、图像处理和加密货币等场景,关注图像学的帧数、渲染逼真度、真实场景映射度等参数指标。

GPU与CPU有什么区别?

CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。主要区别如下。

CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。

于是CPU和GPU就呈现出非常不同的架构。

其中上图中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。
GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。

CPU 基于低延时的设计:

CPU有强大的ALU(算术运算单元),它可以在很少的时钟周期内完成算术计算。

当今的CPU可以达到64bit 双精度。执行双精度浮点源算的加法和乘法只需要1~3个时钟周期。CPU的时钟周期的频率是非常高的,达到1.532~3gigahertz(千兆HZ, 10的9次方).大的缓存也可以降低延时。保存很多的数据放在缓存里面,当需要访问的这些数据,只要在之前访问过的,如今直接在缓存里面取即可。

复杂的逻辑控制单元。当程序含有多个分支的时候,它通过提供分支预测的能力来降低延时。数据转发。 当一些指令依赖前面的指令结果时,数据转发的逻辑控制单元决定这些指令在pipeline中的位置并且尽可能快的转发一个指令的结果给后续的指令。这些动作需要很多的对比电路单元和转发电路单元。

GPU是基于大的吞吐量设计。

GPU的特点是有很多的ALU和很少的cache. 缓存的目的不是保存后面需要访问的数据的,这点和CPU不同,而是为thread提高服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram(因为需要访问的数据保存在dram中而不是cache里面),获取数据后cache会转发这个数据给对应的线程,这个时候是数据转发的角色。但是由于需要访问dram,自然会带来延时的问题。

GPU的控制单元(左边黄色区域块)可以把多个的访问合并成少的访问。

GPU的虽然有dram延时,却有非常多的ALU和非常多的thread. 为了平衡内存延时的问题,我们可以充分利用多的ALU的特性达到一个非常大的吞吐量的效果。尽可能多的分配多的Threads.通常来看GPU ALU会有非常重的pipeline就是因为这样。所以与CPU擅长逻辑控制,串行的运算。和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。

上面说的有点专业化,接下来就简单说一下,他们两个到底差在哪?

CPU(Central Processing Unit)是电脑最主要的部件,他的主要功能是解释计算机指令以及处理计算机软件中的数据,说白了就是做指挥工作,统筹各方面。CPU相当于整个电脑的心脏,而GPU相当于显卡的心脏。

普通的处理器CPU差不多双核心四线程,目前市面上最高端的桌面处理器i9-7980XE(RMB1.5万)不过十八核心三十六线程。GPU则不同,就拿普通的2000块的游戏显卡RX 480来说,RX480的GPU芯片计算单元划分为36个CU计算核心,每个CU核心又包含了64个流处理器计算核心,所以总共就是36X64=2304个流处理器计算核心。

CPU相对于GPU就像老教授和小学生,拿i9-7980XE和RX480举个例子,出一套小学数学试卷,老教授刚做一道题,两千多名学生一人一题早就交卷子了。如果套高数卷子,老教授做完学生们一道也不会做。

训练神经网络GPU优于CPU

很多个简单的工作,交给GPU显然更适合。

其实在早期,神经网络都是用CPU训练的。即使现在,像TensorFlow这样的流行框架也支持在CPU上运行。那么,既然CPU和GPU都可以训练神经网络,为什么一般用GPU训练神经网络?很简单,因为GPU比CPU快很多。比如,Victor Dibia(IBM研究院Research Staff Member)基于Tensorflow框架训练了一个实时检测手部的网络。

训练这样一个神经网络要花多久?CPU上大约要12天,而GPU上则是5小时。(我们这里不讨论具体的型号,关键是两者的比例。CPU和GPU的差距太大了)。

而且,实际上这个神经网络的训练时间已经通过迁移学习缩短了。迁移学习指直接拿训练好的图像分类的模型来用,只是重新训练最后一层或几层网络以检测手部,所以能快很多。那如果从头开始训练的话(有的时候没有现成的模型可供迁移),可能要几周甚至几个月。这还是GPU的情况。

按照上面的比例,换算成CPU,那基本上就太慢太慢,慢到不现实的程度。GPU之所以比CPU快好多,主要是因为,从运算的角度来看,神经网络主要是由大量的浮点矩阵构成的。而现代的神经网络,可能有几千到几百万的浮点矩阵(所谓深度学习),因此需要很大的内存带宽来访问这些海量的浮点矩阵。而GPU的内存带宽比CPU高很多。比如Intel的Core i9-7980XE内存带宽约为57GB/s,而NVIDIA的Tesla P100带宽高达900GB/s。

使用神经网络训练,一个最大的问题就是训练速度的问题,特别是对于深度学习而言,过多的参数会消耗很多的时间,在神经网络训练过程中,运算最多的是关于矩阵的运算,这个时候就正好用到了GPU,GPU本来是用来处理图形的,但是因为其处理矩阵计算的高效性就运用到了深度学习之中。

标签:训练,神经网络,处理器,显卡,GPU,中央处理器,CPU
From: https://www.cnblogs.com/bujidao1128/p/18320239

相关文章

  • 如何在tensorflow中使用gpu 1而不是gpu 0?
    我安装了TensorFlow,我的笔记本电脑有2个GPU,GPU0(集成显卡)和GPU1(专用显卡)。当我想使用TensorFlow时,我的可用GPU是1并且是GPU0如何将GPU0更改为GPU0?我的物理设备只有GPU0,没有GPU0你遇到的问题很有趣!看起来你的系统把集成显卡识别为了GPU1,而把独立显卡识别为了......
  • 初始化 pytorch RPC 时 getBar1SizeOfGpu 出现运行时错误
    我在系统上使用PyTorch和RPC后端时遇到运行时错误。错误信息如下:谁能告诉我为什么会出现这个问题以及如何解决它?谢谢。Traceback(mostrecentcalllast):File"/work/personal_workspace/torchrpc_test.py",line20,in<module>rpc.init_rpc(name=f"worker_{......
  • 并行 GPU 中的 Pytorch 推理
    我有一个经过训练的模型和4个GPU。我有一个数据集,我想将其分割为4个(并在每个GPU上使用相同的批量大小进行处理),并且基本上将我从每个GPU获得的结果相加。一般来说,我对并行处理很陌生,我对torch.multiprocessing等的谷歌搜索没有帮助。我的问题的一个最小示例如下:我......
  • Linux--进程绑定NUMA节点或CPU核心
    对于CPU和NUMA架构的介绍本文不再做叙述,感兴趣的可自行查看:Linux--CPU简述,Linux--内存管理浅谈。 1、进程绑定NUMA节点或cpu核心的意义NUMA架构将内存和cpu分散在不同的NUMA节点上,每个节点都有自己的本地内存和cpu处理器,将进程绑定到特定的NUMA节点或cpu上,可以让进程直接......
  • 【Remotery】 Remotery-轻量级的远程实时 CPU/GPU 分析器设计浅析
    1.Remotery简介Remotery是一个轻量级的远程实时CPU/GPU分析器,主要用于监控CPU和GPU上多线程的活动。它提供了一个C文件,可以很容易的集成到项目中,并配置一个实时监控的Web界面,可以通过远程观察和分析程序的性能,适用于监控游戏的实时运行性能和分析移动端应用的性能场景。2.Remot......
  • arthas cpu 接近100%排查
    案例1:使用thread查看各threadcpu使用率,可以看到CPU使用率最高的有2个线程,以线程ID为19的为例子:输入thread 19查看线程19的堆栈信息可以看到是(CpuController.java:78行导致的问题jad反编译已加载的类的源码查找问题:jad--source-onlycom.codex.terry.controller.Cp......
  • 在K8S中,Pod占用内存和cpu较高,该如何解决?
    在Kubernetes(K8s)中,当Pod占用内存和CPU较高时,可以通过一系列步骤来诊断并解决问题,以确保集群的稳定性和性能。以下是详细的解决步骤:1.监控和诊断使用kubectl命令:使用kubectltoppods命令查看集群中各个Pod的CPU和内存占用情况,找出占用资源高的Pod。使用kubectldescribepod......
  • 如何在 8 个 GPU 上并行化 Transformer 模型进行机器翻译?
    我正在尝试使用变压器模型以几乎与原始文章相同的方式执行机器翻译。虽然该模型运行得相当好,但它需要更多的计算资源。为了解决这个问题,我在一台具有8个GPU处理器的计算机上运行了该模型,但我缺乏这方面的经验。我尝试对并行化进行必要的调整:transformer=nn.DataParallel......
  • 3、CPU品牌分类介绍(AMD) - 计算机硬件品牌系列文章
    AMD是一家美国半导体跨国公司,‌成立于1969年,‌总部位于美国加利福尼亚州圣克拉拉市。‌AMD致力于开发设计集成电路产品,‌主要产品包括中央处理器(‌CPU)‌、‌图形处理器(‌GPU)‌、‌主板芯片组等,‌为游戏、‌人工智能、‌云计算等领域提供计算解决方案。‌AMD的产品和技术在全球......
  • GPU OpenGL 版本检测 GLview
    官网链接https://www.geeks3d.com/dl/show/10097也可在此下载https://download.csdn.net/download/qq_51355375/89559913下载后直接默认安装即可,打开安装目录,双击运行openglex.exe即可......