gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:34:56 29 4
gpt4 key购买 nike

问题或多或少说明了一切。

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);
}

编辑:我第一次错过的是错误中报告的模板说明符。您确定要将 float 或 double 参数传递给 pow 吗?如果您传递的是整数,则 CUDA 标准库中没有重载函数,这就是它可能失败的原因。如果您需要一个整数 pow 函数,您将不得不自己动手(或进行转换,但 pow 是一个相当昂贵的函数,我确信一些级联整数乘法会更快)。

关于python - PyCUDA:设备代码中的 Pow 尝试使用 std::pow,失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5656605/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com