我正在尝试使用GPGPU-Sim学习GPU的架构,我对内存操作的流程感到困惑。假设我有算术指令,如a = b + c。在进行计算之前,b和c需要进行内存加载操作。将这些加载指令发送到存储器。首先检查所有缓存标签。
如果未命中,请求将被添加到MSHR并通过互连网络从gpu核心发送到较低内存。当请求从互连网络返回到核心时,它被添加到某种内存响应fifo。然后通过从响应fifo中弹出这些请求来填充缓存行。
如果遇到命中,数据在缓存中可用。
在这两种情况下,算术指令单元的数据都可以在缓存中使用。我知道操作数收集器会收集发出warp所需的操作数,但是部分让我困惑的是操作数收集器从哪里收集操作数?每个线程寄存器?如果是这样,这些寄存器什么时候从缓存中获取所需的数据?
答案 0 :(得分:0)
找到答案。当fifo不为空并且写回阶段没有停止时,每个周期弹出一次来自存储器响应fifo的存储器请求响应。弹出的存储器请求响应被写入单端口寄存器文件库。 SIMD执行单元在需要时从那些寄存器文件库加载所需的算术指令寄存器。有关操作数收集器和那些寄存器文件库的信息可在线获取并由NVIDIA提供。