В .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");
}
}