在具有多个GPU的Linux系统中,您如何确定哪个GPU正在运行X11,以及哪个完全免费地运行CUDA内核?在运行X11的低功率图形处理器和运行内核的高功率图形处理器的系统中,这可以通过一些启发式方法来确定,以使用更快的卡。但是在有两张相等卡片的系统上,这种方法是不能使用的。是否有CUDA和/或X11应用编程接口来确定这一点?
更新:命令'nvidia-smi -a‘显示"display“是否连接。我还没有确定这是指物理连接、逻辑连接(运行X11),还是两者兼而有之。在此命令上运行strace将显示大量ioctls被调用,但没有调用X11,因此假设该卡报告显示器已物理连接。
发布于 2011-07-28 19:43:01
在cudaDeviceProp结构中有一个设备属性kernelExecTimeoutEnabled,它将指示设备是否受制于显示看门狗定时器。这是判断给定CUDA设备是否运行X11 (或windows/Mac等价物)的最佳指标。
在PyCUDA中,您可以像这样查询设备状态:
In [1]: from pycuda import driver as drv
In [2]: drv.init()
In [3]: print drv.Device(0).get_attribute(drv.device_attribute.KERNEL_EXEC_TIMEOUT)
1
In [4]: print drv.Device(1).get_attribute(drv.device_attribute.KERNEL_EXEC_TIMEOUT)
0这里,设备0连接了显示器,而设备1是专用计算设备。
发布于 2011-06-22 03:10:13
我不知道有任何库函数可以检查这一点。然而,一个“黑客”出现在脑海中: X11,或任何其他管理连接的显示器的系统组件必须消耗一些图形处理器内存。
因此,请检查两个设备通过'cudaGetDeviceProperties'报告的可用全局内存量是否相同,然后检查“totalGlobalMem”字段的值。如果相同,请尝试在每个GPU上分配相同(或略低)的内存量,并查看哪个内存分配失败(cudaMalloc返回错误标志)。
前段时间我在某处读到(我不记得在哪里了),当你提高显示器分辨率时,当GPU上有一个活动的CUDA上下文时,该上下文可能会失效。这暗示了上述建议可能会奏效。但是请注意,我从来没有真正尝试过它。这只是我的胡思乱想。
如果您设法确认它可以工作,或者不能工作,请让我们知道!
https://stackoverflow.com/questions/6428945
复制相似问题