我有一些内核正在处理gpu,但是我不能假设代码只能在具有兼容gpu的计算机上使用。我试图使用cpu设备运行相同的内核,但是当我尝试创建上下文时,我经常会遇到OutOfHostMemory错误。
我试过在运行gpu代码的同一台计算机上但是选择cpu作为我的设备,并且在只有板载图形的计算机上,出现的唯一设备是cpu - 两者都给我同样的错误。< / p>
我已经确认我可以使用设备(GetDeviceInfo)进行其他调用,然后我回到了我期待的内容。
导致此错误的原因是什么?该文档仅说'主机内存不足',但这对我没有帮助。
修改:对评论的反馈
我使用的代码是:
ErrorCode error;
Platform[] platforms = Cl.GetPlatformIDs(out error);
List<Device> devicesList = platforms.SelectMany(platform => Cl.GetDeviceIDs(platform, DeviceType.Gpu, out error)).ToList();
if (devicesList.Count == 0)
{
// no gpus detected - revert to cpus
devicesList = platforms.SelectMany(platform => Cl.GetDeviceIDs(platform, DeviceType.Cpu, out error)).ToList();
}
// select first device in list
Device device = devicesList[0];
// confirm we can talk to the device
InfoBuffer infoBuffer = Cl.GetDeviceInfo(device, DeviceInfo.Name, out error);
info = infoBuffer.ToString();
string name = infoBuffer.ToString();
// Try to create context
Context context = Cl.CreateContext(null, 1, new[] { this.Device }, this.ContextNotify, IntPtr.Zero, out error);
// this gives error: OutOfHostMemory
以前返回的所有错误代码都是成功的,我可以看到设备的名称,无论我是否使用gpu或cpu,但我只能在使用gpu时成功创建上下文。
我认为我还没有足够的能力击中任何无限循环,而且在这些调用之前我还没有在opencCl中做过其他任何事情。