Your problem is that while pow
is defined in the CUDA math API (see here), it is not template specialised for integer arguments, ie. there is no version like this:
__device__ ? int pow ( int x, int y )
This is why you are getting an error. You will need to explicitly cast the base argument to a floating point type like this:
dist_dev[idx] = pow((double)(x_d[idx] - x_d[i]), 2.0) +
pow((double)(y_d[idx] - y_d[i]), 2.0);
Having said that, using double precision floating point exponential in your example for a integer square will be poor from an efficiency point of view. It would be preferable to perform the calculation using integer multiplication instead:
int dx = x_d[idx] - x_d[i];
int dy = y_d[idx] - y_d[i];
dist_dev[idx] = (dx * dx) + (dy * dy);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…