假设第0块使用
__shared__ int a[VERY_LARGE];
__shared__ char b[VERY_LARGE];
块1将使用
__shared__ double c[VERY_LARGE];
__shared__ int d[VERY_LARGE];
假设a和b将占用一个SM中的所有48KB共享内存。
c和d将占用一个SM中的所有48KB共享内存。
是否可以在一个SM中分配a和b,在另一个SM中分配c和d?
答案 0 :(得分:1)
简短回答:否。
为Streaming Multiprocessors分配线程块是一个调度程序,而不是程序员的工作。因此,您无法保证调度程序将决定在不同的流式多处理器上运行块0
和1
。这个Stack Overflow线程
How CUDA Blocks/Warps/Threads map onto CUDA Cores?
将有助于您理解。白皮书
NVIDIA’s Next Generation CUDA Compute Architecture: Fermi
虽然与费米有关,但会给你一个更深刻的见解。
还要注意,为了从GPU中获得最佳性能,粗略地说所有线程应该“同时”执行相同的指令。为了实现你在帖子中所说的内容,你应该有条件共享内存分配,这让我觉得你最终会有其他的条件语句。这可能会影响性能。