如题,新手求指导
楼主您好,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关键字,如果不使用这个关键字的话,加很多同步也是可以的,但是开销会大一些。
大致如上,祝您好运!
谢谢,很详细,获益匪浅。
谢谢您的回复。对我很有用
不客气的,欢迎您常来论坛讨论~
祝您编码顺利!