【问题标题】:Does boost::compute support const modifiers?boost::compute 是否支持 const 修饰符?
【发布时间】:2025-12-02 12:15:02
【问题描述】:

是否可以设置哪些函数参数具有“全局”或“常量”修饰符?或者如何至少在每个函数的基础上检查生成函数的代码(手动插入)?

我看到的最接近的事情是BOOST_COMPUTE_STRINGIZE_SOURCE,您可以在其中手动编写所有内核代码,将其保存为字符串,手动编译,使用set_arg(argId, wrapedItems)queue.enqueue_nd_range_kernel 调用,这看起来比:

    BOOST_COMPUTE_CLOSURE(ftype, kick, (ftype beam), (__const voltage), {
        return beam * sin(beam + voltage);
    });

希望。

【问题讨论】:

  • 您的意思是“Is it possible to see”吗?你的意思是“哪个方法有一个 const 修饰符”?你说的“全局修饰符”是什么意思,可能是static
  • @GiovanniFunchal 啊,谢谢。如果是这样,它们就不是标准的 C 或 C++,它们是处理 GPU 内容的特定扩展,对吧?
  • 是的,我认为最初的问题令人困惑。 boost::compute 在更好的 C++ api 中围绕来自 OpenCL 的 __global__constant 扩展,我不确定混合它们是否有意义。
  • @GiovanniFunchal:我的问题是,当我定义 BOOST_COMPUTE_CLOSURE 并传递参数时,我无法为 CLOSURE 变量设置 __const__local 并且不清楚哪个参数传递给功能。

标签: c++ boost opencl gpu boost-compute


【解决方案1】:

BOOST_COMPUTE_CLOSURE() 构造一个可以传递给 Boost.Compute 函数的函数,例如 transform()sort()。与BOOST_COMPUTE_FUNCTION() 相比,它允许捕获范围内的C++ 变量。它不构造 OpenCL 内核对象,因此实际上不需要指定地址空间限定符,因为它从不操作指针,只操作值。

但是,如果您有自己的内核并希望将__constant 缓冲区作为参数传递给它,那么请使用constant_buffer_iterator

【讨论】:

    最近更新 更多