8

CUDA 中的__shared__内存似乎在编译时需要一个已知的大小。但是,在我的问题中,__shared__内存大小仅在运行时知道,即

int size=get_size();
__shared__ mem[size];

这将以"error: constant value is not known"告终,我不知道如何解决这个问题。

4

2 回答 2

8

共享内存的目的是允许块中的线程进行协作。当您将数组声明为__shared__时,块中的每个线程都会看到相同的内存,因此给定线程能够为共享内存中的数组设置自己的大小是没有意义的。

__shared__但是,支持为所有线程动态指定大小相同的单个数组的大小的特殊情况。请参阅分配共享内存

如果确实需要为每个线程动态分配内存,则可以在内核中使用 new 或 malloc(在 Fermi 上),但它们会分配全局内存,这可能会很慢。

于 2012-03-30T03:31:55.597 回答
1

您应该使用 extern__shared__ mem[];(动态共享内存)而不是__shared__ mem[size];(静态共享内存)。见[ https://devblogs.nvidia.com/parallelforall/using-shared-memory-cuda-cc/][1]

于 2016-10-18T18:20:11.207 回答