我是否能在程序运行期间明确限制使用的GPU多处理器数量?我想计算我的算法随着多处理器数量的增加而扩展的情况。
如果有帮助的话:我正在使用CUDA 4.0和计算能力为2.0的设备。
我是否能在程序运行期间明确限制使用的GPU多处理器数量?我想计算我的算法随着多处理器数量的增加而扩展的情况。
如果有帮助的话:我正在使用CUDA 4.0和计算能力为2.0的设备。
啊...我知道问题所在。当我写论文时也曾遇到过这个问题。
没有明确的方法可以解决这个问题,但是你可以尝试“破解”它,让一些块不做任何事情。
根据我的实验结果,1.3设备(我使用的是GTX 285)按顺序调度块。因此,如果我将60个块启动到30个SM上,块1-30会被调度到SM1-30,然后再次将31-60块调度到SM1-30。因此,通过禁用第5和第35块,第5号SM实际上没有做任何事情。
但请注意,这是我私人的、实验性的观察,两年前做出的。NVIDIA不予确认、支持、维护或其他任何形式的保证,而且可能会随着新的GPU和/或驱动程序发生变化(或已经发生变化)。
我建议——尝试一些简单的内核,这些内核需要完成大量愚蠢的工作,并查看在各种“启用”/“禁用”配置上计算需要多长时间。如果你幸运的话,你会发现性能下降,表明有2个块实际上是由单个SM执行的。