GPU比CPU去掉了大量非计算单元(去掉L3, 降低缓存容量,精简控制器,降低分支能力和预测执行能力),增加了通用寄存器。其实CPU的浮点能力并不差,通常来说CPU的整数能力只是CPU浮点能力的2-5倍而已。
而GPU擅长浮点说的也不是很准确,其实GPU是擅长数值计算,不擅长应对分支和随机访存。通常GPU的int32能力并不会低于其float32能力。但是发挥GPU的计算能力需要批量化(向量化),连续访存,同时计算任务不要有太多分支。
之所以有 CPU 浮点能力差的说法,想有两个原因通常需要大量浮点计算的场景都不是有复杂控制逻辑的场景,这些场景下对控制能力要求不高
一般的重逻辑的场景,不可避免的需要大量的整数计算。换句话说,需要大量整数计算的场景(相对需要浮点计算的场景)很有可能需要更大量分支和逻辑控制,也很有可能需要更多不连续访存。
另外需要指出的是,现在CPU主频通常比GPU高得多,所以CPU的功耗显得高了一点。如果比较CPU和GPU同频同功耗的性能,可能没大家想象的那么多。
CPU的浮点能力一点也不差,其实比GPU还高,因为它的主频高,Cache大。浮点运算本质上还是加减乘除运算。GPU浮点性能总体强大,是因为它的计算单元比CPU的大得多。CPU内部的浮点计算单元一般1-8个不等。而GPU内部则是几百上千个。
浮点是什么?是小数点的数字,这个没错但是关键区别在于它的格式。普通整数的表达方式很简单,就是二进制的同一个数字而已,1是1,2是10,3是1