如何定义运行时已知大小的CUDA共享内存?

Hai*_*ang 6 cuda gpu-shared-memory

__shared__CUDA中的内存似乎在编译时需要已知的大小.但是,在我的问题中,__shared__内存大小只在运行时知道,即

int size=get_size();
__shared__ mem[size];
Run Code Online (Sandbox Code Playgroud)

这将最终导致"错误:常数值未知",我不知道如何解决这个问题.

Rog*_*ahl 5

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

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

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