GPU-对比CPU

  1. 硬件架构不同,以Intel的某款8核处理器为例,CPU中有很大一部分面积都被缓存占去了,相比之下,8个核心占的面积并不算大。所以CPU的主要时间并不是计算,而是在做数据的传输。

GPU-对比CPU

再来看GPU的架构,从下图可以看出,GPU中缓存只占了很小的一部分的空间,绝大多数的空间都被计算单元SMX占用,因此GPU更适合用来做运算。

GPU-对比CPU

2. CPU适合那种逻辑复杂,但运算量小的任务;而GPU适合运算量大,但逻辑简单的任务,结合我们后面章节讲的例子,也可以看出,我们在GPU编程时,有一种优化方式就是将循环展开,这样会导致代码量会有所提高,但通过这个操作,我们明确告诉GPU应该做什么处理,提高GPU的执行效率;

3. 支持线程的方式不同,CPU的每个核只有少量的寄存器,每个寄存器都将在执行任何已分配的任务中被用到。为了能执行不同的任务,CPU将在任务与任务之间进行快速的上下文切换。从时间的角度看,CPU上下文切换的代价是非常昂贵的,因为每一次上下文切换都要将寄存器组里的数据保存到RAM中,等到重新执行这个任务时,又从RAM中恢复。相比之下,GPU同样会用到上下文切换的概念,但它拥有多个寄存器组而不是单个寄存器组。因此一次上下文切换只需要设置一个寄存器组调度者,用于将当前寄存器组里的内容换进、换出,它的速度比将数据保存到RAM中要快好几个数量级。

4. 对失速状态的处理不同,失速状态是指当没有足够多的任务时,处理器就会闲置。如果此时有很多小任务,每一个都会在一小段时间后阻塞,那么CPU将花费大量的时间在上下文切换上,而只有少部分时间在做有用的工作,此时效率就会急剧下降。而GPU对这种失速状态的处理就很好,GPU采用的是数据并行的模式,它需要成千上万个线程,从而实现高效的工作。它利用有效的工作池来保证一直有事可做,不会出现闲置状态。当GPU遇到内存获取操作或在等待计算结果时,SM就会切换到另一个指令流,而在之后再执行之前被阻塞的指令。

5. CPU遵循缓存一致性,而GPU不是,这一点在上一节“GPU内存深入了解”中有讲,这里不多赘述。

CPU和GPU在缓存上的一个重要差别就是“缓存一致性”(cache coherency)问题。缓存一致是指一个内存的写操作需要通知所有核的各个级别的缓存,因此,无论何时,所有处理器核看到的内存视图是完全一样的。随着处理器中核数量的增多,这个“通知”的开销迅速增大,使得“缓存一致性”成为限制一个处理器中核数不能太多的一个重要因素。“缓存一致”系统中最坏的情况是,一个内存写操作会强迫每个核的缓存都进行更新,进而每个核都要对相邻的内存单元进行写操作。

CPU遵循“缓存一致”原则,而GPU不是。在GPU中系统不会自动的更新其他核的缓存。所以GPU能扩展到一个芯片内具有大数量的核心。它需要由程序员写清楚每个处理器核输出的各自不同的目标区域。从程序的视角看,这支持一个核仅负责一个输出或者一个小的输出集。

 

上一篇:Qualcomn GPU Profiler使用和分析


下一篇:GPU、CPU、内存、文件流、磁盘的速度之比