检测 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 的机器相同的方式运行,无论如何,这个代码应该安全地处理这两个假设。
在 运行使用 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 的机器相同的方式运行,无论如何,这个代码应该安全地处理这两个假设。