我是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
?
threadIdx.x
是int类型.CUDA数学库仅针对单精度(float
)和双精度(double
)重载.您需要为要调用sqrt()
的CUDA版本提供'float'或'double'类型参数sqrt()
.
更改
myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
成
myArrayGPU[threadIdx.x] = sqrt( (float) threadIdx.x);
有关更多详细信息,请查看CUDA sqrt()原型文档.
sqrt
期望浮动类型变量.尝试sqrt((float)(threadIdx.x))