2019年11月16日更
自从学deep learning以来,常常要跟GPU打交道,不过浅尝辄止,精力都放在代码上。曾经还跟着教程安装CUDA和CUDNN,但我对这两者具体的用途一无所知。所以我觉得有必要系统学一学啦,在b站跟了一套课程,记录一下学习笔记。
1. CPU和GPU的区别
CPU和GPU的结构从两者结构入手:
-
CPU(central processing unit): latency oriented design
- powerful ALU, 强大的运算单元,在很少的时钟周期中完成算术运算。
- large Cache,可以一次保存很多的数据到缓存中,以后使用时直接在缓存里取即可,无需找memory,因此有较低的时延。
- sophisticated Control,复杂度逻辑控制单元,通过分支预测/数据转发降低时延。
-
GPU(graphics processing unit): throughput oriented design
- energy efficient ALU
- small Cache, 提高吞吐量
- simple control, no branch prediction nor data forwarding
- a massive number of threads
引用知乎@虫子君的一段比喻:
GPU的工作大部分就是这样,计算量大,但没什么技术含量,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已。而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生。
GPU的策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。很多涉及到大量计算的问题基本都有这种特性,比如你说的破解密码,挖矿和很多图形学的计算。这些计算可以分解为多个相同的简单小任务,每个任务就可以分给一个小学生去做。
但还有一些任务涉及到“流”的问题。比如你去相亲,双方看着顺眼才能继续发展。总不能你这边还没见面呢,那边找人把证都给领了。这种比较复杂的问题都是CPU来做的。
或者我们用愚公移山的例子,GPU就像是愚公找了邻里子孙,许多人浩浩荡荡地挖山,人多就是力量;而CPU就像是直接借助先进的挖掘机,一次就铲起大量的土,但挖掘机可是一笔不小的开销呢。
所以说到这里,我们便可以发现,CPU和GPU的使命是不同的。之所以现在深度学习和图形学等领域需要用到GPU,是因为对图像的处理,其实就是对卷积核/像素的处理,本身就是可以并行的任务,用GPU可以极大地提高运算速度。
网友评论