我目前正在 OpenCL 中编写烟雾模拟,我使用 OpenGL (freeglut) 来可视化烟雾。
我的电脑是华硕 Zenbook,配备 Intel i7 CPU 和 Intel HD 4000 GPU,它们都被 OpenCL“识别”(HD 4000 = CL_DEVICE_TYP_GPU & Intel i7 = CL_DEVICE_TYPE_CPU)并包含在我的设备列表中。两种设备都支持“cl_khr_gl_sharing”。
我正在设置 OGL/OCL 上下文及其属性,如下所示:
cl_context_properties props[] =
{
CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(),
CL_WGL_HDC_KHR, (cl_context_properties)wglGetCurrentDC(),
CL_CONTEXT_PLATFORM, (cl_context_properties)m_platformID,
NULL
};
cl_device_id devices[32];
size_t size;
clGetGLContextInfoKHR_fn clGetGLContextInfo = (clGetGLContextInfoKHR_fn)clGetExtensionFunctionAddressForPlatform(m_platformID, "clGetGLContextInfoKHR");
clGetGLContextInfo(props, CL_DEVICES_FOR_GL_CONTEXT_KHR, 32 * sizeof(cl_device_id), devices, &size);
cl_uint deviceCount = (cl_uint)(size/sizeof(cl_device_id));
cl_context cntxt = clCreateContext(props, deviceCount, devices, NULL, NULL, &status);
但是 clCreateContext 函数返回 -33,这是“INVALID_DEVICE”的错误代码。在上面的代码中,我的“devicecount”变量变为等于 2,这应该意味着两个设备都与当前 GL 上下文相关联。
只有当两个设备中的任何一个分别传递时,创建上下文才有效,在这些情况下模拟运行良好(当然在 CPU 上非常慢)。
类似的问题是this一个,它已经得到回答,但老实说,我真的不明白答案。
所以,我的问题是:
是否可以使用多个 CL 设备在 OpenCL 和 OpenGL 之间创建共享上下文?
如果是的话..
我用来创建上下文的方法是否正确,或者是否有另一种方法可以使用多个设备设置 OCL/OGL 上下文?
最佳答案
是的,您可以创建具有一个 GL 设备和多个 CL 设备的上下文。 如果相应供应商支持 inter-gpu 互操作,则每个 GL 设备都可以与任何 CL 设备进行互操作。
关于opengl - 多设备 OpenCL/OpenGL 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914774/