Я новичок в 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
). Вам необходимо указать параметр типа «float» или «double» для sqrt()
для версии CUDA sqrt()
быть названным.
+ Изменить
myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
в
myArrayGPU[threadIdx.x] = sqrt( (float) threadIdx.x);
Для получения более подробной информации, посмотрите на Документация по прототипу CUDA sqrt ().
sqrt
ожидает переменную плавающего типа. Пытаться sqrt((float)(threadIdx.x))