In .NET 3.5 C#gibt es eine Möglichkeit, festzustellen, ob der NVIDIA -SLI -Modus aktiv ist
Frage
Für NVIDIA -Grafikkarten können Sie zwei als eine (SLI) arbeiten lassen. Für eine .NET -Desktop -Anwendung muss ich in der Lage sein, zu überprüfen, ob SLI aktiviert ist. Ist das möglich?
Lösung
Das sollte möglich sein.
Nach den Nvidia -Dokumenten können Sie dies abfragen via nvcpl.dll (gern Dokumentation).
Der zu verwendende Anruf ist NvCplGetDataInt()
(Seite 67) mit dem Argument NVCPL_API_NUMBER_OF_SLI_GPUS
oder NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE
Sie sollten die erforderlichen Informationen erhalten.
Um auf diese Informationen zuzugreifen, benötigen Sie P/Invoke. Wenn es in Ordnung ist, statistisch zu verknüpfen NVCPL.DLL
Sie müssen nur den richtigen Import (statische externe Methode) erstellen und es geht Ihnen gut. Andernfalls können Sie auch die auswählen LoadLibrary
und GetEntryPoint
Weg und benutze die Marshal
Klasse zum Erstellen einer Instanz eines Delegierten (mit den richtigen Argumenten deklariert), die die zu aufgerufene Funktion darstellt.
Bearbeiten:Das folgende Ausschnitt kann Ihnen den Einstieg bringen (ich habe jedoch keine Nvidia -Karte, also ist das völlig ungetestet und auf eigenes Risiko;)):
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");
}
}