3

NVIDIAグラフィックカードの場合、2つを1つとして機能させることができます(SLI)。.NETデスクトップアプリケーションの場合、SLIが有効になっていることを確認できる必要があります。これは可能ですか?

4

1 に答える 1

3

それは可能であるべきです。

nVidiaのドキュメントによると、これはNVCPL.DLLを介してクエリできます(ドキュメントが好きです)。

使用する呼び出しはNvCplGetDataInt()(67 ページ) で、引数を指定するNVCPL_API_NUMBER_OF_SLI_GPUSNVCPL_API_SLI_MULTI_GPU_RENDERING_MODE、必要な情報を取得する必要があります。

この情報にアクセスするには、P/Invoke が必要です。統計的にリンクしても問題ない場合はNVCPL.DLL、正しいインポート (静的外部メソッド) を作成するだけで問題ありません。それ以外の場合は、LoadLibraryandの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");
    }
}
于 2009-12-11T20:06:23.403 に答える