opengl - 多设备 OpenCL/OpenGL 环境

标签 opengl opencl gpu cpu openglcontext

我目前正在 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/

相关文章:

ios - 关于 CIContext、OpenGL 和 Metal (SWIFT) 的困惑。 CIContext 默认使用 CPU 还是 GPU?

c++ - 为什么我从 `CL_INVALID_MEM_OBJECT` 得到 `clSetKernelArg` ?

opencl - 内存分配 Nvidia vs AMD

cuda - GPU上的图形算法

opengl - GLSL memoryBarrierShared() 有用吗?

java - 我怎样才能不将纹理应用到模型的一部分?

在 opengl 中创建太阳系 - 照明未按计划工作

floating-point - NVIDIA GPU 的 OpenCL 中浮点值的原子加法?

c++ - OpenAcc标准中内核与并行指令之间的区别

gpu - 使用 GPU 的 Armadillo (+BLAS)