0

我正在尝试了解有关指令级分析的并行 forall 帖子尤其是Reducing Memory Dependency Stalls部分中的以下几行:

NVIDIA GPU 没有索引寄存器文件,因此如果使用动态索引访问堆栈数组,编译器必须在本地内存中分配数组。在 Maxwell 架构中,本地内存存储不会缓存在 L1 中,因此存储后本地内存加载的延迟很重要。

我了解什么是寄存器文件,但它们没有被索引是什么意思?为什么它会阻止编译器存储使用动态索引访问的堆栈数组?

引用说数组将存储在本地内存中。在下面的架构中,这个本地内存对应什么块?

在此处输入图像描述

4

1 回答 1

2

...它们没有被索引是什么意思

这意味着不支持寄存器的间接寻址。所以不可能从一个寄存器(理论上是保存数组的第一个元素的寄存器)索引到另一个任意寄存器。因此,编译器无法为存储在寄存器中的数组的非静态索引生成代码。

在下面的架构中,这个本地内存对应什么块?

它不对应于其中任何一个。本地内存存储在 DRAM 中,而不是 GPU 本身。

于 2017-04-13T13:03:57.710 回答