DRAM和 SMEM指令能在一个时钟周期内同时发出吗?

编程语言 2026-07-12

在安培架构中,考虑以下场景:

  1. 一个warp执行两条加载指令:一条来自共享内存,一条来自DRAM。
  2. 同一SM内的两个warp,各执行一条加载指令:一条来自共享内存,一条来自DRAM。

另外,假设来自共享内存和DRAM的加载指令的固定延迟分别为 nm,且第一条指令在时钟周期0 发出。

两条指令能否在周期0 发出,数据分别在周期 nm 可用? 还是指令会在周期0 和1 发出,数据只会在要么 (n, m+1),要么 (n+1, m) 可用?

解决方案

一条warp执行两条加载指令 […] 两条指令能否在周期0 发出,数据分别在周期n 与m 可用?

不行,情况甚至更糟。如果你查看 Ampere Architecture Whitepaper,图7 第22页,你会看到每个32线程warp调度单元(处理块,PB)有8 个加载存储单元。这意味着在32线程warp上的每条加载指令需要在4 个周期内完成执行。这也排除了全局内存和共享内存操作在同一时钟周期执行的情况。

同一SM内的两个warp,各执行一条加载指令

在这种情况下,我不太确定。每个SM有 4个 PB,每个完成一个加载指令需要4 个周期,技术上并不需要提供这种能力,因为如果把来自这4 个PB的加载简单地错开一个时钟周期执行,吞吐量也不会损失太多。如 Ampere调优指南 所述,共享内存现在被并入L1缓存,L1缓存被用作全局内存访问的合并缓冲区。这意味着确实存在功能上的重叠。是否因此导致可测量的资源冲突,我不确定。

我认为可能有趣且值得测量的一点是,一个PB的全局加载是否会增加另一个PB中共享加载的延迟,反之亦然。为此,我们需要并行运行Hamdy Abdelkhalik等人论文 Demystifying the Nvidia Ampere Architecture through Microbenchmarking and Instruction-level Analysis 中的基准测试。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章