c++ - boost 排序和 OpenCL 缓冲区

标签 c++ sorting boost opencl

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/

相关文章:

c++ - 如何从 C++ 源代码中提取所有类型定义、结构和 union

c++ - GLIBCXX 版本

c++ - 将本地 unique_ptr 作为 shared_ptr 返回

c++ - boost::unit_test::data::random(-FLT_MAX, FLT_MAX) 只生成 +Infinity

c++ - 根据 boost 1.68 的文档,旧的 io_context::post 已被弃用。推荐使用 boost::asio::post() 。谁能给我举个例子吗?

c++ - 为什么有变异的 Boost.Range 算法的 const 重载?

c - C中的嵌套合并排序不起作用

c - C 中的双向链表排序

c++ - 对象的排序 vector

c++ - Boost.Tests 入口点在哪里?