ultima tutorial para cuda gpgpu

tutorial - Función CUDA pow con argumentos enteros



cuda ultima version (1)

Su problema es que mientras pow se define en la API matemática de CUDA (ver aquí ), no es una plantilla especializada para argumentos enteros, es decir. no hay una versión como esta:

__device__ ​ int pow ( int x, int y )

Es por eso que está obteniendo un error. Tendrá que convertir explícitamente el argumento base en un tipo de punto flotante como este:

dist_dev[idx] = pow((double)(x_d[idx] - x_d[i]), 2.0) + pow((double)(y_d[idx] - y_d[i]), 2.0);

Habiendo dicho eso, utilizar exponencial de coma flotante de doble precisión en su ejemplo para un cuadrado entero será pobre desde el punto de vista de la eficiencia. Sería preferible realizar el cálculo usando la multiplicación entera en su lugar:

int dx = x_d[idx] - x_d[i]; int dy = y_d[idx] - y_d[i]; dist_dev[idx] = (dx * dx) + (dy * dy);

Soy nuevo en CUDA, y no puedo entender lo que estoy haciendo mal.

Estoy tratando de calcular la distancia del objeto que tiene id en la matriz, el eje x en la matriz y el eje y en la matriz para encontrar vecinos para cada objeto

__global__ void dist(int *id_d, int *x_d, int *y_d, int *dist_dev, int dimBlock, int i) { int idx = threadIdx.x + blockIdx.x*blockDim.x; while(idx < dimBlock){ int i; for(i= 0; i< dimBlock; i++){ if (idx == i)continue; dist_dev[idx] = pow(x_d[idx] - x_d[i], 2) + pow(y_d[idx] - y_d[i], 2); // error here } } }

¿El pow no está definido en el código kernel?