Why is my call of the CUDA math library sqrt() function failing?

c, c++, cuda, math, square-root

Solution

`threadIdx.x` is of type int. CUDA math library is overloaded only for single precision (`float`) and double precision (`double`). You need to supply either a 'float' or 'double' type parameter to `sqrt()` for the CUDA version of `sqrt()` to be called.

Change

myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);

into

myArrayGPU[threadIdx.x] = sqrt( (float) threadIdx.x);

For more detailed information, take a look at the CUDA sqrt() prototype documentation.

Problem

I am new to Cuda, I have the following function: ``` __global__ void square(float *myArrayGPU) { myArrayGPU[threadIdx.x] = sqrt(threadIdx.x); } ``` I want to use the cuda math library, I tried to `#include "math.h"` but I still get the error `error: calling a __host__ function("__sqrt") from a __global__ function("square") is not allowed` Any idea what library should I include to use the `sqrt`?

Original source