Pour les cartes graphiques NVIDIA, vous pouvez avoir deux travailler comme un (SLI). Pour une application de bureau .NET, je dois pouvoir vérifier que SLI est activé. Est-ce possible?Dans .NET 3.5 C#, est-il un moyen de détecter si le mode NVIDIA SLI est activé
Répondre
Cela devrait être possible.
Selon les docs nVidia, vous pouvez interroger ce via NVCPL.DLL (à la documentation aimé).
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.
En oder pour accéder à ces informations, vous aurez besoin P/Invoke. Si c'est OK pour 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 la façon dont LoadLibrary
et GetEntryPoint
et utiliser la classe Marshal
pour créer une instance d'un délégué (déclarée avec les bons arguments) qui représente la fonction à appeler.
Edit: L'extrait suivant peut vous aider à démarrer (je n'ai pas une carte nVidia, donc c'est complètement non testé et vos propres risques;)):
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");
}
}
API nvcpl est maintenant obsolète. Cela ne marche plus :( – docdocdoc9