__shfl_down y __shfl_down_sync dan resultados diferentes
Estoy confundido por __shfl_down y __shfl_down_sync, dan diferentes resultados.
__global__ void shufledown1(double* a, double *b,double *c, int N)
{
double temp = 2.0;
__syncthreads();
for (int offset = 32/2; offset > 0; offset /= 2){
temp+=__shfl_down(temp, offset,32);
}
printf("%d %f %d \n",threadIdx.x ,temp,blockDim.x * gridDim.x);
}
__global__ void shufledown2(double* a, double *b,double *c, int N)
{
double temp = 2.0;
__syncthreads();
for (int offset = 32/2; offset > 0; offset /= 2){
temp+=__shfl_down_sync(temp, offset,32)
}
printf("%d %f %d \n",threadIdx.x ,temp,blockDim.x * gridDim.x);
}
El primero dio:
0 64.000000 64
'''''
''''
''''
63 64.000000 64
El segundo dio:
0 33.000000 64
'''''
''''
''''
63 33.000000 64
El núcleo se ejecutó con 1 bloque de 64 hilos. Saludo