五年经验的前端社招被问:CPU 和 GPU 有什么区别?

news2024/11/18 21:36:26

CPU 和 GPU 的设计目标和整体架构的区别分析,并在全文最后使用通俗的例子做比喻帮助理解。

首先来看 CPU 和 GPU 的百科解释:

  • CPU(Central ProcessingUnit,中央处理器):功能主要是解释计算机指令以及处理计算机软件中的数据

    图 1-1 CPU 示意图

  • GPU(Graphics ProcessingUnit,图形处理器;又称显示核心、显卡、视觉处理器、显示芯片或绘图芯片):GPU 不同于传统的 CPU,如Intel i5 或 i7 处理器,其内核数量较少,专为通用计算而设计。相反,GPU是一种特殊类型的处理器,具有数百或数千个内核,经过优化,可并行运行大量计算。虽然 GPU 在游戏中以 3D 渲染而闻名,但它们对运行分析、深度学习和机器学习算法尤其有用。GPU 允许某些计算比传统 CPU 上运行相同的计算速度快 10 倍至 100 倍。

    图 1- 2 GeForce 6600GT(NV43)GPU 图片

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

  • CPU 需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得 CPU 的内部结构异常复杂

  • 而 GPU 面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境

于是 CPU 和 GPU 就呈现出非常不同的架构(如下图 1-3 所示,图片来源 Nvidia),其中 GPU 部分的绿色是计算单元(ALU),橙红色是存储单元(Cache),橙黄色是控制单元(Control),DRAM 代表内存:

图 1-3 CPU 和 GPU 的架构

由上图 1-3 可以看出:GPU 采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了 Cache。而 CPU 不仅被 Cache 占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是 CPU 很小的一部分。

由此我们引出 CPU 和 GPU 的设计目标:

1)CPU 是基于低延迟(Low Latency)的设计,内核数量较少

  • Powerful ALU(强大的算术运算单元):它可以在很少的时钟周期内完成算术计算;

  • Large Caches(大的缓存):将部分数据保存在缓存中,使得长延迟的内存访问转换称短延迟的缓存访问;

  • Sophisticated Control(复杂的逻辑控制单元):当程序含有多个分支的时候,它通过提供分支预测的能力来降低分支延时;并且,当一些指令依赖前面的指令结果时,它通过提供尽可能快的数据转发的能力来减少数据延迟。

2)GPU 是基于大吞吐量(Big Throughput)的设计,内核数量较多

  • Small Caches(小的缓存):GPU 中缓存的目的不是保存后面需要访问的数据的,这点和 CPU 不同,而是为 Thread 提供服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问内存。但是由于需要访问内存,自然会带来延时的问题;

    批量读取/访问,一个非常常见的提升吞吐量的设计,比如 Kafka 中就用到了类似思想

  • Simple Control(简单的逻辑控制单元):把多个的访问合并成少的访问;

  • Energy efficient ALUs(大量的算术运算单元):如上所述,GPU 虽然有内存延时,却有非常多的 ALU 并支持非常多的 Thread,因此,可以充分利用 ALU 尽可能多地分配线程从而达到非常大的吞吐量。

总结来说,作为强大的执行引擎,CPU 将它数量相对较少的内核集中用于处理单个任务,并快速将其完成。这使它尤其适合用于处理逻辑控制、串行计算、数据库运行等类型的工作。

相比之下,GPU 由数百个内核组成,可以同时处理数千个线程,所以与 CPU 擅长、串行的运算和通用类型数据运算不同,GPU 擅长的是大规模并发计算,将复杂的问题分解成数千或数百万个独立的任务,并一次性解决它们,比如图像处理任务,包括纹理、灯光和形状渲染等子任务都必须同时完成,以保持图像在屏幕上快速呈现,除此之外,GPU 还被大量应用于深度学习、密码破解等任务中。

表 1.1 CPU 和 GPU 的区别

CPU

GPU

Several cores

Many cores

Low latency

High throughput

Good for serial processing

Good for parallel processing

Can do a handful of operations at once

Can do thousands of operations at once

下面用一个通俗的例子来做个比喻:

注意只是比喻,可能不会太恰当,主要是帮助理解

假设我们需要做一道鸡兔同笼的小学奥数题(来源 1500 年前的《孙子算经》):

  • 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?

计算题目,理解题目并且整理出解题的步骤以及解法,这是 CPU 干的事情,于是 CPU 给出了类似下面的二元一次方程:

解题的过程需要用到的众多计算,则需要一帮不需要很高逻辑理解力的计算者完成,他们只需要负责其中很简单但是数量又很大的简单运算就行了,最后他们把各自运算的结果交出来给 CPU 整理,那么这群计算者就是 GPU。

简单来说就是:

  • CPU 力气大啥事都能干,还要协调手下各类小弟;

  • GPU 就是 CPU 的其中一个小弟,老大分配给给他处理图形或者并行计算等任务,这方面处理简单,但是量大,老大虽然能处理,可是精力有限(指 CPU 内核数量较少),所以不如交给小弟处理了,小弟精力旺盛(指 GPU 拥有大量内核),而且专门干这行,非常有经验,干起活儿来贼快。
     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工作流Activiti7】2、Activiti7 与 Spring Boot 及 Spring Security 整合

1. 前言 其实,选择用Activiti7没别的原因,就是因为穷。但凡是有钱,谁还用开源版的啊,当然是用商业版啦。国外的工作流引擎没有考虑中国的实际情况,很多像回退、委派、撤销等等功能都没有,所以最省事的还是…

若依前后端分离框架去掉首页 登录后跳转至动态路由的第一个路由

若依前后端分离框架去掉首页 登录后跳转至动态路由的第一个路由若依框架VUE前端界面,登录后默认跳转至动态路由第一路由(第一个子菜单)一、登录后跳转第一路由界面二、设置路由的首页路径,方便后续的获取三、点击若依的logo跳转的…

字符串函数(4)--strtok函数和strerror函数

1.strtok函数 — 分割字符串函数 2.strerror函数 — 错误报告函数 1.strstok函数的用法 char* strtok(char* str, const char* delimiters);直接看函数的声明: 参数1:要切割的地址,参数2:切割时的标记物 注意:strt…

单链表的python实现

首先说下线性表,线性表是一种最基本,最简单的数据结构,通俗点讲就是一维的存储数据的结构。 线性表分为顺序表和链接表: 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或…

Nginx安装配置及vue项目部署【Centos7】

Background 网上好多都是源码安装,各种编译环境安装配置,感觉太麻烦了,这里直接下载一个rpm包就行了,离线安装也方便。 1、nginx rpm包下载 选择你要使用的版本下载。 nginx官方下载地址:http://nginx.org/packages/ce…

垃圾回收机制

1.什么场景下该使用什么垃圾回收策略? (1).对内存要求苛刻的场景 想办法提高对象的回收效率,尽可能的多回收一些对象,腾出更多内存 (2).在CPU使用率较高的情况下 降低高并发时垃圾回收频率,让CPU更多地去执行业务而不是垃圾回收 …

一文搞懂 Redis 架构演化之路

现如今 Redis 变得越来越流行,几乎在很多项目中都要被用到,不知道你在使用 Redis 时,有没有思考过,Redis 到底是如何稳定、高性能地提供服务的? 我使用 Redis 的场景很简单,只使用单机版 Redis 会有什么问…

vite + react +typescript 环境搭建,小白入门级教程

目录前言1. 使用 vite 创建 react 项目1. npm / yarn 命令初始化2. 输入项目名称3. 选择框架4. 选择 Js / Ts5. 项目创建完成6. 启动项目2. 规范项目目录3. 使用 react-router-dom 路由1. 使用 npm / yarn 命令下载2. 更改 react-router-dom 版本1. 通过 npm 命令降低版本2. 手…

rabbitmq基础5——集群节点类型、集群节点基础运维,集群管理命令,API接口工具

文章目录一、集群节点类型1.1 内存节点1.2 磁盘节点二、集群基础运维2.1 剔除单个节点2.1.1 集群正常踢出正常节点2.1.2 服务器异常宕机踢出节点2.1.3 集群正常重置并踢出节点2.2 集群节点版本升级2.3 集群某单节点故障恢复2.3.1 机器硬件故障2.3.2 机器掉电2.3.3 网络故障2.3.…

Android ShapeableImageView使用

ShapeableImageView使用使用 导包 implementation com.google.android.material:material:1.4.0属性 属性描述shapeAppearance样式shapeAppearanceOverlay样式,叠加层strokeWidth描边宽度strokeColor描边颜色 样式 名称属性值描述cornerFamilyrounded圆角cut裁剪…

学习记录-mybatis+vue+elementUi实现品牌查询

和以往不同的是,这一次使用了vue和axios来接收后端传过来的参数,并且新建了impl文件来继承service层的接口。该过程实现一共分为4步骤 步骤一 ①mapper mapper 写mapper接口 其实就是写SQL语句了,第一步就是写SQL。这里使用的是注解开发&…

程序员危机如何化解?

很多人认为程序员一定要干到管理层,才会有继续走下去的希望,而踏实做技术的程序员,只会面临淘汰。事实真是如此吗? △ 截图来源脉脉,如侵删 先不说结论,我们一起先看看网友们的看法: △ 截…

报表控件Stimulsoft v2023.1全新发布 | 附免费下载试用

Stimulsoft Ultimate 宣布发布新版本2023.1!在最新版本中添加了对Razor Pages的支持、新的数据监视器可视化工具、为PHP和Blazor平台更新了组件,欢迎下载试用! Stimulsoft Ultimate官方正版下载 Razor Pages 在 2023.1.1 版中,我们添加了对…

跨域问题以及解决跨域问题的vue-cli解决方案

跨域问题 写项目前要问后端,接口支持跨域吗? 支持就不会出现问题,不支持就需要解决跨域问题 1.如何判断一个浏览器的请求是否跨域? 在A地址(发起请求的页面地址)向B地址(要请求的目标页面地址)发起请求时&#xff…

【JavaEE】多线程(三)线程的状态

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaEE】 ✈️✈️本篇内容:线程的状态,线程安全问题! 🚀🚀代码存放仓库gitee:JavaEE初阶代码存放&a…

抗癌药物之多肽药物偶联物技术(PDC)介绍

长期以来,心血管疾病是全球中年人死亡的主要原因。这种情况最近在高收入国家发生了变化,现在癌症导致的死亡人数是心血管疾病的两倍。2018 年,癌症导致全球 960 万人死亡,1810 万新病例被诊断出来。女性最常发生的癌症是乳腺癌&am…

12Python继承与多态

继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中继承 实现代码的重用,相同的代码不需要重复的编写多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 1继承的概念、语法和特点 继承的概…

奖项快报 | ALVA Systems 上榜 《2022 高成长企业 TOP100》!

近日,《2022 高成长企业 TOP 100》榜单发布,凭借卓越的创新能力与在工业 AR 领域的赋能价值,ALVA Systems 在2022年度高成长企业TOP100大赛活动中脱颖而出,成功入选榜单。 *ALVA Systems 入选榜单 创新驱动,赋能数字经…

【ARM -- stm32 汇编代码点亮LED灯】

ARM -- stm32 汇编代码点亮LED灯实现过程查询开发手册分析RCC章节分析GPIO章节编写代码实现过程 查询开发手册 分析RCC章节 一、确定RCC基地址 二、分析RCC_MP_AHB4ENSETR寄存器 1、RCC_MP_AHB4ENSETR寄存器的功能是使能GPIO组相关控制器; 2、RCC_MP_AHB4ENSET…

07第四章:01_常用注解

常用注解 1、Table 作用:建立实体类和数据库表之间的对应关系。 默认规则:实体类类名首字母小写作为表名,如 Employee -> employee 表 用法:在 Table 注解的 name 属性中指定目标数据库的表名; 案例&#xff1…