__shfl() intrinsic for doubles


In the documentation for CUDA 7.0 I read ‘Types other than int or float must first be cast in order to use the __shfl() intrinsics.’

However, in the file /usr/local/cuda-7.0/targets/x86_64-linux/include/sm_30_intrinsics.hpp, I find this code:

SM_30_INTRINSICS_DECL double __shfl_down(double var, unsigned int delta, int width) {
float lo, hi;
asm volatile(“mov.b64 {%0,%1}, %2;” : “=f”(lo), “=f”(hi) : “d”(var));
hi = __shfl_down(hi, delta, width);
lo = __shfl_down(lo, delta, width);
asm volatile(“mov.b64 %0, {%1,%2};” : “=d”(var) : “f”(lo), “f”(hi));
return var;

Am I able to use that function safely although it is not mentioned in the documentation?

Thank you,


I assume this is essentially a cross-posting from here:


Note the disclaimer in the comments on the answer posted there.

Yes, thanks for the answer.