【问题标题】:Are there any warp voting functions in OpenCL?OpenCL 中是否有任何扭曲投票功能?
【发布时间】:2016-02-29 08:51:01
【问题描述】:

在 CUDA 中,有 __ballot()__any()__all()__popc() 和一组 lanemask 函数,用于在 warp 内的所有通道(通常大小为 32)上执行 warp 投票操作。我想知道 OpenCL 中是否有任何此类功能可以在一个波前执行相同的操作。如果没有这样的函数,我可能需要自己将它们实现为内联函数,以便在我的项目中使用。

【问题讨论】:

    标签: cuda opencl


    【解决方案1】:

    根据OpenCL v. 1.1 specification,第6.11节“内置函数”,我相信答案是否定的。

    但是在 NVIDIA GPU 上,您可能可以使用内联 PTX 来实现这些东西(或至少 this blogger was able to use inline PTX)。

    【讨论】:

    • 实际上在我提出这个问题后,我意识到由于 OpenCL 的跨平台能力,它可能不会是任何像这样的内置函数。我猜任何硬件特定的功能实现都是不可接受的。然而,你最后的评论给了我一些希望。如果有人使用 AMD 的 IL 为 AMD 的硬件制作内联函数,我会很高兴:-P
    • 是的,但是,我们可能可以在 nvidia 上使用 ineline 汇编程序,并在其他所有内容上使用子组 opencl
    【解决方案2】:

    实际上请查看 OpenCL subgroups。他们定义了一些交叉车道功能,例如sub_group_all()sub_group_any() 以及其他一些有趣的东西。

    子群是一个相对较新的生物,我不确定谁都支持它。 Intel GPU 实现(实际上是扩展)有一些更有趣的shuffling functions 来置换通道(在寄存器文件中)以及进行显式块写入和读取。我敢打赌 AMD 也支持子组,但我不确定 NVidia。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      相关资源
      最近更新 更多