我在cuda中编写了一个应用程序,它在每个块中使用1kb的共享内存。 由于每个SM中只有16kb的共享内存,所以整体上只能容纳16个块(我理解它是否正确?),虽然一次只能调度8个,但现在如果某个块忙于进行内存操作,所以其他块将在gpu上进行调度,但是所有共享内存都被已经在那里安排的其他16个块使用,所以cuda不会在同一个sm上安排更多的块,除非先前分配的块完全完成?或者它会将一些块的共享内存移动到全局内存,并在那里分配其他块(在这种情况下,我们应该担心全局内存访问延迟吗?)
答案 0 :(得分:7)
它不起作用。计划在单个SM上的任何给定时刻运行的块数始终是以下最小值:
这就是它的全部。共享内存没有“分页”以容纳更多块。 NVIDIA生成一个计算入住率的电子表格,随工具包提供,可单独下载。您可以在其包含的公式中查看确切的规则。它们也在CUDA编程指南的4.2节中讨论过。