2009-12-11 6 views

Répondre

3

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"); 
    } 
} 
+1

API nvcpl est maintenant obsolète. Cela ne marche plus :( – docdocdoc9