我有一个需要使用全局内存的 CUDA (v5.5) 应用程序。理想情况下,我更喜欢使用常量内存,但我已经用尽了常量内存,溢出将不得不放在全局内存中。我还有一些变量需要偶尔写入(在 GPU 上进行一些缩减操作之后),我将其放置在全局内存中。
为了阅读,我将以一种简单的方式访问全局内存。我的内核在 for 循环中被调用,每次调用内核时,每个线程都将访问完全相同的全局内存地址,没有偏移。对于写入,在每次内核调用之后在 GPU 上执行缩减,并且我必须在循环的下一次迭代之前将结果写入全局内存。然而,在我的应用程序中,读取的次数远多于写入全局内存的次数。
我的问题是使用在全局(变量)范围内声明的全局内存是否比使用动态分配的全局内存有任何优势?我需要的全局内存量会根据应用程序而变化,因此动态分配会更可取。但是,我知道全局内存使用的上限,并且我更关心性能,因此我也可以使用我确信不会溢出的大型固定分配静态声明内存。考虑到性能,有什么理由更喜欢一种形式的全局内存分配而不是另一种?它们是否存在于 GPU 上的同一个物理位置并且它们的缓存方式是否相同,或者两种形式的读取成本是否不同?