【零基础】搞懂GPU为什么比CPU“快”
一、前言
近几年深度学习在各领域大显神威,而”GPU加速"也得到了越来越多的篇幅,似乎任何程序只要放到GPU上运行那速度就是杠杠的。GPU代替CPU计算已成了大势所趋?我先告诉你结论”那是不可能滴“,然后咱们再来说说”GPU为什么比CPU快“。
二、图形处理,GPU的源起
GPU是显卡的计算单元,就好比CPU是电脑的计算核心,有时我们直接就把GPU称为显卡。显而易见,GPU从诞生之初就是用来处理图像的。下面我们讲一个简单的例子来说明下为什么图像处理需要用到GPU,而CPU的缺点是什么。
我们讲一个画面”立体“,其实讲的是画面中对于光影的运用,下图就是一个简单的”圆“。
当我们给这个圆加上”光影“之后,它就变成了一个球。我们说球要比圆立体的多,这就是光影的作用。
光影的原理很简单,你需要想象一个远处的”光“,然后在画面上模拟出光照在物体上的明暗变化,计算机中这些明暗变化都是通过”计算“得到的。编程人员只需要输入光源的距离、亮度、被照体的位置,然后通过逐步计算、光影叠加就能得到图像中每一个像素应该显示什么颜色、什么亮度,一个立体画面也就跃然纸上了。
那么现在问题来了,假设屏幕分辨率为1920*1080,即2073600(207.36万)个像素,游戏中每个像素都需要根据光影参数来计算显示的颜色和明暗。假设一个常见的Inter I5 CPU主频为3.2GHz,即最多每秒可做32亿次运算。但这里的一次运算只是做了一次简单的二进制加减法或数据读取,一个像素的光影计算我们可以假设需要100次运算(关于CPU的运算原理可以看这篇文章https://www.mianbaoban.cn/blog/3887969-407226.html),即CPU一秒约处理3200万次像素运算,大概15张图片,用专业点的说法,这个游戏流畅度大概是每秒15帧的样子。
可见使用CPU全力进行图形运算是有点吃力的,更何况CPU还要处理很多键盘指令、游戏后台计算等等。是CPU还不够快吗?假设现在速度翻倍,即每秒64亿次运算似乎也是不够的。其实CPU面临的主要问题是,虽然每一次光影计算都非常简单,但经不住像素太多啦,还都得排队一个一个做。然后工程师们想到“其实任何一个像素的计算与其他像素的计算结果关系不大”,那为啥不多整几个计算核心“并行”计算呢,于是GPU就出现了。
一个典型的显卡GTX1060,主频是1.5GHz大概是Inter I5一半左右,但是它具备1280个计算核心。每个计算核心每秒可做15亿次运算,1280个核心每秒就是19200亿次运算,那一秒可以处理192亿次像素计算,大概925张图片,是CPU计算能力的61倍!但GPU的特性只能应用于图形计算这种可以并行的任务,若是做普通的串行任务其速度远远不如CPU。
三、核心越多越好?
通过前面的叙述我们都知道了GPU速度“快于”CPU的奥秘在于它有很多的“核”,那能不能这样,我们给CPU也装上1000多个核,那速度岂不是快到飞起?答案是“不得行”。由于制造工艺的原因,CPU内核越多其频率也就越低。其实很容易想到,同步10个人的动作和同步1000个人的动作其难度肯定是不一样的。其次,电脑中大部分的运算都是串行的,即下一个运算要等到上一个运算完毕才能继续,这时候单次运算的速度才是最重要的。
所以相当长时间以内,CPU+GPU的搭配才是最佳方案。
四、GPU与并行计算
深度学习与图形处理有一些相通的地方,它需要大量的数据来“训练”模型。比如一个猫图识别AI,你需要提供数以万计的猫图供其“学习”。而每一张猫图的学习又与其他猫图没有先后关系,即你可以同时并行100、1000张猫图的学习,所以GPU在深度学习领域大放异彩。
实际上GPU编程一直是近年来的热点,作为高效程序员又怎么能不了解一二呢?CUDA是NVIDIA推出的并行计算框架,它囊括了GPU并行计算中所有你需要的组件,只需要简单安装(当然你电脑得是N卡)就可以在C代码中使用它提供的接口进行GPU编程了,当然对于非从业人员来说了解下相关知识也是极好的。
现在关注公众号“零基础爱学习”回复“GPU”就能获得下面的资料:
1、GPU高性能编程CUDA实战(中英文版+实例源码)
2、GPGPU编程技术 从GLSL、CUDA到OpenCL
【零基础】搞懂GPU为什么比CPU“快”的更多相关文章
- 零基础读懂视频播放器控制原理——ffplay播放器源代码分析
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...
- 面试你能搞懂JVM了吗,快看看这20道JVM面试题
1.内存模型以及分区,需要详细到每个区放什么?2.堆里面的分区:Eden,survival (from+ to),老年代,各自的特点?3.对象创建方法,对象的内存分配,对象的访问定位?4.GC 的两种 ...
- salesforce零基础学习(一百二十)快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧
本篇参考: https://developer.salesforce.com/blogs/2022/01/preparing-your-components-for-the-removal-of-al ...
- 【零基础】一文读懂CPU(从二极管到超大规模集成电路)
一.前言 我们都知道芯片,也知道芯片技术在21世纪是最重要的技术之一,但很少有人能知道芯片技术的一些细节,如芯片是如何构造的.为什么它可以运行程序.芯片又是如何被设计制造出来的等等.本文就尝试从最底层 ...
- 【零基础】彻底搞懂51单片机各种型号(ATMEL系列)
零.前言 初学者开始学习51单片机时往往先是一愣,说好51单片机啊,咋个型号是AT89C52,这个S52又是咋回事?上学的时候大都懵懵懂懂就这么用着,但始终没整明白,所以今天我们就彻底搞明白这些“51 ...
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
- 零java基础搞定微信Server
自从打通了微信client到BLE设备端的通道.我的工作就转移到了server端了.微信的BlueDemoServer是以java编写,而本尊仅仅懂得嵌入式,对JavaWeb一窍不通. 本尊贵为IOT ...
- Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅
原文:Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅 在前几期中总结分享了Android的前世今生.Android 系统架构和应用组件那些事.带你一起来聊一聊Android开发 ...
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
随机推荐
- 【原型模式】--重写原型对象prototype的影响
//[原型模式]--重写原型对象prototype的影响 2014-12-12//定义构造函数function Person() { }//直接指定构造函数的原型为一个对象(为了简化逐个给原型添加成员 ...
- js的一些兼容融性问题
1.非行内样式获取 高级浏览器 getComputedStyle(obox.false)//获取所有属性 ie浏览器 box.currentStyle//获取所有属性 兼容写法 function ge ...
- SQL学习——SELECT INTO和INSERT INTO SELECT
原文链接 SELECT INTO 作用 SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中. SELECT INTO 语法 我们可以把所有的列都复制到新表中: SELECT ...
- 最简单的SAP云平台开发教程 - 如何开发UI5应用并运行在SAP云平台上
选择Services Catalog,根据关键字搜索到WebIDE服务,点击超链接打开WebIDE: 进入workspace,选择Git->Clone Repository: 从我的github ...
- Oracle面试题及答案整理
一下题目根据此表变换 1.表:table1(FId,Fclass,Fscore),用最高效最简单的SQL列出各班成绩最高的列表,显示班级,成绩两个字段. select stu_class, max(s ...
- 【Distributed】CDN
一.概述 1.1 Web前端优化 1.2 DNS域名解析过程 1.3 传统方式请求静态资源 二.CDN内容分发 2.1 什么是CDN 2.2 CDN内容分发原理 2.3 阿里云环境实战搭建CDN内容分 ...
- Redis长短链接的区别
本文介绍了phpredis中与redis建立连接的两种方式:connect(短连接)和pconnect(长连接)的区别. 问题背景: 项目采用LNMP架构,考虑到数据访问性能问题,因此使用redis来 ...
- 关于博主skywang123456文章——二叉堆(三)之 Java的实现的质疑
博客园博主skywang123456(以下简称s博主)是一个大牛级的人物,相信很多程序员都拜读过他的博客,我也不例外,并且受益匪浅.但是对于文章二叉堆(三)之 Java的实现我有一些疑惑,写在这里,供 ...
- Gym - 101981B Tournament (WQS二分+单调性优化dp)
题意:x轴上有n个人,让你放置m个集合点,使得每个人往离他最近的集合点走,所有人走的距离和最短. 把距离视为花费,设$dp[i][k]$表示前i个人分成k段的最小花费,则有递推式$dp[i][k]=m ...
- String字符串反转
new StringBuffer("abcde").reverse().toString(); 通过char数组进行转换 package com.test.reverse; pub ...