我已经用CUDA编写了一个应用程序,每个块使用1kb的共享内存。
由于每个SM只有16kb的共享内存,总共只能容纳16个块,对吧?虽然一次只能调度8个块,但是如果某个块正在执行内存操作,另一个块将被调度到GPU上,但是所有共享内存都被其他16个已经在那里调度的块使用了。
那么,CUDA是否不会在同一个SM上调度更多的块,除非之前分配的块完全完成?
还是说它会将某些块的共享内存移动到全局内存,并在那里分配其他块?在这种情况下,我们需要担心全局内存访问延迟吗?
由于每个SM只有16kb的共享内存,总共只能容纳16个块,对吧?虽然一次只能调度8个块,但是如果某个块正在执行内存操作,另一个块将被调度到GPU上,但是所有共享内存都被其他16个已经在那里调度的块使用了。
那么,CUDA是否不会在同一个SM上调度更多的块,除非之前分配的块完全完成?
还是说它会将某些块的共享内存移动到全局内存,并在那里分配其他块?在这种情况下,我们需要担心全局内存访问延迟吗?