cuda能够查询一个卡是否被使用吗

想在Hadoop中复用已经编译好的在GPU上运行的程序,希望mapper可以使用GPU和CPU,但是不知道如何记录一个GPU卡是否正被另一个mapper使用,所以GPU有可以查询是否被占用的API吗?:slight_smile:

不懂Hadoop和mapper.

不过我可以说下类似情况如何判断,你有自己的一份软件,运行2次,那么这2次生成的进程间可以进行通讯(例如shared memory, 例如mailbox, 例如local domain socket等等一切可以进程间通信的东西),交换彼此正在使用哪块卡,从而让您的2个进程能协商如何使用GPU。

这是一般情况的做法。具体到hadoop和mapper,我不懂他们,建议到这2者的专门论坛询问。

感谢您的来访。

上文的shared memory是普通意义上的共享内存,(例如windows的MapViewOfFile()等), 请不要和GPU上的shared memory弄混。特此告知。:slight_smile:

谢谢版主,因为对hadoop也是刚刚了解,跟MPI不同,其不同mapper的通讯机制不太明了。现在想到一个方法,就是将GPU卡的compute mode设置为进程互斥的(exclusive-process),在CUDA程序外面加一个wrapper,通过调用API判断是否被另一个进程占用了?这种方法我以为另一个进程调用API会报错从而可以判断,但是貌似CUDA中另一个进程也是可以获得当前被使用的设备的,只是其显存被保护起来了。不知是否有什么小技巧判断呢

谢谢版主,因为对hadoop也是刚刚了解,跟MPI不同,其不同mapper的通讯机制不太明了。现在想到一个方法,就是将GPU卡的compute mode设置为进程互斥的(exclusive-process),在CUDA程序外面加一个wrapper,通过调用API判断是否被另一个进程占用了?这种方法我以为另一个进程调用API会报错从而可以判断,但是貌似CUDA中另一个进程也是可以获得当前被使用的设备的,只是其显存被保护起来了。不知是否有什么小技巧判断呢

楼主您好,我认为我在2#说的足够明白了。

(1)对于您补充说明的compute mode设置为process exclusive的方式,我表示赞同。
(2)对于您是在cuda程序里直接使用我2#建议的方法,还是单独在个wrapper/loader里进行互斥访问,也可以。这是您的自由。

(3)对于您的报错API, 这里没有看懂,所以无法评价做法3是否可以。
(4)对于您的“显存被保护”的说法,依然没有看懂,所以无法无法评价做法4是否可以。