我在做一个插值程序,写了一个对单张图插值的kernel,我现在希望能同时插多张图,我知道可以单张图依次串行的实现,想问一下有没有什么方法可以同一个kernel对不同数据调用并行实现,貌似看到过有个con打头的命令,找不到了,求解答。
既然可以串行发射kernel实现,这说明各张图的工作之间是没有联系的,既然如此您可以:
1:顺序的发射kernel,如果完成一张图的工作量够大的话,这样的效率也是可以的。
2:或者,如果一张图的工作量较小,您可以使用stream实现kernel的并发,这需要fermi或者更新的硬件,如kepler。
3:您也可以通过修改kernel来一次完成多张图的工作。
目前只想到这三点,供楼主参考,欢迎其他人补充。
我一张图可能1024*1024吧,我用C2075的卡,我插的时候每点一个线程,线程数还是挺多的了吧,串行应该不会很慢,但是我想把卡用到极致,所以问问能不能这样并行。
我不清楚顶楼中提出的“某命令”是何含义,所以无法回答您“这样是否可行”。
建议用profiler测一下顺序发射kernel时的效率如何,再做定夺。
好的,我还在写单幅插值的程序,之所以想到多kernel并行,是因为希望把计算资源尽量全都利用上。我先写好了,测测效率如何再说。
如果是1024*1024个线程的话,kernel是无法并发的,因为1个kernel已经把所有的SM资源全部占用了,多kernel一般都是轻量级的!
tianyuan08指出的很正确。一个简单的方法是lz可以在visual profiler里看一下你kernel的sm_efficiency。如果它比较低的话,那说明你的kernel把GPU的资源没有用满,使用并发kernel就可能有好处了。
嗯,我后来想了想也确实是,线程已经这么多了,不能并发。