基于编译器辅助的GPGPU缓存一致性研究

随着以GPGPU为基础的异构计算架构在云计算、大数据以及深度学习等各个领域的广泛应用,以及GPU架构的不断发展,GPU核心数量不断增多,其对于GPU架构中缓存一致性问题也越来越突出。在多核处理器架构中,通常使用基于目录的硬件缓存一致性协议,来维护不同处理器核心私有缓存之间的数据一致性。由于GPU架构高并行的特点,将传统多核处理器架构下的缓存一致性协议直接应用GPU架构中,会导致更频繁的通信开销,更大存储开销,并且会导致更高的一致性协议设计复杂度。因此传统多核处理器架构下的缓存一致性协议并不能直接应用于GPU架构中。现代GPU架构中并没有保证数据正确性的缓存一致性协议,只能通过不把全局数据缓存到私有一级缓存上来避免缓存一致性问题。对访存敏感型的GPU应用程序来说,将全局数据绕过私有一级缓存会带来更多的延迟,并且会潜在地造成更多的片外访存请求,这样会影响整个异构计算系统的性能。我们发现一级缓存对于GPU的性能会有积极影响,然而盲目将数据加载到一级缓存会造成缓存不一致的问题。基于GPU kernel函数访存模式是可以预测的研究,本文提出了一种静态程序分析的方法,在保证数据一致的情况下,保守地将一部分数据缓存到私有一级缓存上。我们将本文提出的共享访存分析模块与NVIDIA NVCC编译器集成到一起,利用PTX ISA指令集中特有的缓存操作符,来自动地生成合理并且高性能的应用程序,没有造成任何GPU硬件上的开销。我们将我们提出的方法应用到了实际的嵌入式和通用的异构计算平台上。实验结果表明,对于缓存敏感型的应用程序,我们在嵌入式异构平台Jetson TX1,Jetson TX2以及GTX1060上,分别取得了平均1.38倍、1.26倍和1.24倍的加速比,同时我们对二级缓存的访问事务也平均减少了 31%、31%和48%。

GPU; 缓存一致性; 静态程序分析;

鞠雷;

TP332

27593226K
在线咨询 用户反馈