问题标签 [boost-compute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
210 浏览

c++ - 使用 zip 迭代器调用 boost::compute::sort() 会导致构建错误

我在构建使用 Boost.Compute 库的程序时遇到问题。我使用zip_iterator由两个浮点迭代器组成的元组组成的两个 s 来使用该函数对两个浮点向量进行排序boost::compute::sort()。我的代码(compute::vector之前两个都填充了浮点值):

编译时,我收到:

正如您在我的代码中看到的,我使用Sort_Iterator之前声明的两个 s 调用该函数。两个参数具有相同的类型,那么编译器为什么要假设任何歧义呢?我不明白这个。

但是,如果我尝试显式类型转换函数参数,例如

错误消息的后半部分更改为:

0 投票
1 回答
300 浏览

boost-compute - boost::compute 复制自定义结构

是否可以使用 boost::compute 复制自定义结构的数组?例如

0 投票
1 回答
816 浏览

c++ - 如何调用 boost_compute 'BOOST_COMPUTE_FUNCTION' 定义的函数?

我目前正在探索 boost_compute。不幸的是,文档页面和示例比我需要了解的要少。

给定以下缩小的代码:

如何调用“添加”函数以及该函数内部的迭代变量是什么?此外,我需要这种代码结构来进行更复杂的计算。

亲切的问候,托尼

0 投票
1 回答
192 浏览

c++ - 通过引用 boost::compute 闭包或函数来传递自定义结构的向量

我对 opencl 有点陌生,正在尝试学习正确使用 boost::compute。考虑以下代码:

我有一个要在 GPU 上处理的自定义结构向量(实际上比此处显示的要复杂得多)。在未注释的 BOOST_COMPUTE_CLOSURE 中,compute::transform按值传递结构,处理它们,然后将它们复制回来。

我想通过引用来传递这些,如注释掉的 BOOST_COMPUTE_CLOSURE 所示compute::for_each,但是当程序运行时内核无法编译(Build Program Failure),我还没有找到任何文档提到如何实现这一点。

我知道我可以通过使用和传递指向整个结构向量的指针来实现按引用传递(实际上是指针,因为它是 C99)BOOST_COMPUTE_STRINGIZE_SOURCE,但我想使用这些compute::...函数,因为这些函数看起来更优雅。

0 投票
1 回答
368 浏览

c++ - 在 boost::compute 中分配大向量

在尝试使用 boost::compute 时,我遇到了确定我可以在设备上分配的最大向量的问题(我对 boost::compute 还是很陌生)。以下代码片段

很明显,报告的 max_size() 既不是硬限制也不是强制执行的。我假设为了安全起见,我应该坚持报告的 max_size(),但是,如果我在大小为 max_size() 的设备上分配多个向量,那么我也会收到该Memory Object Allocation Failure消息。

  1. 使用 boost::compute 时处理(和避免)内存分配失败的正确/常用方法是什么?
  2. 如何确定在任何给定时刻可以分配的向量的最大大小(即设备可能已经包含分配的数据)?
  3. 如果我有太多数据,我可以让 boost::compute 自动分块处理它还是我必须自己分解它?
  4. 完成后如何释放设备上的内存?
0 投票
1 回答
135 浏览

boost - Boost::compute向量部分和的最快方法是什么

我有一个 10M 浮点数的向量。我想知道每 100 个元素的总和,所以总共有 10000 个总和。最快的方法是什么?

0 投票
1 回答
1395 浏览

opencl - 内存拷贝速度对比 CPU<->GPU

我现在正在学习 boost::compute openCL 包装库。我正在经历非常缓慢的复制过程。

如果我们将 CPU 到 CPU 的复制速度缩放为 1,那么 GPU 到 CPU、GPU 到 GPU、CPU 到 GPU 的复制速度有多快?

我不需要精确的数字。只是一个一般的想法将是一个很大的帮助。例如,CPU-CPU 至少比 GPU-GPU 快 10 倍。

0 投票
1 回答
539 浏览

c++ - OpenCL:是否可以将模板化对象用作 Boost::compute 的内核参数?

我的内核的函数签名如下:

我知道可以使用 c++ 的功能子集来编写内核,使用 AMD 的 OpenCL 实现的扩展,但生成的代码仅限于在 AMD 卡上运行。

2.0 之前版本的 OpenCL 语言标准规范限制了程序员使用 C99 编写内核,我相信 2.1 和 2.2 版本尚未广泛用于 Linux 发行版。但是,我在这里发现 Boost::compute 在某种程度上允许在内核规范中使用 c++ 功能的子集。但是,不清楚是否可以使用 Boos::compute 实现上述代码片段中的内核签名。在多大程度上可以实现这样的内核?代码示例将不胜感激。

0 投票
1 回答
1524 浏览

c++ - 从 boost::compute::detail::sha1 生成 boost::uuids::uuid

我正在尝试以这种方式从boost::compute::detail::sha1生成boost::uuids::uuid :

但是此代码因错误而失败Error occurred: invalid uuid string(见上文)

我正在使用 Visual Studio 2017,Boost 1.67

我的错误在哪里?如何从 boost::compute::detail::sha1 生成 boost::uuids::uuid

PS:该代码适用于以前的 boost 版本。

0 投票
1 回答
166 浏览

c++ - 一起使用 boost compute 和 boost::range 时,如何避免 boost::compute::zip_iterator 和 boost::iterators::zip_iterator 冲突?

我想boost::compute and boost::range一起使用,如下所示,但如果我取消注释该#include <boost/range/combine.hpp>行,我会收到一条错误消息,boost::compute::zip_iterator并且boost::iterators::zip_iterator是模棱两可的。有没有办法解决这个问题,以便我可以在同一个 cpp 文件中使用boost::compute和一起使用?boost::range我在 Windows vs2015 64bit 上使用。提升 1.67.0。

更新:我发现如果我尝试包含boost/iterator/zip_iterator.hpp而不是会发生相同的错误boost/range/combine.hpp,因此它不是特定于 Boost Range 库。

代码:

错误:

1>----- 构建开始:项目:demo,配置:Debug x64 ------ 1> demo.cpp 1> 这个头文件是实现细节并提供向后兼容性。1>C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(67): error C2668: 'boost::compute::make_zip_iterator': 对重载函数的模糊调用 1> C:\local\boost_1_67_0\boost /compute/iterator/zip_iterator.hpp(276): 注意: 可能是'boost::compute::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>> boost: :compute::make_zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::
T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C :\local\boost_1_67_0\boost/iterator/zip_iterator.hpp(357): 注意: 或
'boost::iterators::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>> boost::iterators::make_zip_iterator,boost::compute::buffer_iterator,boost: :tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type>>(IteratorTuple)' [使用参数相关查找找到] 1> with 1> [ 1> T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C:\local\boost_1_67_0\boost/compute/algorithm/ transform.hpp(67): 注意:在尝试匹配参数列表时 '(boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>)' 1> 与 1> [ 1>
T=boost::compute::float4_ 1> ] 1> C:\workspaces\compute_test\src\demo.cpp(45): 注意:见参考函数模板实例化'OutputIterator boost::compute::transform,boost: :compute::buffer_iterator,boost::compute::buffer_iterator,boost::compute::lambda::expression>(InputIterator1,InputIterator1,InputIterator2,OutputIterator,BinaryOperator,boost::compute::command_queue &)' 正在编译 1> 1> [ 1>
OutputIterator=boost::compute::buffer_iterator, 1>
T=boost::compute::float4_, 1>
Expr=boost::proto::exprns_::basic_expr,0>>,const boost: :compute::lambda::expression>,0>> &,const boost::compute::lambda::expression>,0>> &>,3>, 1>
InputIterator1=boost::compute::缓冲区迭代器,1>
InputIterator2=boost::compute::buffer_iterator, 1>
BinaryOperator=boost::compute::lambda::expression,0>>,const boost::compute::lambda::expression>,0>> &,const boost::compute::lambda::expression>,0> > &>,3>> 1> ] 1>C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(68): error C2668: 'boost::compute::make_zip_iterator': 对重载函数的模糊调用1> C:\local\boost_1_67_0\boost/compute/iterator/zip_iterator.hpp(276): 注意: 可能是'boost::compute::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type ,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type>> boost::compute::make_zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost: :tuples::null_type>>(IteratorTuple)' 1> with 1> [ 1>
T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C :\local\boost_1_67_0\boost/iterator/zip_iterator.hpp(357): 注意: 或
'boost::iterators::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>> boost::iterators::make_zip_iterator,boost::compute::buffer_iterator,boost: :tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type>>(IteratorTuple)' [使用参数相关查找找到] 1> with 1> [ 1> T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C:\local\boost_1_67_0\boost/compute/algorithm/ transform.hpp(68): 注意:在尝试匹配参数列表时 '(boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>)' 1> 与 1> [ 1>
T=boost::compute::float4_ 1> ] 1>C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(72): error C2672: 'transform': 找不到匹配的重载函数 1>C: \local\boost_1_67_0\boost/compute/algorithm/transform.hpp(72): error C2780: 'OutputIterator boost::compute::transform(InputIterator1,InputIterator1,InputIterator2,OutputIterator,BinaryOperator,boost::compute::command_queue &) ': 需要 6 个参数 - 提供 4 个 1> C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(55): 注意:参见 'boost::compute::transform' 的声明 ====== ==== 构建:0 成功,

1 失败,2 最新,0 跳过 ==========