في .NET 3.5 C #، هل هناك طريقة للكشف عن وضع NVIDIA SLI نشط
سؤال
بالنسبة لبطاقات الرسومات NVIDIA، يمكنك الحصول على عملين كواحد (SLI). للحصول على تطبيق .NET لسطح المكتب، أحتاج إلى أن أكون قادرا على التحقق من تمكين SLI. هل هذا ممكن؟
المحلول
يجب أن يكون ذلك ممكنا.
وفقا لمستندات NVIDIA، يمكنك الاستعلام عن هذا عبر nvcpl.dll. (معجبين بالوثائق).
المكالمة لاستخدامها NvCplGetDataInt()
(صفحة 67)، مع الحجة NVCPL_API_NUMBER_OF_SLI_GPUS
أو NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE
يجب أن تحصل على المعلومات المطلوبة.
في Oder للوصول إلى هذه المعلومات، ستحتاج إلى P / Invoke. إذا كان على ما يرام الرابط الإحصائي NVCPL.DLL
عليك فقط إنشاء الاستيراد الصحيحة (الطريقة الخارجية الثابتة) وأنت بخير. خلاف ذلك، يمكنك أيضا اختيار LoadLibrary
و GetEntryPoint
طريقة واستخدام Marshal
فئة لإنشاء مثيل من المفوض (معلن بالحجج الصحيحة) التي تمثل الوظيفة المراد استدعاءها.
تعديل:قد يبدأك المقتطف التالي (ليس لدي بطاقة NVIDIA، بحيث لا تختبر تماما وعلى مسؤوليتك الخاصة؛):
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");
}
}