我如何进行shfl.idx的反转(即扭曲散射而不是扭曲聚集)?

时间:2018-02-07 00:11:03

标签: cuda shuffle ptx gpu-warp

使用CUDA的shfl.idx指令,我们执行基本上是一个内部变形聚集:每个通道提供一个原点和一条原始通道,并获得原始通道的原点。

相反的操作怎么样,分散?我的意思是,不是分散到记忆中,而是分散到车道上。也就是说,每个车道提供一个基准和一个目的地车道,而对于其中只有一个车道的车道,它们最终会定位到目标车道的值;其他通道最终会显示未定义/任意值。

我很确定PTX没有这样的东西。它可能以某种方式存在于SASS中吗?如果没有,是否有更好的方法来实现这一点,比如散布到共享内存和从共享内存加载,都是通过lane索引?

1 个答案:

答案 0 :(得分:1)

随机播放操作都是根据要读取的通道定义的。 CUDA函数几乎直接映射到ptx指令,它们本身几乎直接映射到SASS。它们是操作的所有变体“使其他人可以读取此值,并从给定的目标通道读取值”,并使用各种方便的方式指定目标通道。

通常,您应该尝试重新调整功能,这样就不需要“分散”操作。没有一条指令可以满足您的需求。

使用现有的warp内在函数实现它可能是可能的,但并不明显。您可以使用一系列shuffle,类似于您用于减少warp以传输源通道ID,并跟进最终的shuffle以将有效负载提取到所需的通道中。