In .NET 3.5 C #, c'è un modo per rilevare se la modalità NVIDIA SLI è attiva
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?
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");
}
}