Boost 函数(排序等)是否可以对设备缓冲区中已有的数组进行操作?
例如;我在设备上的 vbo 中有一个点数组,我一直在其上运行内核函数;我想对它们进行排序,但要避免多次来回拉取所有数据。
或者是编写完整排序内核的唯一选择吗?
最佳答案
您可以创建一个boost::compute::buffer(cl_mem m);
默认情况下它将获取缓冲区所有权(增加 ref)。所以你可以在传递它之后调用 clReleaseMemObject()
。 (或者,如果您使用的是 C++,只需让 cl::Buffer 的析构函数摆脱引用即可)。
但真正的问题是两个上下文应该相同。因此,您需要将 boost 的上下文设置为您在 boost 之外使用的相同上下文。通过使用 boost::compute::context(cl_context c);
同样,引用计数器会自动递增,因此您可以继续以相同的方式使用 conetext,并调用相同的 clReleaseContext()
。
完成后,您可以调用普通的 boost 函数来执行排序等操作。
关于c++ - boost 排序和 OpenCL 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034484/