为什么我不能在cpu设备上创建上下文?

时间:2014-11-26 21:34:54

标签: c# opencl.net

我有一些内核正在处理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中做过其他任何事情。

0 个答案:

没有答案