有什么方法可以明确限制程序运行期间使用的GPU多处理器的数量?我想计算出我的算法如何随着越来越多的多处理器而扩展。
如果有帮助:我正在使用CUDA 4.0和具有计算功能2.0的设备。
最佳答案
Aaahhh ...我知道问题所在。我写论文时自己玩。
没有明确的方法可以执行此操作,但是您可以通过使某些块不执行任何操作来尝试对其进行“破解”。
根据我自己的实验,1.3设备(我有GTX 285)按顺序调度这些块。因此,如果我在30个SM上启动60个块,则将1-30个块调度到SM 1-30上,然后将31-60个块又调度到1到30个SM上。因此,通过禁用块5和35,实际上5号SM是不可行的做任何事情。
但是请注意,这是我2年前所做的私有(private)实验性观察。 NVIDIA并未对此进行任何确认,支持,维护,它可能会随着新的GPU和/或驱动程序而改变(或已经改变)。
我建议-尝试使用一些做很多愚蠢工作的简单内核,看看在各种“启用”/“禁用”配置上进行计算需要多长时间。如果幸运的话,您会发现性能下降,表明单个SM实际上执行了2个块。
关于CUDA-限制使用的SM数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8278435/