Pergunta

Para as placas gráficas da NVIDIA, você pode ter dois funcionando como uma (SLI). Para um aplicativo .NET Desktop, preciso verificar se o SLI está ativado. Isso é possível?

Foi útil?

Solução

Isso deve ser possível.

De acordo com os documentos da NVIDIA, você pode consultar isso via nvcpl.dll (gostei de documentação).

A chamada a ser usada é NvCplGetDataInt() (página 67), com o argumento NVCPL_API_NUMBER_OF_SLI_GPUS ou NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE você deve obter as informações necessárias.

Em termos de acesso a essas informações, você precisará de P/Invoke. Se não for bom vincular estatisticamente NVCPL.DLL Você só precisa criar a importação correta (método externo estático) e está bem. Caso contrário, você também pode escolher o LoadLibrary e GetEntryPoint maneira e usar o Marshal classe para criar uma instância de um delegado (declarado com os argumentos corretos) que representa a função a ser chamada.

Editar:O snippet seguinte pode começar você (eu não tenho um cartão Nvidia, então isso é completamente não testado e por seu próprio risco;)):

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");
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top