首页 > 解决方案 > boost::compute,将指针传递给闭包

问题描述

晚上好!我正在编写一个高性能应用程序并尝试使用 boost 来加速复杂的计算。

我的问题的本质:有没有办法将指向数组的外部指针(如float4_ *)传递给 a BOOST_COMPUTE_CLOSURE?我想得到类似的东西:

float4_ *normals = new float4_[NORMALS_NO];
BOOST_COMPUTE_CLOSURE(void, evalNormals, (int4_ indices), (normals), {
    ...
});

标签: c++pointersboostclosuresboost-compute

解决方案


库作者在此处报告的文档BOOST_COMPUTE_CLOSURE略显稀疏,但一些测试用例显示了如何捕获s 和s。它实际上是透明地工作的,与标量相同。vectorarray

例如,捕获vec

int data[] = {6, 7, 8, 9};
compute::vector<int> vec(data, data + 4, queue);

BOOST_COMPUTE_CLOSURE(int, get_vec, (int i), (vec), { return vec[i]; });

// run using a counting iterator to copy from vec to output
compute::vector<int> output(4, context);
compute::transform(
    compute::make_counting_iterator(0),
    compute::make_counting_iterator(4),
    output.begin(),
    get_vec,
    queue);
CHECK_RANGE_EQUAL(int, 4, output, (6, 7, 8, 9));

推荐阅读