为什么我对CUDA数学库sqrt()函数的调用失败了?

时间:2013-12-01 12:13:45

标签: c++ c math cuda square-root

我是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

2 个答案:

答案 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))