编程语言
首页 > 编程语言> > python – PyCUDA:设备代码中的Pow尝试使用std :: pow,失败

python – PyCUDA:设备代码中的Pow尝试使用std :: pow,失败

作者:互联网

问题或多或少都说明了一切.

calling a host function("std::pow<int, int> ") from a __device__/__global__ function("_calc_psd") is not allowed

从我的理解,这应该是使用cuda pow功能,但事实并非如此.

解决方法:

该错误与报告编译器完全一样.您不能在设备代码中使用主机功能,并且包括整个主机C std库. 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函数,你将不得不自己滚动(或者进行转换,但pow是一个相当昂贵的函数,我确信一些级联整数乘法会更快).

标签:python,cuda,pow,pycuda
来源: https://codeday.me/bug/20190531/1187817.html