【问题标题】:OpenCL/OpenGL Interop dimensions of a renderbuffer in relation to workgroup sizes与工作组大小相关的渲染缓冲区的 OpenCL/OpenGL 互操作尺寸
【发布时间】:2013-10-28 22:21:23
【问题描述】:

我正在对 OpenCL/OpenGL 互操作进行一些测试。其中之一包括创建一个带有附加渲染缓冲区的 OpenGL FBO。我正在尝试将像素写入内核中关联的 OpenCL 内存对象(image2d_t),将所有内容保留在 GPU 上,并将 FBO 逐帧传输到主 OpenGL 帧缓冲区。帧缓冲区显示在可调整大小的窗口中,因此渲染缓冲区的大小可以变化。

如果我尝试运行内核,我会收到 CL_INVALID_WORKGROUP_SIZE 大小错误,除非宽度和高度尺寸是(本地)工作组大小的倍数。

这真的有必要吗?如果可以避免的话,我不喜欢填充额外的内存,引入宽度/高度参数并在内核中添加额外的边界检查...... 我也不想只使用 1 的工作组大小 ;-)

【问题讨论】:

  • 您需要特定的本地大小吗?或者您的内核是否支持任何本地大小?在后一种情况下,不要指定任何大小,它会起作用。

标签: c++ opengl interop opencl fbo


【解决方案1】:

是的,在最高 1.2 的 OpenCL 规范中规定,全局大小应为局部大小的倍数。在 2.0 中他们放宽了这一点,但当然还没有 2.0 实现。

常见的解决方法是将全局工作大小四舍五入为本地工作大小的下一个倍数,但将所需的(实际)全局大小作为参数传递,然后在内核中检查 global_id(0)/ global_id(1) 小于实际工作前的大小。

或者,将 NULL 作为本地工作大小传递并让运行时选择(但针对硬件调整的本地工作大小通常更快)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2016-09-15
    • 1970-01-01
    • 2012-04-12
    • 2013-07-31
    相关资源
    最近更新 更多