c++ - boost::compute,将指针传递给闭包
问题描述
晚上好!我正在编写一个高性能应用程序并尝试使用 boost 来加速复杂的计算。
我的问题的本质:有没有办法将指向数组的外部指针(如float4_ *
)传递给 a BOOST_COMPUTE_CLOSURE
?我想得到类似的东西:
float4_ *normals = new float4_[NORMALS_NO];
BOOST_COMPUTE_CLOSURE(void, evalNormals, (int4_ indices), (normals), {
...
});
解决方案
库作者在此处报告的文档BOOST_COMPUTE_CLOSURE
略显稀疏,但一些测试用例显示了如何捕获s 和s。它实际上是透明地工作的,与标量相同。vector
array
例如,捕获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));
推荐阅读
- python - 在 EC2 实例中调用绘图时出现“未知元素 o”
- azure - 具有承载授权的 Azure 多租户 ASP.Net-Core 应用程序
- c# - 如何以编程方式下载 Azure DevOps 中的附件?
- javascript - Apple Music API 参考
- swift - Swift 闭包中的“self”
- python - 将包含另一个具有多个值的字典列表的字典列表转换为数据框
- php - 使用phpspreadsheet在特定列中绑定类型字符串
- firebase - 如何有效地搜索嵌套的用户帖子数据
- html - 使用元素标记关键字而不突出显示它们在语义上是否正确?
- php - 使用 mysqlnd 时如何增加 PHP PDO 最大缓冲区大小?