Dans .NET 3.5 C #, y a-t-il un moyen de détecter si le mode nvidia sli est actif
Question
Pour les cartes graphiques NVIDIA, vous pouvez avoir deux fonctionnant comme One (SLI). Pour une application .NET Desktop, je dois être en mesure de vérifier que SLI est activé. Est-ce possible?
La solution
Cela devrait être possible.
Selon les documents Nvidia, vous pouvez interroger ceci via nvcpl.dll (aimait la documentation).
L'appel à utiliser est NvCplGetDataInt()
(page 67), avec l'argument NVCPL_API_NUMBER_OF_SLI_GPUS
ou NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE
vous devez obtenir les informations requises.
Dans ODER pour accéder à ces informations, vous aurez besoin de P / Invoke. S'il est normal de lier statistiquement NVCPL.DLL
Il vous suffit de créer l'importation correcte (méthode externe statique) et tout va bien. Sinon, vous pouvez également choisir le LoadLibrary
et GetEntryPoint
chemin et utiliser le Marshal
classe pour créer une instance d'un délégué (déclaré avec les arguments corrects) qui représente la fonction à appeler.
Éditer:L'extrait suivant peut vous aider à démarrer (je n'ai pas de carte nvidia, donc c'est complètement non testé et à votre propre risque;)):
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");
}
}