GPU内存读取指令流程,操作数收集器

GPU Memory Read Instruction Flow, Operand collector

我正在尝试使用 GPGPU-Sim 学习 GPU 的架构,但我对内存操作流程感到困惑。假设我有像 a = b + c 这样的算术指令。在进行计算之前,b 和 c 需要进行内存加载操作。这些加载指令被发送到 memories.First 的所有缓存标记都被检查。

如果未命中,请求将被添加到 MSHR 并通过互连网络从 gpu 核心发送到较低的内存。当请求 returns 从互连网络到核心时,它被添加到某种内存响应 fifo。然后通过从响应 fifo 中弹出这些请求来填充缓存行。

如果命中,数据可在缓存中使用。

在这两种情况下,我们的算术指令单元数据都可以在缓存中使用。我知道操作数收集器收集发出 warp 所需的操作数,但让我感到困惑的是操作数收集器从哪里收集这些操作数?每个线程寄存器?如果是这样,这些寄存器什么时候从缓存中获取所需的数据?

找到答案了。当 fifo 不为空且写回阶段不是 stalled.The 时,每个周期都会弹出来自内存响应 fifo 的内存请求响应 stalled.The 弹出的内​​存请求响应被写入单端口寄存器文件组。 SIMD 执行单元在需要时从这些寄存器文件组中加载算术指令所需的寄存器。有关操作数收集器和那些寄存器文件库的信息可在线获取,并已获得 NVIDIA 的专利。