Aaahhh ……我知道这个问题.我在写论文时自己玩弄它.
@H_
197_5@
@H_
197_5@没有明确的
方法可以做到这一点,但你可以通过让一些块无所事事来尝试“黑客攻击”它.
@H_
197_5@>如果因为有多处理器而你永远不会启动更多的块,那么
你的工作很简单 – 只需启动更少的块.一些SM保证没有工作,因为块不能分割成多个S
m.>如果您启动了更多的块并且您只是依靠驱动程序来安排它们,请使用不同的
方法:只需启动GPU可以处理的
块数,如果其中
一个块完成其工作,而不是终止它,则循环返回到开头并
获取另一段数据来处理.最有可能的是,您的计划的表现不会下降;如果你仔细安排工作,它甚至可能会变得更好:)
>最大的问题是当所有块都在GPU上同时运行时,但每个SM有多个块.然后你需要正常启动,但手动“禁用”一些块并命令其他块为它们工作.问题是 – 哪些阻止禁用以保证
一个SM正在工作
而另一个不工作.
@H_
197_5@根据我自己的实验,1.3设备(
我有GTX 285)按顺序安排块.因此,如果我
在30个SM上启动60个块,则块1-30被安排到SM 1-30,然后31-60再次安排到SM从1到30.因此,通过禁用块5和35,SM 5实际上不是做任何事情.
@H_
197_5@但请注意,这是我2
年前制作的私人实验观察.它不会被NVIDIA确认,
支持,维护,不会改变(或已经改变)新的GPU和/或驱动程序.
@H_
197_5@我建议 – 尝试使用一些简单的内核来完成很多愚蠢的工作,看看在各种“启用”/“禁用”配置上计算需要多长时间.如果运气好的话,你会发现
性能下降,表明实际上只有
一个SM执行了2个块.