在使用AleaGPU运行GPU代码之前是否可以检测GPU是否存在?
Gpu.Default
会无效吗?这个对象上有属性可以检查吗?
如果GPU存在,我基本上想要运行更快的算法版本,否则我想运行原始的慢速版本。
我已经禁用了我的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的机器的行为相同,无论如何,这个代码应该处理这两个假设安全。
这可能是最简单的方法:(它让你独立于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();
}