假设,我在每个线程的CUDA内核函数中声明了一个局部变量:
float f = ...; // some calculations here
假设声明的变量由编译器放置到本地内存(与全局内存相同,但据我所知只有一个线程可见)。我的问题是,在阅读时f
的访问权限会合并吗?
答案 0 :(得分:2)
我不相信有关于本地内存(或Fermi上的堆栈)如何在内存中布局的官方文档,但我很确定mulitprocessor分配是以“条带”方式访问的,因此非分歧线程在同一个warp中将获得合并访问本地内存。在Fermi上,本地内存也使用与全局内存相同的L1 / L2访问机制进行缓存。
答案 1 :(得分:-1)
CUDA卡没有为局部变量分配内存。所有局部变量都存储在寄存器中。具有大量变量的复杂内核减少了可以并发运行的线程数,这种情况称为低占用率。