CPU GPU cache异同总结

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

1. GPU cache 由于GPU 大规模多线程的特性,导致局部性很差。

2. GPU cache同样有抖动出现,这些thrashing是由于warp之间竞争引起的,当一些warp被调度到同一个SIMT核时,就造成了thrashing的出现。由于应用的工作集通常比cache大小大很多,一些高级的替换策略也没办法解决GPU的这个问题。

3. GPU同时有成百上千线程执行,每个线程分到的cache资源更少,CPU cache line生命周期更段,很多cache line在重用之前就被替换。

CPU中解决抖动的方法

1. Cache bypassing[1]:防止cache line被过早的evict出去,选择性地让某些内存请求绕过cache,从而为其他请求省下了cache空间,从而达到减少竞争。但是这个方法用到GPU上时,由于会有很多的cache miss发生【包括由于bypass的内存请求造成的】会导致MSHR或者片上网络堵塞,因此而限制内存提升。
【idea:stacking + bypass】

2. Thread throttling: 首先将应用解构为计算任务和内存任务的组合。为了防止内存请求互相干预,限制并行执行的内存任务数[2]。

GPU中解决抖动的方法

1. Cache-Conscious Wavefront Scheduling利用thread/warp throttling来减少inter-warp竞争,并且提高GPU中的L1 cache命中率。

提出两种机制:

一种static wavefront limiting (SWL)在每个warp调度器使用静态确定的最多活动warp数目【maximum active warps (MAW)】。

另一种利用运行时信息确定MAW数目。然而这种warp throttling的方法损失了大规模多线程能够隐藏延迟的优势,造成片上网络以及DRAM带宽利用率低下,限制了提升性能的空间。

[1] MICRO-12-Improving cache management policies using dynamic reuse distances
[2] MICRO-10-Memory Latency Reduction via Thread Throttling

转自: zgl07的专栏

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