web-dev-qa-db-ja.com

C#でGPU情報を取得するにはどうすればよいですか?

ユーザーのビデオグラフィックカードに関する情報(GPUクロック速度、バス幅など)をチェックするソフトウェアを作成しようとしています。

TechPowerUp GPU-Zソフトウェアでこの情報を確認し、次の図に示すいくつかのSDKの名前を確認しました。

enter image description here

CUDA Toolkit 7 Nvidiaの場合 APP SDK AMDの場合

今私は2つの質問があります:

  1. C#コードを使用してこの情報にアクセスするにはどうすればよいですか?
  2. CUDA Toolkit7とAPPSDKは私の問題の解決に役立ちますか?もしそうなら、どうやって?
11
Shahryar

たぶん Win32_VideoController CLASSまたは GPUinformation Class が役に立ちます。

例:

using System.Management;

public partial class Win_Win32_VideoController : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
ManagementObjectSearcher objvide = new ManagementObjectSearcher("select * from Win32_VideoController");

        foreach (ManagementObject obj in objvide.Get())
        {
            Response.Write("Name  -  " + obj["Name"] + "</br>");
            Response.Write("DeviceID  -  " + obj["DeviceID"] + "</br>");
            Response.Write("AdapterRAM  -  " + obj["AdapterRAM"] + "</br>");
            Response.Write("AdapterDACType  -  " + obj["AdapterDACType"] + "</br>");
            Response.Write("Monochrome  -  " + obj["Monochrome"] + "</br>");
            Response.Write("InstalledDisplayDrivers  -  " + obj["InstalledDisplayDrivers"] + "</br>");
            Response.Write("DriverVersion  -  " + obj["DriverVersion"] + "</br>");
            Response.Write("VideoProcessor  -  " + obj["VideoProcessor"] + "</br>");
            Response.Write("VideoArchitecture  -  " + obj["VideoArchitecture"] + "</br>");
            Response.Write("VideoMemoryType  -  " + obj["VideoMemoryType"] + "</br>");
        }
    }
}

CUDAfy.net ライブラリを参照することもできます。

9
PCpractico

このライブラリを使用して基本情報を取得できます。

https://github.com/falahati/NvAPIWrapper


今のところ、クロック速度やGPUの使用はサポートされておらず、センサー情報(temp)もサポートされていませんが、バス幅、メモリ、使用済みメモリ、コアを取得できます。ただし、ライブラリに新しい関数を追加するための確固たる基盤があり、その結果、ライブラリに追加する必要があるNVAPIの関数がわかっている場合は、おそらく1時間以内に、ニーズに合わせて拡張することもできます。マーシャリングの基本に精通しています。

2018年の更新:GPUクロック情報、温度センサー、および使用状況情報をサポートするようになりました。

ただし、現在取得可能な情報については、現在接続されているすべての物理GPUのリストを取得する必要があります。これは、NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs()静的メソッドを使用して可能です。このメソッドは、NvAPIWrapper.GPU.PhysicalGPUsの配列を返します。

これで、このクラスのプロパティを使用して、必要な情報を取得できます。

  • NvAPIWrapper.GPU.PhysicalGPU.Bios:VBIOSバージョンを提供します
  • NvAPIWrapper.GPU.PhysicalGPU.Board:グラフィックボード情報を提供します
  • NvAPIWrapper.GPU.PhysicalGPU.BusInfo:GPUバス情報を取得します
  • NvAPIWrapper.GPU.PhysicalGPU.CUDACores:このGPUに定義されているコアの総数を取得します
  • NvAPIWrapper.GPU.PhysicalGPU.CurrentPCIEDownStreamWidth:ダウンストリームのPCIEインターフェースに使用されているPCIEレーンの数を取得します
  • NvAPIWrapper.GPU.PhysicalGPU.FullName:GPUのフルネームを取得します
  • NvAPIWrapper.GPU.PhysicalGPU.GPUType:GPUが統合されているかディスクリートであるかを示します
  • NvAPIWrapper.GPU.PhysicalGPU.IRQ:GPU割り込み番号を取得します
  • NvAPIWrapper.GPU.PhysicalGPU.IsQuadro:このGPUがQuadro製品ラインのものであるかどうかを示します
  • NvAPIWrapper.GPU.PhysicalGPU.MemoryInfo:メモリとメモリ使用量に関するすべての情報を提供します
  • NvAPIWrapper.GPU.PhysicalGPU.PCIIdentifiers:ハードウェアPCIIDに関する情報を提供します
  • NvAPIWrapper.GPU.PhysicalGPU.PhysicalFrameBufferSizeおよびNvAPIWrapper.GPU.PhysicalGPU.VirtualFrameBufferSize:このGPUのフレームバッファーのサイズをKB単位で取得します
  • NvAPIWrapper.GPU.PhysicalGPU.ShaderSubPipeLines:GPUシェーダーサブパイプまたはSMユニットの数を取得します

このバージョンのライブラリにない特定の機能が必要な場合は、お気軽に問題を開いてください。

3

AMDツールの経験はありませんが、C#のNVIDIAのNVAPI( https://developer.nvidia.com/nvapi )を使用することができました。

私たちが使用するバージョンは静的ライブラリとしてのみ提供されており、p/invokeはできません。最終的に、C++/CLRでシンラッパーライブラリを作成し、C#コードから呼び出すことができました。

3
Graham Dawes