CUDA – 限制使用的SM数量

有没有什么方法可以明确地限制我的程序运行期间使用的GPU多处理器的数量?我想计算一下我的算法如何随着多处理器数量的增加而扩展.

如果它有帮助:我正在使用CUDA 4.0和具有计算能力2.0的设备.

解决方法

Aaahhh ……我知道这个问题.我在写论文时自己玩弄它.

没有明确的方法可以做到这一点,但你可以通过让一些块无所事事来尝试“黑客攻击”它.

>如果因为有多处理器而你永远不会启动更多的块,那么你的工作很简单 – 只需启动更少的块.一些SM保证没有工作,因为块不能分割成多个SM.
>如果您启动了更多的块并且您只是依靠驱动程序来安排它们,请使用不同的方法:只需启动GPU可以处理的块数,如果其中一个块完成其工作,而不是终止它,则循环返回到开头并获取另一段数据来处理.最有可能的是,您的计划的表现不会下降;如果你仔细安排工作,它甚至可能会变得更好:)
>最大的问题是当所有块都在GPU上同时运行时,但每个SM有多个块.然后你需要正常启动,但手动“禁用”一些块并命令其他块为它们工作.问题是 – 哪些阻止禁用以保证一个SM正在工作而另一个不工作.

根据我自己的实验,1.3设备(我有GTX 285)按顺序安排块.因此,如果我在30个SM上启动60个块,则块1-30被安排到SM 1-30,然后31-60再次安排到SM从1到30.因此,通过禁用块5和35,SM 5实际上不是做任何事情.

但请注意,这是我2年前制作的私人实验观察.它不会被NVIDIA确认,支持,维护,不会改变(或已经改变)新的GPU和/或驱动程序.

我建议 – 尝试使用一些简单的内核来完成很多愚蠢的工作,看看在各种“启用”/“禁用”配置上计算需要多长时间.如果运气好的话,你会发现性能下降,表明实际上只有一个SM执行了2个块.

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...