找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 139|回复: 1

网上说一块GPU同一时刻只能被一个线程使用,这个说法对吗?因为我现在确实是两个线...

[复制链接]
发表于 2018-5-15 10:39:27 | 显示全部楼层 |阅读模式
ESC4000G3
网上说一块GPU同一时刻只能被一个线程使用,这个说法对吗?因为我现在确实是两个线程使用同一块GPU耗时会加倍。
回复

使用道具 举报

发表于 2018-5-15 10:59:50 | 显示全部楼层
Jetson TX2
这个说法可以说对也可以说不对.

(1)如果线程是指的Host Thread的话, 除非是专业卡, 并且设定了host线程独占模式, 否则来自多个Host进程的多个Host线程们, 是可以同时使用它的. 因此可以说不对(家用卡不支持独占模式, 因此总是可以多个Host线程同时使用的, 但执行效率是另外一回事, 可以往下看).

(2)但GPU目前在实质上(Maxwell/Pascal), 同一时刻只能执行来自不同Host进程中的不同Host线程中的1个Context中的任务, 因此从这个角度看, 同一时间只能被1个host线程访问的, 可以说也对. 此时N个不同Host线程中的任务, 将需要N倍的时间来完成.

(3)但如果所有线程都是拥有同一个CUDA Context, 来自同一个host进程, 同时在一次启动的kernel中的线程规模无法让设备满载的时候, 同一个context中的其他流中的kernel见缝插针可能会全部或者部分同时在执行中, 此时显然这个说法是不对的. 此时N个host线程中的任务可能需要1倍(无时间增加)到N倍时间之间不定.

综合来说, 这个说法是否正确看情况.
而总的执行时间, 在上了N个Host线程后, 也可能从1 - N倍之间变化.

前几天论坛发的Sisiy姐的多流, 一种方式就是从同一个Host进程中(例如一次exe启动)的多个Host线程, 每个线程控制1个流, 同时的发布任务, 此时可能很多操作可以重叠同时执行, 有效的将时间从N倍变成1-N倍之间. 不妨考虑.

但对于那种一个线程就可以充分的压满设备(例如双向的PCI-E传输 + 卡的计算), 此时上多流不会有额外的性能提升,  但可以保留对未来设备的扩展性和兼容性(例如, 10年后, 你走人了, 代码留给了公司, 而到时候一张显卡的SM规模是现在的100倍还多, 那么现在的多流更好的设备利用, 在将来会享受到效率提升的, 哪怕现在不能).

Regards,
屠戮人神.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表