理解多CUDA Context(多进程同时使用GPU)的情况

2020-03-08  本文已影响0人  fantasy5328

  起源于前段时间做的一个GPU实验,关于两个CUDA进程的进程间通信(用CUDA-IPC机制,一个进程在显存中写,另一个进程一边自旋锁一边读数据是否被更改)。实验过程中发现(环境为Ubuntu16/18),在Pascal架构的电脑上做的时候,实验是成功的。然而转到Maxwell架构的电脑上做,发现CUDA程序自旋锁会导致桌面卡住,即使放弃桌面转到tty控制台中做依然失败,因为B进程自旋锁的时候会导致A进程卡主*,根本写不进去。

  一开始认为原因是在Pascal架构之前,没有MPS技术,多个cuda进程无法同时在GPU中执行。但事实上软件支持的MPS对硬件计算能力要求不高(>=3.5),cuda>=5.5就可以。且MPS一般默认关闭,在Pascal架构上实验时也并没有开启MPS。
  后来发现原因是Pascal架构开始支持计算抢占。

相关技术及对应的架构:

CUDA Context

MPS
推荐阅读MPS官方文档以及MPS相关博客
个人理解:相当于用一个context整合了多个context。
待深入了解:MPS的硬件隔离?

自问自答:
Q:多个主机进程默认创建的Context是同一个吗?
A:是不同的Context。

Q:Pascal架构之前,桌面渲染和通用计算也是可以同时进行的呀?
A:事实上并没有真正同时进行,只是交替进行,宏观看上去会有并发的效果。如果cuda程序占用GPU时间过长,会被桌面图形程序停掉。

Q:图像渲染都需要用GPU吗?
A:不一定,某些软件计算量大且专门针对GPU做了优化的话才会用到GPU。

Q:GPU 通用计算会影响渲染任务吗?
A:如果两个计算量都比较大的话肯定会相互影响

上一篇 下一篇

猜你喜欢

热点阅读