有什么办法可以明确限制程序运行时使用的 GPU 多处理器的数量?我想计算我的算法如何随着多处理器数量的增加而扩展。
如果有帮助:我正在使用 CUDA 4.0 和具有计算能力 2.0 的设备。
啊啊……我知道问题所在了。我自己写论文的时候也玩过这个。
没有明确的方法可以做到这一点,但是您可以尝试通过让某些块不执行任何操作来“破解”它。
根据我自己的实验,1.3 设备(我有 GTX 285)按顺序安排块。因此,如果我在 30 个 SM 上启动 60 个块,则块 1-30 会被调度到 SM 1-30 上,然后再次将 31-60 调度到 SM 1 到 30 上。因此,通过禁用块 5 和 35,SM 编号 5 实际上不会被调度到 SM 上。做任何事情。
但请注意,这是我两年前进行的私人实验观察。它绝不是由 NVIDIA 确认、支持、维护的,并且可能会随着新的 GPU 和/或驱动程序而改变(或已经改变)。
我建议 - 尝试使用一些简单的内核,它们会做很多愚蠢的工作,看看在各种“启用”/“禁用”配置上计算需要多长时间。如果幸运的话,您会发现性能下降,这表明 2 个块实际上是由单个 SM 执行的。