Почему происходит сбой вызова функции sqrt() из математической библиотеки CUDA?
Я новичок в 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 ответа
Решение
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))