从CPU与GPU利用率,到GPU与CPU差别的思考
注:本版关于GPU的内容均是是经过实测数据提供,具有版权所有
简介: GPU与CPU貌似差别不大的两个东西,然而,从逻辑结构,到原理,到性能,到功能,再到在物理设备中扮演的角色来讲,压根就不是同一个东西,甚至可以说,完全不可以类比。
首先考虑GPU利用率:
因为要对GPU物理设备进行压力测试和功耗测试,那么就需要设定GPU利用率分别为25%,50%,75%,100%类似的参数,那么这样的利用率,又意味着什么东西的利用率呢?
为了了解GPU,那么先认识一下CPU利用率相关的内容。
CPU结构介绍
我们都知道,CPU是由运算器和控制器两部分组成。
运算器就是执行加减乘除运算的 与,或,非门,不管移交什么样的命令,到最后都是转换成了这样最朴素的运算操作。他所执行的所有命令,都是通过控制器,传送要执行命令的地址,从地址中取数据,
如下图,参考:http://blog.csdn.net/yang_yulei/article/details/22529437
CPU时钟周期和CPU利用率
这是整个CPU的处理指令过程,CPU还有一个始终周期,通常在几个时钟周期内,会完成这些操作,但遇到中断,等待,空载等情况发生的时候,其实时钟会进行空转,CPU的利用率,就是指,有多少时钟周期进行了指令执行,计算方式也是,从任务提交到任务当前执行时间,所使用了多少CPU的时钟进行任务计算,那CPU占用率就是指:
CPU占用率= 任务执行消耗的时钟周期/ 从任务提交到当前CPU总的时钟周期。
那么,单个CPU的占用率就是,对于该任务来讲,消耗的时钟周期占OS从该任务提交到目前时间时钟周期的比例。
GPU的利用率。
然而,对于GPU来讲,并不存在时钟周期这样的概念,那GPU的利用率从何而来。
GPU对任务的执行相当于cpu将任务移交给GPU,那GPU就对任务进行执行,不管任务量与任务规模,不具备调度或者其他的CPU特性具有的一些能力。打个比方,比如你有一个电灯,那打开或关闭,就只有两个状态,GPU对涉及的数据缓存在GPU内存中,并且对他们进行并行计算。
那它简单的并行计算能力是有了,然而,它并不具备CPU的很多高级特性,而这些高级特性决定了只有CPU是电脑的神经中枢,而GPU只能是一个计算元件而已。
可以进行一个简单的测试,就明白了GPU与CPU的能力差别有多大。
测试环境:
512G内存,20核,8张V100卡。centos7.3 系统,
GPU卡的单卡数据缓存空间为16G,我运行nbody程序,将计算数据量设定超过16G的时候,
所有的卡停止工作。 这就意味着,这些卡没有任何的数据缓存能力,调度能力,中断能力,等等。
为何会停止工作呢?因为对于CPU来讲,这些都是计算,重复的计算,并且数据量本身并没有达到16G,所以就全部调度到了GPU上面来执行,然而GPU会对数据迭代并缓存,会在几次迭代之后把缓存空间撑满,其实可以看到GPU并不是一次性达到超负荷的,而是停几秒,观测到GPU内存使用空间不断上升,而之后,GPU就停止工作了。
但CPU就不会出现,因为对于用户进程提供的内存空间,都是经过几级映射形成的虚拟空间,所以,几乎就是可以被用户进程认为是无限大的,可以随时进行切换,随时调度执行,让用户感知不到下层的一些变化。
因此,在简单的1+1计算方面,GPU通过几千个具有简单计算能力的核心,实现了许多基本逻辑的并行能力,而对于CPU这个大神,他就全身心的处理复杂的逻辑。打个比方,如果CPU是个教授,不仅会加减乘除,还会解方程,还可以积分微分,还会矩阵迭代等,然而CPU会处理复杂任务能力强,但成本高啊,雇佣一个教授总是处理并行计算中的1+1多不划算啊,把很多复杂的任务都分开来进行,有很多是并行进行1+1运算的,那就不如搞几十个小学生来计算1+1. 现在V00,等都向通用计算能力转型,也可以看到下学生也在向中学生发展。但是它本身的架构决定了它的应用场景,也处理复杂任务的限制。
下图是关于GPU卡不同型号对应不同的参数整理的表格。
GPU卡型号 | CUDA核 | GPU缓存(GB) | 性能 SP(TFLOPS) | 功耗W |
---|---|---|---|---|
K80 | 4992 | 24 | 5.6 | 250 |
K40 | 2880 | 12 | 4.29 | 235 |
M40 | 3072 | 12、24 | 7 | 250 |
M4 | 1024 | 4 | 2.2 | 50-75 |
M60 | 4096 | 16 | 9.7 | 225-300 |
P100 | 3584 | 16 | 9.3 | 250 |
P40 | 3840 | 24 | 12 | 250 |
P4 | 2560 | 8 | 5.5 | 50-75 |
V100 | 5120 | 16 | 14 | 250 |
上图可知,P100和V100在堆叠数千计的核的时候,功耗也上去了,正常情况下,一台服务器的功率不超过500W,其实500W已经属于很高了,250W是个什么概念呢,这么说吧,一台机器配有8张V100卡,那么整台机器全部卡在运行的时候,功耗数据就会达到3000W以上。3KW,兄弟,这可不是闹着玩的,就是这样一台机器,耗电达到了3KW,基本上供电都是很难满足的。
这也是P100向V100发展的时候,核心数量不再无限制的增多了,而转向tensor核的研发和应用。
其实想想看,nvidia做的这样一整套系统提供了这么高的计算能力,研发出来这么好的东西,最后P100和V100的何去何从,不知道到最后会不会死在了这个最基本的问题,供电能力上面。