4

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

4

2 回答 2

3

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

但是在 NVIDIA GPU 上,您可能可以使用 inline PTX 来实现这些东西(或者至少这个博主能够使用 inline PTX)。

于 2012-07-11T23:36:30.850 回答
2

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

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

于 2016-02-29T00:51:01.733 回答