我是Cuda的新手,我有以下功能:
__global__ void square(float *myArrayGPU)
{
myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
}
我想使用cuda数学库,我尝试#include "math.h"
但我仍然得到错误
error: calling a __host__ function("__sqrt") from a __global__ function("square") is not allowed
知道应该包含哪些库才能使用sqrt
?
答案 0 :(得分:18)
threadIdx.x
的类型为int。 CUDA数学库仅针对单精度(float
)和双精度(double
)重载。您需要为sqrt()
提供'float'或'double'类型参数,以便调用sqrt()
的CUDA版本。
更改
myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
进入
myArrayGPU[threadIdx.x] = sqrt( (float) threadIdx.x);
有关更多详细信息,请查看CUDA sqrt() prototype documentation。
答案 1 :(得分:7)
sqrt
期望浮动类型变量。试试sqrt((float)(threadIdx.x))