用户
 找回密码
 立即注册
冰清鱼 该用户已被删除
发表于 2013-12-3 22:59:43
104683
我看了一下,在单gpu上运行多个任务,可以用流,但是这个应该是属于时间上的并行。我想问一下,可不可以用空间上的的并行,就是说,gpu上有多个核,指定每个任务所需要的内核数,然后多个任务并发执行?不胜感激
使用道具 举报 回复
发表于 2013-12-3 23:15:08
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提供了不同的优先级,如果您有优先级更高的任务,可以考虑使用这个机制以保证该任务总是被优先执行的。

大致如此,感谢您深夜来访,祝您编码顺利~
使用道具 举报 回复 支持 反对
发表于 2013-12-3 23:20:29
ice 发表于 2013-12-3 23:15
LZ您好:

1:单个GPU上运行多个stream,并不仅是您说的那样是串行的,不同stream之间是可以不保证顺序的, ...

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

专业铸就品牌——tesla,CUDA编程首选!
使用道具 举报 回复 支持 反对
发表于 2013-12-4 17:28:48
ice 发表于 2013-12-3 23:15
LZ您好:

1:单个GPU上运行多个stream,并不仅是您说的那样是串行的,不同stream之间是可以不保证顺序的, ...

谢谢版主~但我还想问一下,假定我的任务规模很小,那只能用其中很少的一部分核,其余的核都在闲置状态中,那我能不能再添加任务,利用这些闲置的核?
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册