计算能力2.0以上的芯片同一warp内线程通信用不用votalite关键

如题,新手求指导

楼主您好,warp内通信在2.0+上可以有多种方式,根据您的数据规模的不同。有如下选择:

(1)如果您只需要交换1bit的数据,可以使用warp vote。(__any/__all/__ballot)

(2)如果您需要交换1bit到4Byte的数据,您可以使用warp shuffle(3.x), 或者走shared memory

(3)如果您需要交换>4B的数据,您可以拆分为多个2的步骤(即:多次warp shuffle或者干脆shared memory访问).

因为您询问了volatile, 我假设您选择了走shared memory.
那么在2.x+计算能力上,对shared memory的读写不是立刻进行的,所以如果warp内通信一般是需要使用volatile的,以便编译器能生成指令,立刻写入、读取。

对于1.x, 则无需volatile, 总是立刻写入、读取的。

LZ您好,如果您是warp内通过shared memory通信的话,建议您使用votalite关键字,如果不使用这个关键字的话,加很多同步也是可以的,但是开销会大一些。

大致如上,祝您好运!

谢谢,很详细,获益匪浅。

谢谢您的回复。对我很有用

不客气的,欢迎您常来论坛讨论~

祝您编码顺利!