据我了解,CUDA 10.1 删除了以下shfl
说明:
PTX ISA 6.4 版删除了以下功能:
对于 .targetsm_70 及更高版本,已删除对不带限定符的支持
shfl
和投票指令。.sync
自 PTX ISA 6.0 版以来,此支持已被弃用,如 PTX ISA 6.2 版中所述。
shfl
支持未来和过去 CUDA 版本的正确方法是什么?
我当前的方法(在下面共享)导致使用 CUDA 10.1 出错:
ptxas ... line 466727; error : Instruction 'shfl' without '.sync' is not supported on .target sm_70 and higher from PTX ISA version 6.4
template <typename T>
__device__ static __forceinline__
T _shfl_up(T var, unsigned int delta, int width=WARPSIZE, unsigned mask=MEMBERMASK)
{
#if (__CUDACC_VER_MAJOR__ >= 9)
var = __shfl_up_sync(mask, var, delta, width);
#else
var = __shfl_up(var, delta, width);
#endif
return var;
}
另外,我想补充一点,我的项目的依赖项之一是CUB,我相信他们使用相同的方法来拆分_sync()
和旧shfl
指令。我不确定我做错了什么。