代码之家  ›  专栏  ›  技术社区  ›  sam_mcelhinney

Boost Sort和OpenCL缓冲区

  •  1
  • sam_mcelhinney  · 技术社区  · 9 年前

    Boost函数(排序等)是否可以在已经在设备缓冲区中的数组上操作?

    例如;我在设备上的一个vbo中有一系列点,我一直在该设备上操作内核函数;我想对它们进行排序,但避免多次来回拉取所有数据。

    或者是唯一一个写完整排序内核的选项吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   DarkZeros    9 年前

    您可以创建 boost::compute::buffer(cl_mem m);

    默认情况下,它将获取缓冲区所有权(增加引用)。所以你可以打电话 clReleaseMemObject() 在通过它之后。(或者如果您使用C++,只需让cl::Buffer的析构函数去掉引用)。

    但真正的问题是,这两种情况应该是相同的。因此,您需要将boost的上下文设置为boost之外使用的相同上下文。通过使用 boost::compute::context(cl_context c);

    同样,ref计数器将自动递增,因此您可以继续以相同的方式使用conext,并调用相同的 clReleaseContext() .

    完成之后,您可以调用普通的boost函数来执行排序等。。