Ошибка в точности соответствует сообщению компилятора. Вы не можете использовать функции хоста в коде устройства, и это включает в себя всю библиотеку C ++ std хоста. CUDA включает в себя собственную стандартную библиотеку, описанную в руководстве по программированию, но вы должны использовать либо pow, либо fpow (взято из стандартной библиотеки C, без C ++ или пространств имен). nvcc перегрузит функцию с помощью правильной функции устройства и вставит полученный код. Будет работать что-то вроде следующего:
#include <math.h>
__device__ float func(float x) {
return x * x * fpow(x, 0.123456f);
}
РЕДАКТИРОВАТЬ: Бит, который я пропустил в первый раз, - это спецификатор шаблона, указанный в ошибках. Вы уверены, что передаете либо аргументы типа float, либо double аргументы в pow? Если вы передаете целые числа, в стандартной библиотеке CUDA нет функции перегрузки, поэтому может произойти сбой. Если вам нужна целочисленная функция pow, вам придется выполнить свою собственную (или выполнить приведение, но функция pow довольно дорогая, и я уверен, что некоторое каскадное целочисленное умножение будет быстрее).