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

Avr*_*dis 6 c c++ math cuda square-root

我是Cuda的新手,我有以下功能:

__global__ void square(float *myArrayGPU)
{
   myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
}
Run Code Online (Sandbox Code Playgroud)

我想使用cuda数学库,我试过,#include "math.h"但我仍然得到错误

error: calling a __host__ function("__sqrt") from a __global__ function("square") is not allowed

知道我应该包含哪些库来使用sqrt

Har*_*rma 19

threadIdx.x是int类型.CUDA数学库仅针对单精度(float)和双精度(double)重载.您需要为要调用sqrt()的CUDA版本提供'float'或'double'类型参数sqrt().

更改

myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
Run Code Online (Sandbox Code Playgroud)

myArrayGPU[threadIdx.x] = sqrt( (float) threadIdx.x);
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看CUDA sqrt()原型文档.


Avi*_*urg 7

sqrt期望浮动类型变量.尝试sqrt((float)(threadIdx.x))