.NET 3.5 C#에서 NVIDIA SLI 모드가 활성화되어 있는지 감지하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1890456

  •  19-09-2019
  •  | 
  •  

문제

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");
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top