cuda多任务

我看了一下,在单gpu上运行多个任务,可以用流,但是这个应该是属于时间上的并行。我想问一下,可不可以用空间上的的并行,就是说,gpu上有多个核,指定每个任务所需要的内核数,然后多个任务并发执行?不胜感激:handshake

LZ您好:

1:单个GPU上运行多个stream,并不仅是您说的那样是串行的,不同stream之间是可以不保证顺序的,所以当一个stream占用计算资源的时候,另外一个stream可以在global memory和host端之间传输数据,这样可以实现计算和传输相掩盖,这也是某种“空间上的并行”(不同的stream利用的GPU的不同部分)。

2:这个不行的,在多stream执行多个小线程规模的kernel的时候,有可能可以多个kernel在GPU中同时运行(需要2.0或更高的计算能力),但是略大线程规模的kernel总是独占GPU执行的,GPU全力完成一个kernel,然后执行下一个。
以及,GPU核和CPU核差异很大,不能像您想象的那样手工分配的,至少目前不行,以及手工分配可能也不是高效率的方式。

此外,CUDA 5.5中为stream提供了不同的优先级,如果您有优先级更高的任务,可以考虑使用这个机制以保证该任务总是被优先执行的。

大致如此,感谢您深夜来访,祝您编码顺利~

以及使用带有优先级的stream功能,您需要tesla专业计算卡,该功能不对geforce卡开放。

专业铸就品牌——tesla,CUDA编程首选!

谢谢版主~但我还想问一下,假定我的任务规模很小,那只能用其中很少的一部分核,其余的核都在闲置状态中,那我能不能再添加任务,利用这些闲置的核?