在CUDA中,__ballot()
,__any()
,__all()
,__popc()
和一系列lanemask函数可以跨所有通道执行warp投票操作(通常大小为32)在经线内。我想知道在OpenCL中是否实现了在一个wavefront中执行相同操作的任何此类功能。如果没有这样的功能,我可能需要将它们实现为内联函数,以便在我的项目中使用。
答案 0 :(得分:3)
根据OpenCL v. 1.1 specification,第6.11节"内置函数",我认为答案是否定的。
然而,在NVIDIA GPU上,您可以使用内联PTX来实现这些功能(或至少this blogger was able to use inline PTX)。
答案 1 :(得分:2)
实际上查看OpenCL subgroups。它们定义了一些跨车道功能,如sub_group_all()
和sub_group_any()
以及其他有趣的东西。
小组是一个相对较新的生物,我不确定是谁都支持它。英特尔GPU实现(实际上是扩展)有一些更有趣的shuffling functions来置换通道(在寄存器文件中)以及进行显式的块写入和读取。我敢打赌AMD也支持子组,但我不确定NVidia。