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

Другие вопросы по тегам