正如大多数人所知道的,GPU的处理速度之快得益于它可以高效地处理矩阵乘法和卷积,但是大家并不一定知道真正的理由。GPU如此快速的真正原因是内存带宽和不必要的并行。
高带宽
首先,大家必须得明白CPU是基于延迟优化的,而GPU是基于带宽优化的。CPU与GPU就像法拉利与卡车,两者的任务都是从随机位置A提取货物(即数据包),并将这些货物传送到另一个随机位置B,法拉利(CPU)可以快速地从RAM里获取一些货物,而大卡车(GPU)则慢很多,有着更高的延迟。但是,法拉利传送完所有货物需要往返多次:
相比之下,大卡车可以一次提取更多的货物,减少往返次数:
句话说,CPU更擅长于快速获取少量的内存(5*3*7),GPU则更擅长于获取大量的内存(矩阵乘法:(A*B)*C)。
另一方面,最好的CPU大约能达到50GB/s的内存带宽,而最好的GPU能达到750GB/s的内存带宽。因此,在内存方面,计算操作越复杂,GPU对CPU的优势就越明显。
然而,延迟的存在仍然会影响着GPU的性能,就像大卡车虽然可以在每次运输中提取大量的货物,但问题是,你必须花上很长的时间来等待下一批货物到达。如果这个问题不能被解决,即使是处理大量的数据,GPU的速度也会变得很慢。
那么,如何解决这个问题呢?
多线程并行
如果让大卡车往返多次来提取货物,一旦卡车已经出发,你将会花上大量的时间来等待下一次的货物装载,毕竟卡车速度很慢。
然而,如果你使用一队法拉利或大卡车(即多线程并行)来运输大量的货物(例如像矩阵一样的大块内存),那么你只需要花上一点时间来等待第一次运输,之后就无需等待了,因为卸货的过程长,此时所有卡车都在B区排队卸货,所以你可以直接在B区取到你的货物。
From http://baijiahao.baidu.com/s?id=1595102222606591394&wfr=spider&for=pc