检测 GPU 在 AleaGpu 上是否可用

Detect if GPU Available on AleaGpu

在 运行使用 AleaGPU 编写 GPU 代码之前是否可以检测 GPU 是否存在?

Gpu.Default 会为空吗?此对象上是否有可以检查的属性?

如果有 GPU,我基本上想要 运行 更快的算法版本,否则我想要 运行 原始的慢速版本。

这可能是最简单的方法:(它让你 API 独立)

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DisplayConfiguration");

var q = searcher.Get()
                .SelectMany(x => x.Properties)
                .Where(x => x.Name == "Description")

foreach (var item in q)
{
   yield return item.Value.ToString();
}

我禁用了我的 GPU 然后尝试了这条线:

Console.WriteLine(Alea.Device.Devices.Count().ToString());

我得到了这个异常 System.Exception was unhandled Message=[CUDAError] CUDA_ERROR_UNKNOWN,如果你试图访问 Gpu.Default,你也会得到同样的异常。所以你可以这样做:

bool GpuEnabled = false;
try
{
    GpuEnabled = Alea.Device.Devices.Count() > 0;
}
catch
{
    GpuEnabled = false;
}
Console.WriteLine(GpuEnabled.ToString());

注意:我不确定 Alea 是否抛出异常,因为我有一个 GPU 但它被禁用了,或者它会以与​​根本没有 GPU 的机器相同的方式运行,无论如何,这个代码应该安全地处理这两个假设。