以编程方式确定NUMA节点或PCI总线,设备,Direct3D9Ex设备的功能号

时间:2017-08-21 09:25:58

标签: windows direct3d numa

我正在寻找一种方法来以编程方式确定特定Direct3D9Ex显示适配器连接到哪个NUMA节点,以便我可以为该节点上的主机到设备传输分配内存。

我可以使用IDirect3D9Ex :: GetAdapterIdentifier()来获取格式为“\。\ DISPLAY1”的DeviceName。

我可以使用EnumDisplayDevices()来枚举显示设备,并将此DeviceName与“\ Registry \ Machine \ System \ CurrentControlSet \ Control \ Video”形式的DeviceKey匹配{62E184AC-2614-4AA8-844C-47454B92C142} \ 0000 ”

我可以使用SetupDiEnumDeviceInfo()枚举设备和SetupDiGetDeviceProperty()来查询属性,包括DEVPKEY_NAME(例如“NVIDIA GeForce GTX TITAN X”),DEVPKEY_Device_LocationInfo(例如“PCI总线2,设备0,功能0”)和DEVPKEY_Device_Numa_Node(例如0)但我找不到任何东西将其中一个设备链接到EnumDisplayDevices()中的DeviceName或DeviceKey。

我可以做同样的事情是CUDA,因为cudaDeviceGetPCIBusId()提供了PCI总线,设备和功能信息,但我还需要在Direct3D9Ex中进行(当CUDA不可用时)。

我注意到的另一件事是,在“HKLM \ SYSTEM \ CurrentControlSet \ Enum \ PCI \ VEN_10DE& DEV_17C2& SUBSYS_113210DE& REV_A1”下的注册表中,每个显示设备都有一个键,每个显示设备都包含另一个名为“设备参数”的键,其值为“{IDE”,形式为“{62E184AC-2614-4AA8-844C-47454B92C142}”。不幸的是,应用程序不应该直接读取这部分注册表,我不知道如何通过SETUPAPI获取相同的信息。

0 个答案:

没有答案