问题或多或少说明了一切。
calling a host function("std::pow<int, int> ") from a __device__/__global__ function("_calc_psd") is not allowed据我所知,这应该使用cuda的pow函数,但它不是。
发布于 2011-04-14 13:46:49
该错误与编译器报告的错误完全相同。您不能在设备代码中使用主机函数,这包括整个主机C++标准库。CUDA包含自己的标准库,如编程指南中所述,但您应该使用pow或fpow (取自C标准库,没有C++或名称空间)。nvcc将使用cuda正确的设备函数重载该函数,并内联结果代码。下面的代码将会起作用:
#include <math.h>
__device__ float func(float x) {
return x * x * fpow(x, 0.123456f);
}编辑:我第一次遗漏的部分是在错误中报告的模板说明符。您确定要将浮点型参数或双精度参数传递给pow吗?如果要传递整数,CUDA标准库中没有重载函数,这就是它可能失败的原因。如果你需要一个整数幂函数,你必须自己写(或者做强制转换,但是pow是一个相当昂贵的函数,我确信一些级联的整数乘法会更快)。
https://stackoverflow.com/questions/5656605
复制相似问题