代码之家  ›  专栏  ›  技术社区  ›  Adam Kane

在.NET 3.5 c_中,有没有一种方法可以检测Nvidia SLI模式是否处于活动状态?

  •  3
  • Adam Kane  · 技术社区  · 15 年前

    对于NVIDIA图形卡,您可以有两个作为一个工作(SLI)。对于.NET桌面应用程序,我需要能够检查是否启用了SLI。这有可能吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Lucero    15 年前

    这应该是可能的。

    根据Nvidia文档,您可以查询 via NVCPL.DLL (喜欢记录)。

    要使用的呼叫是 NvCplGetDataInt() (第67页),连同论点 NVCPL_API_NUMBER_OF_SLI_GPUS NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE 您应该获得所需的信息。

    为了访问这些信息,您需要P/Invoke。如果可以统计链接 NVCPL.DLL 您只需创建正确的导入(静态外部方法),就可以了。否则,您也可以选择 LoadLibrary GetEntryPoint 途径与使用 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");
        }
    }