.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
필요한 정보를 얻어야 합니다.
이 정보에 액세스하려면 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");
}
}
제휴하지 않습니다 StackOverflow