You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GPU架构跨内核启动是否支持持久化末级缓存?

背景

我希望了解GPU的末级缓存(Last-Level Cache)在多次内核启动之间是被失效还是保留,以此提升有效内存带宽。我知道这可能取决于具体的GPU架构。如果至少在部分GPU架构中缓存会被保留,那么在无法进行内核融合时,或许可以通过精心编写内核来将该缓存用作通信缓冲区。

然而目前网络上的答案模糊且矛盾,许多内容还已过时。我在Nvidia和AMD开发者论坛上找到一些帖子,但没有明确答案,最好的建议是通过微基准测试来验证。Stack Exchange上也有相关问题:

在2011年的问题NVidia CUDA: cache L2 and multiple kernel invocations中,Zk1001回答道:

假设您讨论的是Fermi架构中的L2数据缓存。我认为每次内核调用后缓存都会被刷新。根据我的经验,连续两次启动同一个内存访问量极大(且存在大量L2缓存缺失)的内核时,L1/L2缓存统计数据并未发生显著变化。

该回答仅说明当工作集规模较大时,L2缓存过小无法实现时间局部性。这与我的观察一致(即使在CPU上也是如此),但并未回答缓存是否持久的问题。

在2016年的问题How does cache affect while a same kernel is being launched repeatedly中,Melissa P回答道:

对于AMD Radeon GCN架构,L1和L2缓存在所有内核(包括不同内核)之间是持久的。一个内核可以使用其他内核缓存的数据。此外,计算单元内的本地内存(Local Memory)在内核运行之间(更准确地说是工作组运行之间)不会被清除/清零。这意味着您必须初始化局部变量。这一点同样适用于NVIDIA/CUDA设备和通用SIMD CPU。

话虽如此,OpenCL并不了解或定义不同级别的缓存,缓存是厂商特定的。任何处理或管理缓存的功能都是厂商特定的扩展。

但该回答没有引用来源。

在Nvidia的NVIDIA A100 Tensor Core GPU Architecture白皮书中,Nvidia指出:

除了原始数据带宽的提升外,A100通过40 MB的L2缓存(几乎是Tesla V100的7倍)提高了数据获取效率并降低了DRAM带宽需求。为了充分利用L2缓存容量,A100包含了改进的缓存管理控制。这些新控制针对神经网络训练、推理以及通用计算工作负载进行优化,通过最小化回写内存并将可重用数据保留在L2中,以减少冗余DRAM流量,从而更高效地使用缓存中的数据。

例如,对于DL推理工作负载,乒乓缓冲区可以持久缓存到L2中以实现更快的数据访问,同时避免回写到DRAM。对于DL训练中常见的生产者-消费者链,L2缓存控制可以优化跨读写数据依赖的缓存。在LSTM网络中,跨多个GEMM操作共享的循环权重可以优先缓存并在L2中重用。

A100 L2缓存驻留控制帮助应用减少DRAM带宽,图中用不同颜色标记了被标记为L2持久缓存的数据缓冲区

由此可见,至少Nvidia A100支持持久化末级缓存,但不清楚其他GPU架构是否支持相同特性。

问题

随着GPU开始配备更大的末级缓存(如Nvidia A100的80 MiB缓存、AMD RDNA2的128 MiB缓存以及AMD RDNA3的96 MiB缓存),将末级缓存用作跨内核通信缓冲区至少在理论上已可行。那么,GPU架构中是否实现了跨内核启动的末级缓存失效机制?


内容的提问来源于stack exchange,提问作者比尔盖子

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:53:08