【问题标题】:CUDA fmod - calling a __host__ function from a __global__ function is not allowedCUDA fmod - 不允许从 __global__ 函数调用 __host__ 函数
【发布时间】:2013-05-17 18:25:02
【问题描述】:

我正在使用 VS2012 编译一个 CUDA 5 项目,我收到此错误:

error : calling a __host__ function("fmod<float, int> ") from a __global__ function is not allowed

编译器实际上将 CUDA __device__ fmod 与 math.h 中定义的 fmod 不匹配

我怎样才能在它们之间“消除歧义”?

【问题讨论】:

  • 你是否包含了 math.h?
  • 不,但它可能包含在其他地方。这是一个大项目,我只是其中的一部分
  • 设备端不支持 fmod(float,int) 变体,因此编译器只查找主机端版本,无法从设备调用。 CUDA 支持以下重载变体:fmod(float,float)、fmod(double,double)。将您的案例映射到其中之一应该是微不足道的。

标签: c++ visual-studio-2012 cuda


【解决方案1】:

这是由于模板参数不匹配而发生的。您正在使用浮点参数和整数参数调用 fmod。一对单精度或双精度浮点参数只有一个设备模板参数(请参阅here)。

您可能正在寻找的是fmod(float, (float)int)....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2021-08-03
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多