-1

我正在阅读这份演示文档: http: //on-demand.gputechconf.com/gtc-express/2011/presentations/register_spilling.pdf

在演示文稿的第 3 页中,作者指出:

存储总是在加载之前发生——只有 GPU 线程可以访问 LMEM 地址

谁能向我解释为什么?他的意思是什么时候首次初始化本地内存?

4

2 回答 2

3

在这方面,本地内存类似于共享内存。

  1. 为了对共享内存做任何有用的事情,你必须先初始化(存储一些东西)。本地内存也是如此。

  2. 只有 CUDA 线程代码可以访问本地内存。没有像cudaMemcpy这样可以访问本地内存的 CUDA API 调用。无法从主机代码初始化本地内存。

对于共享内存,相同的注释基本上是正确的。

于 2017-03-13T17:49:24.737 回答
1

“他的意思是本地内存第一次初始化的时候吗?” - 是的。

你不能“cudaMemcpy()”到本地内存,因为它在全局地址空间之外。如果您尝试显式初始化局部变量,编译器会生成存储到本地内存,因为需要为每个块重复初始化。因此,如果不先将其写入本地内存,就无法在本地内存中定义值。

于 2017-03-13T17:50:15.543 回答