GPU上为何没有大量的cache?

No replies
Demi
Demi 的头像
Offline
Joined: 2017-03-07

近年来,GPU广泛应用与高性能领域,其通用计算能力也得到了进一步的利用。与传统的CPU相比,GPU在处理能力和储存器带宽上有着明显的优势,在成本和功耗上也不需要付出太大的代价。

在当前主流的CPU+GPU架构中,CPU和GPU一般经过北桥芯片相互连接,各自有各自的外部储存器,分别为内存和显存。在这种混合架构中CPU负责逻辑性较强的事物运算,而GPU主要负责计算密集度较高的部分。其设计目的的不同导致了设计时的架构的不同。而这些架构的不同也最终影响了他们的性能。

CPU为何需要大量cache?

对于单个的CPU核心通常在一个时刻只能运行一个线程的指令,其多线程机制也是在软件层次上的并行。当一个线程中断,或等待某些资源的时候,操作系统需要进行一个上下文转换,这通常会带来巨大的开销。因此需要大量的cache来过滤过多内存的访问,减少访存的延迟,提升CPU的响应速度。而为了缓存的一致性,还需要复杂的替换机制,需要复杂的逻辑控制单元。

另一方面,为了提升单核指令级的并行,现代的CPU中使用了超标量、超流水、超长指令字。这些方式的运行也需要借助复杂的分支预测机制和大量的cache。

GPU为何不需要大量cache?

在GPU中没有复杂的缓存体系和替换机制,其cache都是只读的,因此不用考虑cache一致性问题。GPU缓存的主要作用是过滤对存储器控制器的请求,减少对显存的访问,从而解决显存带宽。

GPU不需要大量的cache,另一个重要的原因是GPU处理大量的并行任务。其大量的block和同一个block的大量thread保证了GPU可以实现零开销的线程切换。当一个线程因等待资源而中断的时候就转到另一个已经就绪线程去执行,在这里线程切换反而成了一件好事。能通过计算来隐藏延迟。

转自: gaoxiang的专栏

--电子创新网--
粤ICP备12070055号