【问题标题】:Get total amount of GPU memory?获取 GPU 内存总量?
【发布时间】:2016-10-02 17:40:43
【问题描述】:

是否有一种简单可靠的方法来获取物理 GPU 内存的总量?

我已经尝试过了,但问题是它返回 4096MB,而我使用的是 6144MB 的 GTX 780,所以显示不正确。

代码:

using System.Management;        

private void getGpuMem()
{
    ManagementClass c = new ManagementClass("Win32_VideoController");
    foreach (ManagementObject o in c.GetInstances())
    {
        string gpuTotalMem = String.Format("{0} ", o["AdapterRam"]);
        Debug.Write(gpuTotalMem);
    }
}

【问题讨论】:

  • 我认为 Win32_VideoController 返回最大 4gb,因为它是 win32 util。
  • 不确定你是否看过这个msdn.microsoft.com/en-us/library/…
  • 如果你有多个 GPU 怎么办?
  • 我可以看到(winSat:专用视频内存)中的 6144MB 有没有办法使用它?好吧,如果你有多个 GPU,我只是假设它们具有相同数量的内存。跨度>

标签: c# .net wmi


【解决方案1】:

正如MSDN中所说的

与 Windows 显示驱动程序模型 (WDDM) 不兼容的硬件会为此类实例返回不准确的属性值。

这就是它返回 4gb 的原因。

你可以尝试使用CUDAfy.net

GPGPU gpu = CudafyHost.GetDevice(CudafyModes.Target, CudafyModes.DeviceId);
var c = gpu.GetDeviceProperties(true);
var p = c.TotalMemory;
Console.WriteLine(p);

【讨论】:

  • 当我用 CUDAfy 尝试 ^^ 时,我得到了一个巨大的数字:18446744073709551615
  • @PatrikFröhler 这是 int64 的最大数,奇怪
  • 我该如何“覆盖 ulong TotalMemory”也许这就是问题所在? hybriddsp.com/portals/0/cudafy/html/…
  • @PatrikFröhler 这只是方法声明。你不应该覆盖任何东西,你可以运行 cudafy 查看器(它是一个与 dll 一起使用的应用程序)吗?
  • 如果我运行 cudafy 查看器 > 检查 CUDA,返回:1device GTX 780 和 > 运行 CUDA 测试,返回:未找到 CUDA 目录。
【解决方案2】:

DirectX 有一个包装器,称为 SharpDX。 C++中有一个可编译的例子 https://code.msdn.microsoft.com/windowsdesktop/DirectX-Video-Memory-ee7d8319 一种 您可以在 Visual Studio 中使用 SharpDX 库(来自 NuGet 包管理器)重新创建代码,或者您可以只编译 C++ 代码并从您的 c# 代码中将 exe 作为进程调用。

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2017-09-02
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多