什么是GPU?跟CPU有什么区别?终于有人讲明白了

文章讲述了CPU和GPU的基本概念,强调了在深度学习尤其是神经网络训练中,GPU由于其并行处理和高内存带宽的优势,比CPU具有显著的速度优势。文章通过实例说明了GPU在处理大规模矩阵运算时的效率提升。

目录

一、CPU和GPU是什么?

1.CPU

2.GPU

​二、GPU与CPU有什么区别?

三、训练神经网络GPU优于CPU


一、CPU和GPU是什么?

1.CPU

在学习深度学习时,电脑如果没有GPU,训练的时候需要用的是CPU,那么两者之间在训练数据集有什么差别?当你在一次训练过程中,着重看一下训练过程,就会发现,训练时间是真的差距大。

这两个具体有什么差别呢?

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

2.GPU

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


二、GPU与CPU有什么区别?

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

CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得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本来是用来处理图形的,但是因为其处理矩阵计算的高效性就运用到了深度学习之中。

<think>我们正在讨论Unity高级开发技能的学习路径,目标是成为顶尖游戏开发者。根据引用[^1],Unity Learn是官方学习平台,内容权威且更新及时,适合所有层次的学员。引用[^2]提供了多个资源网站,包括游戏开发资源大全Unity学习网址整理。引用[^3]强调了MR/AR开发的重要性,引用[^4]则提到了万人同屏等高级技术。 作为顶尖游戏开发者,需要掌握以下高级技能: 1. **高级编程技术**:包括设计模式、算法优化、多线程编程等。 2. **图形学与Shader编程**:深入理解渲染管线,编写自定义Shader(如使用ShaderLabHLSL/Cg)。 3. **性能优化**:针对CPUGPU、内存进行优化,掌握批处理、LOD、遮挡剔除等技术。 4. **网络与多人游戏开发**:实现同步技术、服务器架构、防作弊机制等。 5. **跨平台开发与发布**:熟悉不同平台(PC、移动、主机)的适配优化。 6. **扩展引擎功能**:开发自定义编辑器工具、插件,甚至修改引擎源码(如使用Unity的源码访问权限)。 7. **特定领域技术**:如MR/AR开发(引用[^3])、大规模场景渲染(如万人同屏技术,引用[^4])、物理模拟、AI等。 **学习路径建议**: 1. **巩固基础**:通过Unity Learn(引用[^1])完成高级编程渲染相关的教程。 2. **深入学习图形学**:学习Shader编写,参考《Unity Shader入门精要》等资料,并实践项目。 3. **性能优化实战**:分析性能瓶颈,使用Profiler工具,优化项目(如引用[^4]提到的万人同屏技术)。 4. **网络编程**:学习UNet或第三方解决方案(如Photon、Mirror),开发多人游戏demo。 5. **参与开源社区**:通过引用[^2]提供的资源网站(如游戏开发大全导航)获取工具开源项目。 6. **专精领域**:选择方向(如MR/AR),利用引用[^3]提到的资源进行专项学习。 7. **持续跟进新技术**:关注Unity官方博客、GDC演等,保持技术敏感度。 **示例:万人同屏优化技术(引用[^4])** 关键技术点: - **实例化渲染(Instancing)**:减少Draw Call。 - **LOD(多层次细节)**:根据距离简化模型。 - **空间分割算法**:如四叉树/八叉树管理场景对象。 - **GPU计算**:使用Compute Shader处理大量对象逻辑。 - **动画优化**:使用GPU动画或简化的动画系统。 ```csharp // 伪代码:使用Compute Shader处理万人位置更新 void UpdatePositionsWithComputeShader(ComputeShader shader, ComputeBuffer buffer) { int kernel = shader.FindKernel("CSUpdatePositions"); shader.SetBuffer(kernel, "positions", buffer); shader.Dispatch(kernel, Mathf.CeilToInt(agentCount / 64.0f), 1, 1); } ``` §§相关问题§§ 1. Unity中如何实现大规模人群渲染的优化? 2. 学习Shader编程有哪些推荐资源? 3. 如何设计一个可扩展的多人游戏架构? 4. 在移动平台上进行Unity性能优化的关键点是什么?</think>### Unity高级开发技能学习路径:成为顶尖游戏开发者的关键技术 #### 一、核心进阶技能体系 1. **图形编程与渲染优化** - **Shader开发**:掌握HLSL/Cg语言,实现自定义光照模型(如PBR)、后处理效果(SSAO, HDR) - **高级渲染技术**: - GPU实例化:$ \text{DrawCall} = \frac{\text{对象数}}{\text{实例化分组}} $ - 动态批处理/LOD系统:$ \text{渲染开销} \propto \frac{1}{\text{LOD层级}} $ - 参考案例:万人同屏技术需结合空间分割算法(如八叉树)GPU计算着色器[^4] 2. **性能工程化** | 优化方向 | 关键技术 | 工具 | |---|---|----| | CPU | Jobs System/Burst编译器 | Unity Profiler | | GPU | SRP Batcher/VR优化 | RenderDoc | | 内存 | 对象池/资源卸载策略 | Memory Profiler | | 包体 | AssetBundle/纹理压缩 | Addressables系统 | 3. **系统架构设计** ```csharp // ECS架构示例(面向数据设计) public class MovementSystem : SystemBase { protected override void OnUpdate() { Entities.ForEach((ref Translation trans, in Velocity vel) => { trans.Value += vel.Value * Time.deltaTime; }).ScheduleParallel(); // 多线程执行 } } ``` 4. **跨平台开发** - **MR/AR核心能力**: - AR Foundation框架(平面检测/光照估计) - 空间锚点同步:$ \text{定位精度} < 0.5\text{cm} $ - 多平台适配策略:Shader变体管理/输入系统抽象[^3] #### 二、学习路径规划 1. **基础强化阶段(1-3月)** - 完成Unity Learn高级路径:**渲染管线**/**DOTS**认证课程[^1] - 实践项目:实现自定义URP渲染器 2. **专项突破阶段(3-6月)** - 图形学:学习《Real-Time Rendering》+ ShaderToy实战 - 性能优化:分析AAA项目帧数据(如《Genshin Impact》移动端) - 资源推荐: - [游戏开发大全导航](http://game2d.com/) - 开源项目库 - [Unity技术图谱](https://www.jindouyun.cn/document/industry/details/182752) - 100+进阶资源[^2] 3. **工程实践阶段(6-12月)** - 开发技术Demo: - 万人同屏战场模拟(ECS+Compute Shader) - MR空间协作应用(Photon网络同步) - 参与开源项目:Unity GitHub官方仓库(如Burst编译器) #### 三、顶尖开发者能力模型 $$ \text{技术深度} \times \text{工程思维} + \text{创新意识} = \text{顶尖开发者指数} $$ - **技术雷达**:实时跟踪GDC技术演/SIGGRAPH论文 - **软技能**:技术决策能力(如Shader复杂度评估:$ O(\text{指令数} \times \text{分辨率}) $) - **行业视野**:分析《原神》《永劫无间》等技术方案 > **关键建议**:每年完成1个**技术风险项目**(如:在Quest 3实现120FPS VR射击游戏),通过极限挑战突破能力边界[^3][^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值