我正在阅读这份演示文档: http: //on-demand.gputechconf.com/gtc-express/2011/presentations/register_spilling.pdf
在演示文稿的第 3 页中,作者指出:
存储总是在加载之前发生——只有 GPU 线程可以访问 LMEM 地址
谁能向我解释为什么?他的意思是什么时候首次初始化本地内存?
我正在阅读这份演示文档: http: //on-demand.gputechconf.com/gtc-express/2011/presentations/register_spilling.pdf
在演示文稿的第 3 页中,作者指出:
存储总是在加载之前发生——只有 GPU 线程可以访问 LMEM 地址
谁能向我解释为什么?他的意思是什么时候首次初始化本地内存?
在这方面,本地内存类似于共享内存。
为了对共享内存做任何有用的事情,你必须先初始化(存储一些东西)。本地内存也是如此。
只有 CUDA 线程代码可以访问本地内存。没有像cudaMemcpy
这样可以访问本地内存的 CUDA API 调用。无法从主机代码初始化本地内存。
对于共享内存,相同的注释基本上是正确的。
“他的意思是本地内存第一次初始化的时候吗?” - 是的。
你不能“cudaMemcpy()”到本地内存,因为它在全局地址空间之外。如果您尝试显式初始化局部变量,编译器会生成存储到本地内存,因为需要为每个块重复初始化。因此,如果不先将其写入本地内存,就无法在本地内存中定义值。