2011-09-06 64 views
0

假设,我声明一个局部变量在为每个线程CUDA内核函数:本地内存访问是否合并?

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

还假设,即所声明的变量被放置在由一个编译器的本地存储器(其为相同,除了全球一个只有我知道的情况下,它对于一个线程才是可见的)。我的问题是,在阅读时会访问f吗?

回答

2

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

-1

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

+0

这根本不是真的。每个线程可以有一个静态分配的本地内存分配高达16kb。该存储器存储在片外的SDRAM中,不会被缓存。有关更多信息,请参见[this](http://drdobbs.com/high-performance-computing/215900921)或CUDA编程指南。 – talonmies

+0

你说得很对。我已经多次查看编程指南,并且从未注意过。 –