2012-07-11 69 views
4

在CUDA中,有__ballot(),__any(),__all(),__popc()和一組lanemask函數,用於執行warp內所有通道(通常尺寸爲32)的warp投票操作。我想知道在OpenCL中是否有這樣的功能可以在一個波前內執行相同的操作。如果沒有這樣的功能,我可能需要將它們實現爲自己在我的項目中使用的內聯函數。OpenCL中是否有任何warp投票功能?

回答

3

根據OpenCL v. 1.1 specification,第6.11節「內置函數」,我相信答案是否定的。

但是在NVIDIA GPU上,您可以使用內聯PTX來實現這些功能(或至少this blogger was able to use inline PTX)。

+0

事實上,在我提出這個問題後,我意識到由於OpenCL的跨平臺功能,它可能不會像這些內置功能。我猜想任何硬件特定的功能實現都是不可接受的。然而你最後的評論給了我一些希望。如果有人在AMD的硬件上使用AMD的IL進行內聯功能,我會很開心:-P – gpunerd 2012-07-12 03:43:08

+0

是的,但是,我們可以在nvidia上使用ineline彙編程序,並且子組在openclcl – 2016-06-11 17:14:39

2

其實檢查OpenCL subgroups。他們定義了一些交叉車道功能,如sub_group_all()sub_group_any()以及其他有趣的事情。

小組是一個相對較新的小動物,我不確定誰都支持它。英特爾GPU的實現(實際上是擴展)有一些更有趣的shuffling functions來排列通道(在寄存器文件內)以及明確的塊寫入和讀取。我敢打賭,AMD也支持子組,但我不確定NVidia。