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

18

Другие решения

sqrt ожидает переменную плавающего типа. Пытаться sqrt((float)(threadIdx.x))

7

По вопросам рекламы [email protected]