Domanda

Per le schede grafiche NVIDIA, si possono avere due lavorando come un unico (SLI). Per un'applicazione .NET desktop, ho bisogno di essere in grado di verificare che SLI è abilitato. È possibile?

È stato utile?

Soluzione

Questo dovrebbe essere possibile.

Secondo la documentazione nVidia, è possibile interrogare questo via nvcpl.dll (voluto documentazione).

La chiamata ad essere utilizzato è NvCplGetDataInt() (pagina 67), con la tesi NVCPL_API_NUMBER_OF_SLI_GPUS o NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE si dovrebbe ottenere le informazioni richieste.

In oder per accedere a queste informazioni, è necessario P / Invoke. Se è OK per statisticamente collegamento NVCPL.DLL è sufficiente per creare l'importazione corretta (metodo esterno statico) e che stai bene. In caso contrario, si può anche scegliere il modo LoadLibrary e GetEntryPoint e utilizzare la classe Marshal per creare un'istanza di un delegato (dichiarata con gli argomenti corretti), che rappresenta la funzione da chiamare.

Modifica Il seguente frammento può ottenerlo iniziato (non ho una scheda nVidia, però, in modo che è completamente testato e a proprio rischio;)):

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");
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top