本地内存访问是否已合并?

时间:2011-09-06 07:09:45

标签: cuda gpu-local-memory

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

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