2

假设,我在 CUDA 内核函数中为每个线程声明了一个局部变量:

float f = ...; // some calculations here

还假设声明的变量由编译器放置到本地内存(这与全局内存相同,但据我所知,它仅对一个线程可见)。f我的问题是在阅读时会合并访问吗?

4

2 回答 2

2

我不相信有关于本地内存(或 Fermi 上的堆栈)如何在内存中布局的官方文档,但我很确定多处理器分配是以“条带化”方式访问的,因此非发散线程在同一warp 将获得对本地内存的合并访问。在 Fermi 上,本地内存也使用与全局内存相同的 L1/L2 访问机制进行缓存。

于 2011-09-06T08:47:58.970 回答
-2

CUDA 卡没有为局部变量分配内存。所有局部变量都存储在寄存器中。具有大量变量的复杂内核会减少可以并发运行的线程数量,这种情况称为低占用率。

于 2011-09-22T13:15:30.697 回答