gpt4 book ai didi

linux - 如何在 Linux 上获取连接到 gpu 的显示器数量?

转载 作者:可可西里 更新时间:2023-11-01 11:46:27 27 4
gpt4 key购买 nike

我需要确定给定的 CUDA 设备是否连接了显示器。我不知道执行此操作的 CUDA 函数。

在 Windows 上,我可以使用 NVAPI 获取连接的显示器数量和每个设备的 PCI 总线/插槽 ID。使用后者,我可以找到匹配的 CUDA 设备(通过调用 cudaGetDeviceProperties)。

我如何在 NVAPI 不可用的 Linux 上做同样的事情?

从技术上讲,我需要的是替代以下代码的 Linux:

NvAPI_Initialize();

NvPhysicalGpuHandle gpuHandles[64];
NvU32 numOfGPUs;
NvAPI_EnumPhysicalGPUs(gpuHandles, &numOfGPUs);

for (int i = 0; i < numOfGPUs; i++)
{
NvU32 connected_displays = 0;
NvU32 busId = 0;
NvU32 busSlotId = 0;

NvAPI_GPU_GetConnectedDisplayIds(gpuHandles[i], NULL, &connected_displays, NULL);
NvAPI_GPU_GetBusId(gpuHandles[i], &busId);
NvAPI_GPU_GetBusSlotId(gpuHandles[i], &busSlotId);

printf("Current device: %d\n", i);
printf("Number of connected displays: %u\n", connected_displays);
printf("Bus id: %u\tBus slot id: %u\n", busId, busSlotId);
}

NvAPI_Unload();

最佳答案

Linux 下最类似的方法是使用 NVCtrl API,它是 nvidia-settings(Linux NVIDIA 控制面板应用程序)提供的。

如何下​​载 nvidia-settings 源包在 linux 驱动程序发行说明中有说明。具体来说,您可以找到针对特定驱动程序版本的各种包 here

选择最接近您的驱动程序版本的软件包。

一旦您下载并解压缩了 nvidia-settings 源代码,您将找到一个 samples 目录。在该目录中是一个示例程序,它具有您想要的必要框架。具体来说,查看 nv-control-targets.c。该文件中的以下函数将执行您想要的操作:

    /* Connected Display Devices on GPU */

ret = XNVCTRLQueryTargetAttribute(dpy,
NV_CTRL_TARGET_TYPE_GPU,
gpu, // target_id
0, // display_mask
NV_CTRL_CONNECTED_DISPLAYS,
&display_devices);
if (!ret) {
fprintf(stderr, "Failed to query connected displays\n");
return 1;
}
printf(" Display Device Mask (Connected) : 0x%08x\n",
display_devices);

请注意,该程序 (nv-control-targets.c) 顶部有一些准备/设置函数调用也需要执行。

NVML中还有一个功能(Display Mode) (nvidia-smi 基于 NVML)会通知您 GPU 是否正在托管显示器,但我不确定它能否提供您想要的粒度。

实际上,在重新阅读您的问题后,NVML 显示模式可能足以满足您的需求。引用 API 文档 here , p46:

7.10.2.10 nvmlReturn_t DECLDIR nvmlDeviceGetDisplayMode (nvmlDevice_t device, nvmlEnableState_t 
display)
Retrieves the display mode for the device.
For Tesla ™and Quadro ®products from the Fermi and Kepler families.
This method indicates whether a physical display is currently connected to the device.
See nvmlEnableState_t for details on allowed modes.
Parameters:
device The identifier of the target device
display Reference in which to return the display mode
Returns:
• NVML_SUCCESS if display has been set
• NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
• NVML_ERROR_INVALID_ARGUMENT if device is invalid or display is NULL
• NVML_ERROR_NOT_SUPPORTED if the device does not support this feature

关于linux - 如何在 Linux 上获取连接到 gpu 的显示器数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17994896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com