3

对于 NVIDIA 显卡,您可以将两个合二为一 (SLI)。对于 .NET 桌面应用程序,我需要能够检查 SLI 是否已启用。这可能吗?

4

1 回答 1

3

这应该是可能的。

根据 nVidia 文档,您可以通过 NVCPL.DLL进行查询(喜欢文档)。

要使用的调用是NvCplGetDataInt()(第 67 页),带有参数,NVCPL_API_NUMBER_OF_SLI_GPUS或者NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE您应该获取所需的信息。

为了访问此信息,您需要 P/Invoke。如果可以统计链接NVCPL.DLL,您只需创建正确的导入(静态外部方法)就可以了。否则,您还可以选择LoadLibraryandGetEntryPoint方式并使用Marshal该类来创建代表要调用的函数的委托的实例(使用正确的参数声明)。

编辑: 以下代码段可能会让您入门(不过我没有 nVidia 卡,因此完全未经测试,风险自负;)):

public const int NVCPL_API_NUMBER_OF_GPUS =7;    // Graphics card number of GPUs. 
public const int NVCPL_API_NUMBER_OF_SLI_GPUS = 8;    // Graphics card number of SLI GPU clusters available. 
public const int NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE = 9;    // Get/Set SLI multi-GPU redering mode.  

[DllImport("NVCPL.DLL", CallingConvention=CallingConvention.Cdecl)]
public static extern bool nvCplGetDataInt([In] int lFlag, [Out] out int plInfo);

public static void Main()   {
    int sliGpuCount;
    if (nvCplGetDataInt(NVCPL_API_NUMBER_OF_SLI_GPUS, out sliGpuCount)) {
        // we got the result
        Console.WriteLine(string.Format("SLI GPU present: {0}", sliGpuCount));
    } else {
        // something did go wrong
        Console.WriteLine("Failed to query NV data");
    }
}
于 2009-12-11T20:06:23.403 回答